Tuesday, April 14, 2009

Technical Debt: What is it?

Technical debt. Two words guaranteed to strike fear into the hearts of your senior engineers....

... and evoke a big,"huh?" from everyone else.

Technical debt, in a nutshell, is the stuff you should've done but didn't. It's the refactoring you didn't do when you bolted on that new feature. It's the feature that you did 80% of, but you just never got around to really finishing up. It's the package you should upgrade but didn't want to break anything.

None of these on their own is huge. However, over time it all adds up to a lot of technical debt.

And there the trouble comes. Because the consequence of technical debt is huge: development slows down. Leave it alone enough and development can grind almost to a halt.

Let's take a simple example: We had a concept of "nodes" - individual addressable machines. We added the concept of "grids" - a collection of nodes. They are distinct entities but they have some things in common (a name, an addressable IP, etc). When we added "grids", we should have refactored to make these things work together, but we didn't. At that point, we accumulated a little bit of technical debt. In and of itself, no big deal; it doesn't change how the feature works. However, now every time I want to make a change to a common thing (say, the way the IP is resolved), I have to do it in two places - nodes and grids. Thanks to that little bit of technical debt, things are taking time-and-a-half or twice as long. Multiply that by lots of instances of technical debt, and all of a sudden your half-day jobs take two or three days.

On top of the slowness of development, technical debt:
  • Frustrates developers. And then you get all the negative consequences of this up to and including employee loss.
  • Promotes bugs. Changing things in several places or inconsistencies makes it a lot more likely you'll introduce bugs.
  • Slows down delivery. See above about things taking longer.
  • Makes your code less useful to third parties. Open sourcing something? Better clean it up if you want anyone to look at it. Trying to get bought? Not having too much technical debt is part of what makes you attractive.
Like any other form of debt - credit cards, home equity loans - technical debt is the result of living beyond your means as an engineer. Eventually it all comes due.

More over the next few days:
- Warning Signs: How do you find your technical debt?
- Paying It Off: How do you reduce your technical debt?


  1. Like many companies making the transition from startup to "real", we are saddled with a large amount of technical debt. I'm looking forward to your suggestions on how to pay it down!

  2. Awesome series of posts; as usual, thanks, Catherine!