Managing
Technical Debt
What is Technical Debt?
“Technical debt is the decay of component
and inter-component behavior when the
application functionality meets a minimum
standard of satisfaction for its users.”
Chris Sterling (Managing Software Debt: Building for Inevitable Change)
Describing Technical Debt
● Intentional / Unintentional
● Short term / Long Term
Two key attributes:
Financial
Debt
Analogy
Financial Debt Analogy
Analogous to financial debt, technical
debt is not necessarily a bad thing, if
managed correctly.
Financial Debt Analogy
No matter what, the cost of addressing
technical debt increases with time.
How
It
Happens
Reasons
Schedule Pressure
When teams are held to a commitment that is unreasonable, they are bound to cut corners in order to
meet the expectations of management.
Reasons:
- Scope Creep
- Third-party estimates
- Change in team makeup
- Artifact of the estimation process
- Late integration
How it Happens
Duplication
The duplication of logic in a codebase makes making changes much more error-prone and timely.
Reasons:
- Lack of experience on the part of team members
- Copy-and-paste programming
- Conforming to existing software’s poor design
- Pressure to Deliver
How it Happens
Getting the Design “Right” the First Time
It is unlikely that you will design the perfect system to accommodate any and all changes to a codebase.
Reasons:
- Using Waterfall Development
- Users expectations change
- Improvements in underlying technologies
- Adopting new development practices
Getting
Out Of
Debt
Getting Out Of Debt
The first step is acknowledging the debt.
Complaining is not an effective acknowledgment
of the debt.
Paying Off Short-term Debt
Short-term Debt
Short term debt is debt that can be fixed quickly.
Effective Acknowledgment of Short-term debt:
- Pay off the technical debt immediately
- Use of runtime exceptions
Examples:
- Code coverage for a method
- Small Refactorings
Paying Off Short-term Debt
Pay off the technical debt Immediately
Fix it now. Simple.
Paying Off Short-term Debt
Use of Runtime Exceptions
Place a runtime exception exactly where the technical debt is.
Useful if the fix to the technical debt does not drastically increase the amount of time allotted for the
original estimate of work.
Effectively Managing Long Term Debt
Long Term Debt
Some technical debt is so large that paying off the debt is a task in and of itself. This is classified as long
term debt.
A great way to effectively manage long term debt is to maintain a list of Technical Debt tickets in the
product backlog, alongside feature and bug tickets.
Examples:
- Code Coverage for an entire Class
- Large Refactorings
- Process Optimizations
Effectively Managing Long Term Debt
Technical Debt Backlog
The creation of technical debts tickets in the backlog takes Technical Debt management to a whole new
level as members outside of the development team will now be made aware of the technical debt.
Building team awareness will greatly aid in the management of technical debt as long as developers
properly convey the what technical debt is and why it should be managed.
Effectively Managing Long Term Debt
Project Manager Collaboration
Since the Project Manager takes on most of the burden of communicating with business stakeholders
and Developers in the best place to balance the amount of time allocated to paying off long term debt.
It is up to the developers to ensure that PMs have an accurate understanding of why the completion of
these technical debt tickets is vital to the health of the project.
Effectively Managing Long Term Debt
Managing the Technical Debt Backlog
It is up to the developers of the codebase to properly groom the Technical debt tickets that have been
backlogged and convey the importance of of these tickets to the PM so that they are not deprioritized.
Your technical project should only maintain one list of work.
Effectively Managing Long Term Debt
Integration with Agile
The creation of technical debt tickets should be continuous. This fits in well with Agile software
development as technical debt tickets should be continuously included in new sprints.
How It
Worked
For Us
Our Experience
Our Adoption
In our project, the Android team pioneered the use of technical debt tickets. We simply started creating
tickets and assigned them a new Epic labeled “Technical Debt”.
Being the first team to adopt such a practice, I was skeptical of how well the PMs, along with our iOS
counterparts, would react to such a change.
Our Experience
Integration with Entire Project
Fortunately, the PMs quickly understood the importance of addressing such tasks.
*Fun Fact* It was received so well from our PMs that the PMs created a ticket for our iOS counterparts
to create technical debt tickets.
Summary
The accumulation of technical debt will occur.
It is up to the developers on that project to promote the importance of effectively managing technical
debt by either fixing it immediately, using runtime exceptions to fix it in a few minutes, or creating a ticket
in the Technical Debt Backlog.
It is also up to the developers to effectively collaborate with other members of the team so that everyone
has a good understanding of the importance of a technical debt backlog.
Next Steps for Fuzz
- The use of technical debt tickets will aid in our TDD initiatives as (mentioned earlier)
technical debt tickets are great ways to track large refactorings.
- The continued adoption of technical debt tickets by developers will continue to build
awareness of Technical Debt at Fuzz in general.
Discussion:
- What do you guys think? How do other projects at Fuzz manage technical debt?
- Specifically since Fuzz is an Agency and some of our projects have a finite end date,
do you think managing Technical Debt is as important on such projects?
CORE
Module
1
Module
2
Module
3
Module
4

