How to Manage Technical Debt in 2023: A Guide for Leadership
In this article, I will summarise effective strategies and best practices to tackle tech debt head-on.
Technical debt is an inevitable reality in software development. But, it can be leveraged just like a financial loan/debt can help you achieve your goals, if managed properly.
It can be used to drive competitive advantage by allowing companies to launch new products and features faster, experiment with new technologies, and improve the scalability and performance of their systems. However, like all loans, it need to be “Repaid” properly and at the right time, failing on it will create a downward spiral.
If you’re not careful, technical debt can quickly become a major burden that slows down development and makes it difficult to add new features or even fix bugs in a timely manner.
We will discuss how to identify technical debt and the signs of poorly managed debt, and then provide a strategy for reducing it. We will also discuss what a healthy level of technical debt looks like and how leaders can use it to their advantage.
Good Tech Debt Vs Bad Tech Debt
Robert Kiyosaki, the author of Rich Dad Poor Dad, famously said:
Bad debt takes money out of your pocket, while good debt puts money in your pocket.
– Robert Kiyosaki
The same is true of tech debt.
Technical debt is the cost of not doing things the right way the first time. Good technical debt is accrued when you make trade-offs to meet deadlines or deliver new features quickly. Bad technical debt is accrued when you make poor decisions or cut corners.
Bad tech debt will probably make your PMs, Sales and CEO happy for a quarter or two. But after that, they will be asking why everything is behind schedule and dealing with customer complaints because things aren’t working properly.
Now that I have presented the obvious in a familiar “Quadrant”, you can actually skip the terminologies and definitions part of this article! 😀
For my verbal brethren, Which is the Tech Debt you’d need to ruthlessly hunt down to extinction? Obviously, it is the untracked, undocumented ones. And the ones which are dragging your team on a downward spiral (immaterial of whether it is tracked or not)
Why does your Tech Debt keep accumulating?
Before we can think about building a strategy to solve tech debt, we need to understand how it gets out of control in the first place.
It’s called “impact visibility”.
Fixing code debt issues is impossible if:
1, You’ve no record of what technical debt issues you have
2, You’ve got a backlog, but you can’t see which issues are related to what code
In both cases, you can’t prioritise tech debt over shipping new features.
We need to get more granular about what impacts these two tech debt cases above.
- Issue invisibility — There’s no source of shared knowledge. Codebase health info is locked in (few) engineers’ heads.
- No code quality culture — Shipping fast, whatever the cost, like it’s going out of fashion.
- Poor process — Tech debt work sucks. Nobody likes creating Jira tickets. “Jira” has become a dirty word.
- Low-time investment — Justifying the time to fix tech debt or to refactor is a constant uphill battle. After a point, engineers become silent!
Lack of context — Issues in Jira are a world away from the hard reality of the codebase. They’re not related in any way.
So what’s the source of this? Let’s talk strategy.
Spoiler… It’s about changing organisational culture and developer behaviour to track issues properly.
Creating a strategy to reduce technical debt
Track. Issues. Properly.
Good tech debt management starts with team-wide excellence at tracking issues.
You can’t have a tech debt strategy without tracking.
The engineering leader’s job is to make that “issue tracking” easy for your team. There is supposed to be a software for that – Jira, Asana, Rally or something of that sort.
The problem is, I’ve never believed they really get to the bottom of the problem, and after speaking with scores of engineers and leaders about it, they usually don’t either. My personal belief is most companies suffer on the velocity after their Jira rollout! It is a bit like,
No two countries that both have a McDonald’s have ever fought a war against each other.
Thomas L. Friedman – in The Lexus and the Olive Tree!
As a leader, You need to find a way to…
- Show engineers when they’re working on code with tech debt, without them having to jump thru 3 hoops.
- Make it really easy for team members to report tech debt.
- Create a natural way to discuss codebase issues.
- Integrate tech debt work into your workflows and involve PMs if required.
There are multiple ways to achieve this, the easiest is to not address it. Ie: not address it intentionally, just tweak your existing pipeline. This can be done by,
- A very robust linting & integration to the IDE
- Tighter Git rules for commits
- SAST which runs on the pipeline
- and can feed into the IDE
Prioritising impactful tech debt
At this point, it should be obvious, but prioritising the right issues is only possible if you’re tracking the impact of these “issues” and it could be direct or indirect (Dependency, Sequencing, Rework avoidance etc) .
Once you’ve got them, you should regularly and consistently use them to decide what to address. This usually happens during the backlog grooming or sprint planning sessions. But, this decision-making process needs to be strategic. Not at all tactical, ie: DO NOT delegate it to the whims and whimsicals of your TL/PM or even EM.
You or someone with a context of the organisation and position on sales, clients, revenue etc., should be doing this.
A good way to start is by choosing a theme each time you prioritise issues. For example, you could prioritise issues that…
- Are impacting a specific feature you need to work on in the next quarter
- Are impacting the customer’s UX
- Are affecting efficiency/morale on the team
- Are impacting the security posture
This is often straightforward if you’ve got high-quality issues that traceable to code and tagged as such.
Most people wonder how to get the time for these “Tasks”. I have two recommendations.
- Take an entire sprint every quarter to repay the tech debt (Will need high-level buy-in, It is slightly harder to align your CXOs)
- Allocate 15-20% of bandwidth in every sprint. (Easier to achieve buy-in from CXOs, harder to drive with engineers)
Engineers generally won’t prioritise tech debt work by themselves because of the conflict of interest/pressure of shipping fast. This was evident from multiple high velocity/impact software engineering teams including ones at AirBnb, Netflix and Spotify. A commitment to code refactoring and maintenance work should be endorsed and supported from the top and reinforced regularly.
How much Tech Debt can you take on?
Managing technical debt is like managing financial debt. You can use it to your advantage, but you need to be careful not to let it get out of control.
Your technical debt budget is the amount of technical debt that you are willing to take on in order to achieve your business goals. You should not try to solve all of your technical debt at once, but instead focus on the most important items.
Prudent technical debt is debt that you take on deliberately and knowingly, in order to achieve a specific goal. For example, you might take on technical debt to launch a new product quickly, or to add a new feature that is in high demand by your customers.
If you manage your technical debt properly, it can be a powerful tool for gaining a competitive advantage. However, if you let your technical debt get out of control, it can lead to serious problems, such as increased costs, delays, and security vulnerabilities.
Concluding remarks:
Technical debt is one of the most neglected areas of software development. It is often only given priority when it is too late and has already caused serious problems.
However, when leaders work together and develop a consistent and process-driven strategy, technical debt can be effectively managed.
The best engineering teams are constantly thinking about how to use their technical debt budget to their advantage.
References and Further Reading:
- TinyMCE blog on TechDebt – https://www.tiny.cloud/blog/technical-debt-tracking/
- 6 ways for PMs to help in managing Tech Debt – https://www.productplan.com/learn/manage-technical-debt/
- Key Takeaways from AirBnB’s architecture – https://thenewstack.io/airbnbs-10-takeaways-moving-microservices/
- How Google Measures Technical Debt – https://www.linkedin.com/pulse/how-google-measures-manages-tech-debt-abi-noda/