Over the last six months, I've interviewed more than 200 top software engineers about tech debt. In this post-the first in a series which will crystallise my learnings from this experience-I'll share with you how the best in our field make the business case for any given piece of tech debt.
Apply these lessons and you too will be able to understand which debt you should address first. They will help you unlock the resources you need by enabling you to convince your colleagues-especially senior management-that this is the right move.
I started on this journey determined to find the shared characteristics of engineering teams who have tech debt under control. But something else struck me along the way-even at those companies where tech debt was well managed, not all of it was addressed.
These companies were confident to leave some debt sitting there, while other pieces of debt were immediately scheduled into the next sprint. And that makes sense. Let me explain.
I've written before that you should address the debt that's in the way of your roadmap, but the best engineering teams I interviewed were so clinical and confident in their choices, there was clearly more to it.
I realised that I had to find the shared characteristics of tech debt that got addressed, and contrast them with those left unattended.
That's how my most interesting interview question was born - 'What is the difference between tech debt that gets addressed and tech debt that doesn't?'
Once you understand the answer to that question, you'll never feel bad for leaving some debt unattended. And you'll be able to back up your passionate pleas for addressing another piece of debt with a real business case.
You don't need an MBA, and it's a lot simpler than the words 'business case' make it sound.
Once you've established whether the tech debt you're considering is small, medium, or large, ask yourself the following two questions.
Review your product roadmap and figure out whether the debt you're considering will impact the delivery of key features. For example, the way you currently query your databases might not allow you to show live data on the dashboards in your SaaS product. This is a simple issue, but it needs the expertise of an engineer with appropriate knowledge of the codebase to fix it-probably a team lead.
If this debt would indeed cause problems with shipping a feature, make a note. This is crucial data to include in your tech debt item report and discussions with the relevant Product Manager.
As Will Ellis (SVP of Engineering at Soundcloud) told me, there's a particularly perverse effect of tech debt that you might need to dig deeper to uncover:
Are some features missing from your roadmap because existing debt has made them impossible to deliver and people have given up on the idea?
It happens more often than you think. One common culprit is debt in your data models at the foundation of your application that has ossified over the years. This prevents you from making modifications further down the line.
For example, you may have built your application on the premise that only one unique organisation is allowed for each account in your B2B software. And then some giant multinational comes along and tells you they have a portfolio of 50 companies for which they'd like to aggregate all the data-suddenly, your data models, based on your existing premise, are no longer appropriate. But now, it's too late because you can't change them without rearchitecting your whole application.
If none of the engineering work on the product roadmap touches the code where the debt lives-and if this debt isn't the root cause of any bugs or other quality issues-you should probably leave it alone. You can deal with it later; you'll almost certainly find other, more pressing, debt to deal with first.
However, if you're planning a lot of work on this code, try to estimate how much engineering time has already been wasted in the past due to the debt. Once you have that datapoint, extrapolate-how much time will this debt have wasted by the time you ship the feature? If this number is significantly larger than the time it would take you to fix the debt, it's a no-brainer: fix the debt.
Similarly, figure out if this debt was the root cause of specific bugs, outages, UX issues, or past customer complaints. Once again, extrapolate to estimate how much it will have cost the business by the time you're done working on the code. If these quality issues will be costly to the customer-and therefore the business-you can argue that the debt should be fixed before anyone introduces more problems by working on the code where the debt lives.
These are tough questions to answer, especially for a single engineer without the right tools. For example, how would you find answers for debt that spans multiple parts of a giant codebase? No single human could be expected to do this alone.
But do not despair.
That's what Stepsize is for.
Stepsize is a SaaS product designed to help engineering teams manage technical debt. One of its key features is the customisable template provided for you to document any given 'tech debt item', as we call them.
Feel free to replicate this template in Google Docs, Notion, or Jira, but I highly recommend you start a free trial with Stepsize instead. What do you mean I'm biased?
Stepsize is the only tool integrated into engineers' workflows, so they can report on debt and its cost to the business without leaving their editor, GitHub, or Slack. They can feed the tech debt they wish to address directly into their sprint in Jira. That's how you get the numbers:
And the next screenshot shows how you get every engineer report from the frontline - along with their suggestions for fixing the debt and its exact location in your codebase:
It may not sound like much, but I guarantee that this-and using the right tech debt management process-makes the difference between a dead tech debt backlog on Jira and a fresh, ever-evolving tech debt wall on Stepsize.
Debt that gets addressed is backed up by a solid business case. You cannot expect tech debt to make it through all the filters in your organisation and land on your roadmap if it isn't. It's that simple, and it's the way it should be.
Importantly, going to the trouble of making a business case for tech debt isn't just about convincing people. It's about making the right decisions to propel your business forward. We're engineers, we love 'perfect'. But perfect is the enemy of 'shipped'. Don't get caught in that trap, and don't get upset next time the tech debt that triggers your OCD is deprioritised in favour of other debt that's more important to the business. Its time will come.