What is Technical Debt in Agile?
What is Technical Debt in Agile? How Can We Fix It?
In the rush to meet project deadlines and deliver products, we engineers tend to take shortcuts to help us ship faster.
In other words, we accrue technical debt. Tech debt, or code debt, is a virtually inevitable part of the agile software development process. It’s not always a bad thing either – in fact, teams should be strategically accruing tech debt. What’s important is that it’s managed properly.
In this article, we'll explain what tech debt is in the context of Agile. Then, we’ll explain some practical strategies to manage and reduce tech debt effectively.
Whether you're a developer or a team leader, this guide will help you navigate the fine line between taking on necessary technical debt and avoiding reckless technical debt.
What exactly is technical debt in SCRUM and agile?
Technical debt is code written yesterday that's a burden today.
Technical debt is the result of trade-offs made to expedite the software development process.
The process of writing code is based on a programmer's understanding of the problem at the time they write it. This might seem obvious, but it has huge implications.
Their understanding can evolve rapidly, leaving their code outdated and no longer appropriate for the problem at hand. This is particularly true for legacy code and in high-growth environments.
Uncertainty and change are major factors in technical debt. To learn from users as soon as possible, software teams often ship their Minimal Viable Product (MVP) or feature quickly. If users request new features or changes, this can raise uncomfortable questions about the entire framework used to solve the problem.
Short-term solutions, such as refactoring, can temporarily address the issue, but this just adds more cruft to the code and increases technical debt.
The trade-offs that lead to technical debt often involve shortcuts that compromise the quality of the code. These shortcuts might include hard-coding, lack of testing, or other code quality issues.
Tech debt can accumulate rapidly and have a significant impact on software development. All the more reason, then, to manage it properly.
Making decisions about tech debt in agile
When managed properly, taking tech debt is a valuable tool in your arsenal; a valuable strategy for shipping faster to meet a business need.
That’s the key: it needs to be managed properly. Technical debt needs to be tracked. This allows the most impactful work to be prioritised and fixed.
When it isn’t managed, it accumulates over time and becomes increasingly difficult and expensive to resolve. Read more about why we need to shift technical debt left here.
Martin Fowler, a renowned software development expert, distinguishes between four categories of technical debt in his Tech Debt Quadrant: deliberate, inadvertent, prudent, and reckless. We explain this in more detail here, but in essence, tech debt should be accrued deliberately and prudently as often as possible.
By doing this, development teams can ensure that their software remains maintainable and scalable in the long term.
Undocumented technical debt can be particularly dangerous, because it’s difficult to manage or mitigate if it is not properly identified and tracked. If it isn’t tracked, it can’t be prioritised. Debt that isn’t managed spirals out of control, just like financial debt.
Recognising the symptoms of tech debt
Very few engineers say their teams are good at tracking technical debt.
Tackling tech debt has to start with tracking it. If you haven’t tracked it, you can’t do anything useful. It can’t be managed or prioritised, and you can’t prevent the spread or stop the rot.
These are the red flags that might signal to you that you need to work on your tech debt strategy:
When tech debt isn’t managed properly, it has the capacity to destroy business productivity at every level. My colleague wrote in-depth about the impact of tech debt here.
This diagram makes for a good TL;DR.
If you’ve got a substantial product backlog packed with low-quality issues, you’re not alone – this is very much the norm, not the exception. Let’s look next at strategies to solve and manage tech debt sustainably.
How to manage and reduce technical debt in agile
It starts with tracking issues
Good technical debt management is crucial for agile development teams, and it starts with team-wide excellence in tracking issues.
When your engineering team tracks high-quality issues, you capture the knowledge usually trapped inside engineers’ heads.
Ideally you want to prioritise issues based on their impact and severity. That’s only possible if they’re high-quality issues, which are linked to code and have all of the required context.
Most issue tracking tools don’t do this, which is why we built Stepsize.
Stepsize enables modern engineering teams to track and categorise issues directly from your codebase. The issues are inherently linked to code, and the tool integrates with Jira. It’s a game-changer for agile teams who need to manage tech debt.
With the right tools in place, teams can easily prioritise issues and ensure that the most impactful ones get resolved first.
How to prioritise issues
Once your team is tracking high-quality issues, you need to use them to inform your decisions during backlog refinement and sprint planning.
To make this decision-making process strategic, consider choosing a theme each time you prioritise issues.
For example, you could focus on issues that are affecting the customer's user experience, impacting a specific feature, or impacting morale amongst engineers. With high-quality issues that are properly linked to the code, this process should be straightforward.
When it comes to organising time to address tech debt, there are two basic models to consider. You can either…
- Dedicate a percentage (I suggest 15-20%) of every sprint to tackling technical debt
- Allocate an entire sprint to it regularly, such as two weeks in every quarter.
Managing technical debt is an essential part of software development in Agile. It's crucial to strike a balance between taking on prudent technical debt to allow your team to ship fast, and preventing reckless technical debt.
Technical debt that goes undocumented, unmanaged, or spirals out of control is the tech debt you need to be concerned about.
Good tech debt management in agile means tracking high-quality issues, and prioritising the issues that have the most impact for fixing.
By managing technical debt effectively, teams can improve the quality of their software and deliver valuable features to their customers more quickly.
Work at a modern enterprise? We created an advanced platform that makes handling and ultimately fixing technical debt straightforward. It radically improves the developer experience for engineers by enabling them to create and manage issues directly from the codebase.