You don't need to stop shipping features to fix technical debt
@ryan0x44
@ryan0x44
This talk is also published as an article on Medium:��bit.ly/tech-debt-post
We’ll cover:
@ryan0x44
Heard this before?
#1 Tech Debt 1/5
@ryan0x44
"We could release so much faster if we just did X…"
"Well, with all this feature work, we just don't have time."
"That makes sense ,�so why haven't you done it?"
Heard this before?
#1 Tech Debt 2/5
@ryan0x44
“We really need to do this.� We should just stop all feature work until we fix this.”
What is Tech Debt?
#1 Tech Debt 3/5
@ryan0x44
Technical Debt
Examples of Tech Debt
#1 Tech Debt 4/5
@ryan0x44
The Challenge?
#1 Tech Debt 5/5
@ryan0x44
Easiest way to solve Tech Debt
#2 Allocation Framework 1/4
@ryan0x44
"The easiest way to solve a problem is to deny it exists."
- Isaac Asimov
Is it really a problem? You can probably ignore it, unless:
Allocation
Framework
#2 Allocation Framework 2/4
@ryan0x44
At each level of planning, allocate & assign work to one of these buckets:
Functional Improvements
Delivers functional changes which your customers see or use
e.g. shiny new features
Program�Work
Driven from outside of your team/happening in the broader org
e.g. platform-wide L10N/I18N
Delivery�Performance
Increases delivery speed or quality of output in a quantifiable way
e.g. automating deployments
Unplanned�Work
Cost of delay is urgent, so you’ll prioritise fixing immediately
e.g. outage affecting 20% customers
Hierarchies of planning
#2 Allocation Framework 3/4
@ryan0x44
Being able to communicate with a consistent vocabulary across the organisational hierarchy will help you influence decisions to invest in solving Technical Debt issues.
Unclassifiable work
#2 Allocation Framework 4/4
@ryan0x44
Can’t ignore it? Can’t classify it into�Delivery Performance or Unplanned Work?
e.g. “The code is hard to test”
Do small, incremental improvements not “big bang” projects. Every PR should improve things.
Allocation
Framework
#3 Allocating Time & Using Levers 1/5
@ryan0x44
Example breakdown
Functional Improvements
Delivers functional changes which your customers see or use
e.g. shiny new features
Program�Work
Driven from outside of your team/happening in the broader org
e.g. platform-wide L10N/I18N
Delivery�Performance
Increases delivery speed or quality of output in a quantifiable way
e.g. automating deployments
Unplanned�Work
Cost of delay is urgent, so you’ll prioritise fixing immediately
e.g. outage affecting 20% customers
40%
20%
10%
30%
Determining the right %’s
#3 Allocating Time & Using Levers 2/5
@ryan0x44
Nominate numbers to start, then iterate with stakeholders.
Allocation
Framework
#3 Allocating Time & Using Levers 3/5
@ryan0x44
Two levers:
1. Delivery� Performance� should reduce� Unplanned
2. Program Work� impacts� Functional� Improvements
Functional Improvements
Delivers functional changes which your customers see or use
e.g. shiny new features
Program�Work
Driven from outside of your team/happening in the broader org
e.g. platform-wide L10N/I18N
Delivery�Performance
Increases delivery speed or quality of output in a quantifiable way
e.g. automating deployments
Unplanned�Work
Cost of delay is urgent, so you’ll prioritise fixing immediately
e.g. outage affecting 20% customers
IMPACTS
REDUCES
40%
20%
10%
30%
Reducing Unplanned Work
#3 Allocating Time & Using Levers 4/5
@ryan0x44
Delivery Performance can impact Unplanned with:
The impact of Program Work
#3 Allocating Time & Using Levers 5/5
@ryan0x44
Unplanned Work is somewhat fixed
Need more time for Functional Improvements?
Maximising the Allocated Time
#4 Execution & Measurement 1/3
@ryan0x44
When dividing allocated time among your team, consider:
Measurement
#4 Execution & Measurement 2/3
@ryan0x44
Measurement here is especially useful for Unplanned Work
Continuous Improvement
#4 Execution & Measurement 3/3
@ryan0x44
Ways to evolve your time allocation for the better:
Questions?
@ryan0x44
Further Reading: