« Back to home

Remembering what "Technical Debt" should actually mean

“Technical Debt” is a common term thrown around in software development these days. And I think it’s almost always being misused. Everything that needs to be changed in the code gets referred to as “technical debt”. To determine the original meaning, let’s go back to the originator of the term, Ward Cunningham, and read his wiki on it. Note what he says there: During the planning or execution of a software project, decisions are made to defer necessary work. Technical debt means the team made a choice not to do something. They chose between doing something now and deferring it to later. If no conscious decision to defer was made, then it’s something else. Use this metaphor for buying a car. Say you walk into a car dealership and buy a car that turns out to be lemon. You don’t later say it’s a lemon because you decided at the time you’d buy a sports package for it later. So I think when people are using the term “technical debt”, what they actually mean is “shit code.” They’re not the same, nor should they be considered the same. Bad design and bad engineering are completely different than deciding not to do necessary work right now and deprioritizing it. Let’s reclaim the term “tech debt”. Do this: when you recognize that code is a problem, don’t call it “tech debt” without understanding it. Instead, spend proper amount of time to understand why it is crap. Ask why it is architected that way. What were the requirements that led to this code being shit and how can that be avoided if it gets refactored today (into the perfect requirements of today… which will change in 3 days, of course). But I think calling what is really just crap code “tech debt” doesn’t give it the proper seriousness that an engineering organization should put towards quality engineering. When no one made a deliberate choice to make that mess, what made it bad? Understand that and recognize it for what it is. Or call bullshit on the whole technical debt term, as this author does. [edit - I changed the car analogy]