Full disclaimer: this post will borrow heavily from Jeff Atwood and Martin Fowler who have both written on this topic in the past, mostly as we share a perspective and writing style. I also have a lot of respect for Jeff and his blog is a regular read of mine.
First, what is “technical debt”?
It’s a metaphor that’s been around for years, coined forever ago (read: pre-2003) by Ward Cunningham in an effort to explain the issue in a way non-programmers can understand.
Just like the financial space, the metaphor comes from the reality that taking on technical debt causes technical interest — paid in the form of additional cost and/or programming effort at a later date. No matter how quickly the debt is repaid, it will always have an interest cost. If left long enough, the debt can become insurmountable, resulting in technical bankruptcy. At this point, you have to start over, at a far greater cost.
It’s not all negative though. Using this metaphor, we can see why it would sometimes make sense to incur the debt. The same as you might take on financial debt to capitalise on an opportunity, technical debt can be incurred in the same way. Sometimes all you need is a “quick and dirty” for a few weeks, other times you need a solution for 3+ years.
If it’s not financial, what does it do?
Technical debt is where you (for reasons I talk about later) end up with a solution that differs from “ideal” in some way — at a technical level. Technical debt is not related to solutions that do not meet the agreed scope of works, here we are only talking about the “how” and not the “what”.
Now, to be clear, no software development effort is ever going to be 100% ideal — every project has some level of technical debt — but (obviously) less is better. The “interest” in this metaphor refers to the time you spend writing code (or paying someone to) to get you from “actual” towards “ideal”.
What we’re specifically talking about here is correct code structures, efficient database setups, strong security etc. You could have a project which perfectly fits your needs but still has a high level of debt. Much the same as you could buy a Ferrari on a credit card. It’d be an amazing car, but the 20% interest would bite.
How do I get it?
There are two main ways technical debt (hereafter, just “debt”) is incurred,