Technical debt: What it is and why you should care

Technical debt is often the elephant in the room that we choose to ignore, but we do so at our own peril. Technical debt is directly responsible for many of the problems we have building high-quality software quickly, especially as companies move to more agile methodologies. Having problems releasing quickly? Can’t complete your testing in a single two-week iteration? Defects leaking into production? Development taking much longer to complete than it should? Chances are good that you have a high amount of technical debt.

“Technical debt” is a term coined by Ward Cunningham as a metaphor to help non-development people understand software development issues. It is sometimes also referred to as “design debt” or “code debt.”

(Related: How to curb your technical debt)

Here’s how the metaphor works: Suppose you have a bit of functionality that you just have to deliver quickly. You have a choice to develop the software using best software development practices, or you can cut corners to deliver sooner. If you choose to cut corners, then you’ll have incurred technical debt. In other words, technical debt is generally the sacrifice of quality for speed.

In this example, the debt is strategic in that a conscious decision was made to create debt. Think of a credit card; I buy something now at the expense of my future buying power. I will be charged interest on that debt and it would behoove me to pay that debt as quickly as possible.

Technical debt has its own form of interest. Suboptimal, technical debt-laden code is difficult to work with. Technical debt-laden code is difficult to read and understand, so it takes longer to enhance the code than it should.

If you have ever wondered why that “simple fix” takes way longer than it should, then you are probably paying a high interest on your debt. Suboptimal code can result in more defects, longer cycle times, less confidence in the code and longer testing cycles, and it can even (because people dislike working with bad code) lead to employee dissatisfaction and developer turnover.