The title is misleading. It starts with the topic of technical debt, to conquer another issue which is performance. Now, I know that performance is important, but I'm looking for articles in technical debt. Give me the right title.<p>Technical debt may seem strange. It's not obvious at first, when you are young and adventurous. This is especially pronounced when you are selling products per license and guaranteeing free bugs fixing and some (even limited) support.<p>When I started, I didn't know it. I built the product and made the math of hours spent building, and hours to be spent on maintenance. It worked until I figured that my product was full of bugs, and I can't fix them but need to build it from top to bottom.<p>This is a technical debt. Because when your time is money, spending time on these issues (that ought to be fixed before selling) is like spending money. And it can get expensive to the point of shutting down the whole thing. Yes, you sell, you are profitable, you have zero costs (it's downloaded software) but you go bankrupt.
This is an excellent post: short, to the point and helpful. However, I find the title slightly misleading. Performance is not the only form of technical debt. Arguably, there are forms that are even worse than performance. If you're looking for the generic recipe for breaking out of the typical technical debt nightmare, the solution isn't in this post. Doesn't mean you shouldn't read it, though ;)
Bad code is a time sink.<p>Think about it. Good code doesn't have many bugs, it's easy to maintain, extend, and improve, and it's easy to review manually to look for defects. Thus, modifying good code or interfacing with good code takes very little time and very few attempts to get right.<p>So where does our time get spent? Working with and using bad code of course. Bad code is hard to modify and extend, but almost all code needs modification in its life. Modifying bad code takes a lot of time and effort because it's crufty and broken so it tends to at best maintain or lower the overall code quality while adding features. Bad code spawns bad code. Poor APIs lead to clumsy workarounds and hacks in client code, which trickles down as technical debt elsewhere. Bad code tends to be awkward and difficult to follow so in order to ensure quality it needs to be tested thoroughly, which takes a lot of effort.<p>Technical debt has interest, and it's typically a pretty high rate. Pretty soon you find your development velocity is slowed because all your time is absorbed by dealing with bad code.<p>My advice: identify bad code and be ruthless about setting aside dedicated time to eradicate it. Have a policy or culture of constant refactoring when anyone makes a code change. Keep track of your major pain points and strive to solve them. Sometimes that's not possible if you are in a giant company but sometimes you can get a lot more done than you'd imagine. The best teams are the ones who spend their time writing more good code to go with existing good code, they tend to be exponentially more productive than teams who get bogged down in firefighting as a way of life.