Too much "technical debt” is a common complaint among software developers working on long-term projects. Technical debt refers to suboptimal implementation of technology that results in additional work for maintainers to fix problems and improve performance. The analogy to financial debt is often used to explain technical debt, as it can lead to negative outcomes if not managed properly. However, taking on technical debt can also lead to positive outcomes if done for the right reasons, for example taking on financial debt in the form of a mortgage can be a very sound decision. Ward Cunningham, who coined the term “technical debt,” did so in a positive context, suggesting that rushing software out the door to gain experience with it and then refactoring the program later to reflect that experience can be a good idea.
There are several types of technical debt, such as accidental complexity, which occurs when code is written by individuals lacking the skills to produce an efficient solution, and constant crunch, where a project goes into a rush mode before important deadlines and technical debt increases. Constant crunch can lead to negative outcomes if no time is allocated to paying down the debt.
When technical debt is too high, it becomes impossible to pay back, much like when the interest on a loan becomes too high. As technical debt increases, more effort goes into maintaining the project rather than improving it. It’s important for software teams to be aware of the potential for technical debt and to manage it properly to avoid negative outcomes.