Managing Technical Debt
January 23rd, 2012I was reading this blog post by Gartner Analyst David Norton this morning and it got me to thinking that I’m not sure we have a good definition of technical debt to work with. I actually just had a conversation about this at a design review last week, and it was clear that we did not all have a common understanding of what technical debt means. We have a new set of mobile applications that we want to get out the door ASAP and it’s new ground for us. We haven’t done a ton of work to define best practices here, so we’re building the plane as we’re flying it. This is a good example of a situation where projects tend to accumulate technical debt.
At some point I’m hopeful that we’ll lay out a reference architecture for building web-based mobile applications. I’m actually leading the charge on defining that right now. At that point, we’ll likely have a number of applications already in the hopper and, chances are, most of them will not fit the best practices we’ve defined. Right now, we already know this is the case, but we don’t know what it would mean to pay off that debt until we have those best practices in place. Once they’re nailed down, we know what that debt looks like. We then have to decide if we’re going to pay it off. I think that’s a key point here. Technical Debit is often discussed as something that must be payed off and I don’t think that’s true.
Say you implement something before there’s an internal standard for it. It could be a new application, a new network instal, a new desktop configuration. That only formally becomes technical debt once the standard is defined. Whether we pay off that debt depends on the technical interest rate, as it were. If having this non-standard implementation in place increases support costs on an ongoing basis, it makes sense to pay off that debt sooner rather than later. For example, if all but a few of your workstations are centrally managed, you have to exert additional effort on an ongoing basis to keep them up to date. Paying off the technical debt in a timely manner will be a worthwhile practice. The challenge is the non-standard implementations that don’t have obvious ongoing expenses and obvious is an important term here.
Take the mobile application. If it’s a simple application and we’re not going to be making updates to it, that debt mostly isn’t noticeable. The place where recognizing the debt becomes important is when it comes to the risk that non-standard implementation brings. Even if we don’t make any changes to the application itself, there will be implications when it comes to infrastructure upgrades, for example. This application may require special testing above and beyond that which is required of other services. So it’s important to think carefully when considering what technical debit your services may be carrying. Consider documenting the debt as you accumulate it rather than simply accepting that accumulation. It will make it much easier to manage.
Also consider the possibility of a strategic default on your technical debt — declaring technical bankruptcy, as it were. This certainly isn’t always an option, but given the opportunity to retire a service that carries significant technical debt, one should carefully consider
- the cost of the ongoing debt to the value the service offers the organization
- the replacement cost of a new, debt free service.
or
Perhaps one of the biggest challenges of identifying technical debt is that everything has maintenance costs. In IT, there is no set-it-and-forget-it. This leaves a blurry line between an acceptable level of ongoing maintenance expense and true technical debt. As such, it would be beneficial to catalog not just known technical debit during the development phase of a new service (missing tests, non-standard implementations, missing documentation) but also potential areas of as yet undiscovered technical debt. This could be something like poor performance in the production environment.
In the end, the fist goal should be to proactive about identifying technical debt instead of waiting for it to surprise us.
