December 26, 2014
You may have heard the term ‘technical debt’, but what does it really mean? As we explain in our classes, the effect of shortcuts taken now in order to meet a deadline are an IOU in the future. Technical debt has a delayed feedback loop. Heroic efforts in this release make it appear as if “Crash Scrum” was a success, but that IOU comes due in the next and all subsequent releases. This technical debt compounds over time, making the code base increasingly hard to navigate, slowing progress to a point where we declare the product “legacy” and start over with a “next generation” version. We do this because we believe we are smarter than our predecessors, who ‘obviously’ coded like drunken weasels. Or did they? Everyone is rational in the constraints they find themselves in, and technical debt is a manifestation of the system that creates it. We create the system of incentives that creates legacy code by emphasizing short term delivery over robust automated tests, TDD, continuous integration and a myriad of other well known technical practices that mitigate technical debt.
Here is a wonderful article on technical debt that casts the argument in a completely different metaphor:
Bad Code Isn’t Technical Debt, It’s An Unhedged Call Option
Want to see what technical debt looks like?