Technical debt is a cool metaphor introduced by Ward Cunningham. Martin Fowler has a nice post on it here too. In my current job, I see this happening almost every day. The worst thing is that it really seems like there’s nothing that can be done to correct things.
It always starts with a tight timeline…here’s a typical scenario: “hey, lets forget the tests for this part…we must have everything ready by the end of the week and tests are just reducing our productivity”…I think we all know this is wrong…at least, that is my opinion…yes, tests will decrease your immediate productivity (remember, you’re writing more code and I’m positive that at least half of it will be in testing – at least, if you want to have good code coverage), but they will improve your long time productivity (especially if you’re looking at it from a team perspective and you’re thinking about the future. btw, Scott Bellware has written about it in the past. If you have the time, go read some of this posts….).
Like Ward and Fowler say, sometimes it’s ok to incur into some “technical debt” to get things out of the door, but I do also think that it’s important not to let it get out of control. This is important,so I’m repeating it here: don’t let it go out of control! Never! Unfortunately,this is almost impossible (at least, this is what I’ve been seeing in all the projects I’ve been working in the last years). After you lose control, it will be extremely difficult to recover. Let me give you an example…in this last week I’ve been rewriting and refactoring an app which doesn’t have any kind of tests…as you might expect, this is really close to a nightmare! And not good to morale either! Progress is really slow and I seem to be cursing the guy that wrote the app from 30 to 30 mins (when everything goes well…the interval decreases when you find WTF snippets!)
Now, instead of adding more value to that app, I’m just cleaning it up…not really productive, but, in my opinion, this is really necessary so that we can get things under control again. Of course, this would be unnecessary if the original developer had thought about the future and hadn’t incurred in such a high technical debt!