Technical Debt
This topic seems to be pretty popular lately. First I saw Martin Fowler's comment on technical debt last week. Then Jeff Atwood brought up the topic in this week's StackOverflow podcast (@53:30).
Basically, technical debt is the price you pay down the road for a "less than optimal" design choice today. I particularly liked Atwood's metaphor that you know you've incurred technical debt when you give a long sigh every time you need to modify some part of the code base. You know that the changes are going to be painful (and expensive) to make. It's time to refactor.
A few comments based on my experience.
Basically, technical debt is the price you pay down the road for a "less than optimal" design choice today. I particularly liked Atwood's metaphor that you know you've incurred technical debt when you give a long sigh every time you need to modify some part of the code base. You know that the changes are going to be painful (and expensive) to make. It's time to refactor.
A few comments based on my experience.
- I've been noticing less technical debt in my own code since starting to follow a test driven development approach more religiously. Maybe there's something about this approach which makes your code more "real than theoretical" from the start. It helps you make better decisions without thinking about it too much. Maybe it's because TDD also keeps you from incurring any unnecessary technical debt from adding unneeded complexity or overbuilding. Or maybe it's because you're constantly refactoring as you add tests for new features and functionality that the technical debt seems less.
- Maybe lost in this discussion is opposite problem, the technical debt incurred by overbuilding early. I know I've been involved in a few projects where we knew we would need "X" functionality in a later release. Thinking ahead, we knew the best way to deliver "X" was to use technology "A". "A" would be more time consuming and expensive upfront, but there would be less technical debt to deal with in the future. We were planning ahead and we'd be ready! Problem was, dealing with the extra complexity of "A" put us over budget and behind schedule on the current version. The entire project was canceled before ever getting to the later version and all the technical debt we had hoped to save was for not.
Comments