- 3 min read
October 12, 2022
Understand different types of technical debt through the lens of financial debt, and lower your risk during technical due diligence.
What is technical debt and how could this concept be explained to people who aren't actively developing software every day? In this article, we are going to define technical debt in easily understandable terms, both for the “non-coder”, or better yet, the investor who needs clarity on this critical topic regarding a tech investment opportunity.
Often the greatest risks in a technology project are unknown, hidden, invisible. These risks only manifest themselves at a later stage. Like an iceberg, what you see on the surface is only a slight indicator of the breadth and depth of the actual challenges that you are dealing with. In the world of technology, we have a term to describe this: technical debt.
The idea behind technical debt is that certain, necessary work gets postponed during the development of a software project in order to meet a deliverable or deadline. Technical debt is the coding you must do tomorrow, because you took a shortcut today in order to deliver the features. And until you actually catch up on it, it accumulates interest. This is an inevitable aspect of software development, and no software system is free of this. So the goal is not elimination, but instead, intentional choices to minimise additional and reduce accumulated debt.
We can think of technical debt in the same way that we think of financial debt. Understanding what technical debt is and how it impacts a business is essential for strategic decision-making. As is the case with any kind of financial debt, not managing one’s credit (but instead indulging unconsciously, as if one was exempt from the consequences) may well lead to (technological) bankruptcy.
For easier understanding, we categorised three different types of technical debt:
For intentional technical debt, a deliberate decision is made to incur it. The anticipated benefits enabled by the debt are believed to be greater than the price to be paid for it, i.e. the technical interest.
Translated into the software development context, this might mean releasing a feature quickly and thereby meeting a market need before competitors, instead of insisting on engineering perfection. The gained production speed makes up for the cost of the debt.
Back to finance: let’s say you use debt financing for a new manufacturing machine to increase capacity. This leads to revenue growth that pays back more than the loan interest and amortisation. In this example, the benefits of the intentional debt you incur outweigh the costs.
Accidental technical debt manifests over time, for example as a result of changes to a code base, without having active plans and actions to mitigate potential negative side effects. In most cases, this type of debt occurs when engineers are focused on adding features quickly, and therefore they neglect the small, incremental, and necessary daily activities to maintain system stability in the long term.
For example, a team might have developed a well-designed, working system, however, one essential component becomes outdated. If left unaddressed for too long, this might force a lengthy redesign down the line to compensate for the ‘suddenly’ unusable component.
Back to finance: If you were to take out small loans frequently just to cover your day-to-day expenses, without a clear investment strategy planned or efficient tracking of the amount of debt you have, it may soon lead to financial troubles. If this hits you unprepared, it will leave you with little strategic leeway or might even lead to insolvency.
Any complex system will deteriorate over time, even when left totally unchanged. Existing systems need to be constantly adapted to an ever-changing environment. The retirement of a database version may lead to incompatibilities with other components and the unavailability of professional support. The discovery of critical bugs within third-party components used in the system can imply severe security threats to the system itself.
For example, in finance, think of this as a parallel to unmanaged credit card debt. When minimum payments aren’t made, the cost of credit will increase exponentially and eventually there will come a point when the debt can no longer be serviced.
Technical debt occurs either when necessary work is postponed to prioritise speedy feature delivery - or, inevitably, as the system is aging (entropic debt). While letting this behaviour become an uncontrolled habit is very dangerous (accidental debt), taking on technical debt consciously can be a powerful tool to create a competitive advantage (intentional debt). Technical debt is comparable to financial debt that can, on the one hand, fuel business growth or, on the other hand, lead to insolvency when not managed properly.
We recommend thinking of technical debt as a strategic tool, instead of a liability. Yet, controlling technical debt is a complex process and requires continuous attention: the most successful approach we have seen so far is to treat backlog tasks as first-class citizens in a company's roadmap.