Managing Technical Debt

  • 1.
  • 2.
    What is TechnicalDebt? “Technical debt is the decay of component and inter-component behavior when the application functionality meets a minimum standard of satisfaction for its users.” Chris Sterling (Managing Software Debt: Building for Inevitable Change)
  • 3.
    Describing Technical Debt ●Intentional / Unintentional ● Short term / Long Term Two key attributes:
  • 4.
  • 5.
    Financial Debt Analogy Analogousto financial debt, technical debt is not necessarily a bad thing, if managed correctly.
  • 6.
    Financial Debt Analogy Nomatter what, the cost of addressing technical debt increases with time.
  • 7.
  • 8.
    Reasons Schedule Pressure When teamsare held to a commitment that is unreasonable, they are bound to cut corners in order to meet the expectations of management. Reasons: - Scope Creep - Third-party estimates - Change in team makeup - Artifact of the estimation process - Late integration
  • 9.
    How it Happens Duplication Theduplication of logic in a codebase makes making changes much more error-prone and timely. Reasons: - Lack of experience on the part of team members - Copy-and-paste programming - Conforming to existing software’s poor design - Pressure to Deliver
  • 10.
    How it Happens Gettingthe Design “Right” the First Time It is unlikely that you will design the perfect system to accommodate any and all changes to a codebase. Reasons: - Using Waterfall Development - Users expectations change - Improvements in underlying technologies - Adopting new development practices
  • 11.
  • 12.
    Getting Out OfDebt The first step is acknowledging the debt. Complaining is not an effective acknowledgment of the debt.
  • 13.
    Paying Off Short-termDebt Short-term Debt Short term debt is debt that can be fixed quickly. Effective Acknowledgment of Short-term debt: - Pay off the technical debt immediately - Use of runtime exceptions Examples: - Code coverage for a method - Small Refactorings
  • 14.
    Paying Off Short-termDebt Pay off the technical debt Immediately Fix it now. Simple.
  • 15.
    Paying Off Short-termDebt Use of Runtime Exceptions Place a runtime exception exactly where the technical debt is. Useful if the fix to the technical debt does not drastically increase the amount of time allotted for the original estimate of work.
  • 16.
    Effectively Managing LongTerm Debt Long Term Debt Some technical debt is so large that paying off the debt is a task in and of itself. This is classified as long term debt. A great way to effectively manage long term debt is to maintain a list of Technical Debt tickets in the product backlog, alongside feature and bug tickets. Examples: - Code Coverage for an entire Class - Large Refactorings - Process Optimizations
  • 17.
    Effectively Managing LongTerm Debt Technical Debt Backlog The creation of technical debts tickets in the backlog takes Technical Debt management to a whole new level as members outside of the development team will now be made aware of the technical debt. Building team awareness will greatly aid in the management of technical debt as long as developers properly convey the what technical debt is and why it should be managed.
  • 18.
    Effectively Managing LongTerm Debt Project Manager Collaboration Since the Project Manager takes on most of the burden of communicating with business stakeholders and Developers in the best place to balance the amount of time allocated to paying off long term debt. It is up to the developers to ensure that PMs have an accurate understanding of why the completion of these technical debt tickets is vital to the health of the project.
  • 19.
    Effectively Managing LongTerm Debt Managing the Technical Debt Backlog It is up to the developers of the codebase to properly groom the Technical debt tickets that have been backlogged and convey the importance of of these tickets to the PM so that they are not deprioritized. Your technical project should only maintain one list of work.
  • 20.
    Effectively Managing LongTerm Debt Integration with Agile The creation of technical debt tickets should be continuous. This fits in well with Agile software development as technical debt tickets should be continuously included in new sprints.
  • 21.
  • 22.
    Our Experience Our Adoption Inour project, the Android team pioneered the use of technical debt tickets. We simply started creating tickets and assigned them a new Epic labeled “Technical Debt”. Being the first team to adopt such a practice, I was skeptical of how well the PMs, along with our iOS counterparts, would react to such a change.
  • 23.
    Our Experience Integration withEntire Project Fortunately, the PMs quickly understood the importance of addressing such tasks. *Fun Fact* It was received so well from our PMs that the PMs created a ticket for our iOS counterparts to create technical debt tickets.
  • 24.
    Summary The accumulation oftechnical debt will occur. It is up to the developers on that project to promote the importance of effectively managing technical debt by either fixing it immediately, using runtime exceptions to fix it in a few minutes, or creating a ticket in the Technical Debt Backlog. It is also up to the developers to effectively collaborate with other members of the team so that everyone has a good understanding of the importance of a technical debt backlog.
  • 25.
    Next Steps forFuzz - The use of technical debt tickets will aid in our TDD initiatives as (mentioned earlier) technical debt tickets are great ways to track large refactorings. - The continued adoption of technical debt tickets by developers will continue to build awareness of Technical Debt at Fuzz in general. Discussion: - What do you guys think? How do other projects at Fuzz manage technical debt? - Specifically since Fuzz is an Agency and some of our projects have a finite end date, do you think managing Technical Debt is as important on such projects?
  • 26.

Editor's Notes

  • #4 Technical Debt can be simplified as to having two attributes: