The Tech Debt Spiral

Look unblinkingly into the deathly spiral of technical debt
“There ain’t no third direction.”

Kinds of Technical Debt

You can boil technical debt down to a few different facets, but the most meaningful distinctions for me come down to these: intentional vs. unintentional and acknowledged vs. unacknowledged. Imagine building a prototype for a feature that needs the ability to select a country from a list. The company is currently doing business only in the People’s Republic of Techistan, so you can hard-code that option and move on to building other parts of your feature. This is taking on technical debt intentionally.

Signs that Tech Debt is Taking Over

There are signs that indicate when tech debt is becoming a problem:

Features are taking longer and longer to deliver

Technical debt can be a big reason why your teams are underperforming. The friction of dealing with bad code and messy workarounds taxes everyone’s performance and motivation. “I want a job writing half-assed band-aid fixes rather than coming up with elegant solutions to real problems” said no developer ever.

Excuses are increasingly made to get something out the door

You know you’re not doing things right — maybe you took a few shortcuts with respect to coding conventions, test coverage, or meaningful code reviews, but hey, it was all for a good cause!! Discussions with management start sounding like conversations with a drug addict: “yeah yeah yeah, but I need my feature! I’ll pay you back, I promise!”

Residual debt is not addressed

There should be tickets in each sprint that specifically address the fixing of tech debt. You might even be lucky enough to get an entire sprint devoted to this. But when you’re in a tech debt death spiral, new features are constantly introduced, which in turn, generate more bugs. In the end all your time is spent chasing your tail; ironically, you are never allowed the time to fix the problems that got you into this mess in the first place.

Infrastructure becoming overly complicated

Robert C. Martin’s book on Clean Code may be the most important book about technical debt I have ever read, even though it never uses that term. Uncle Bob wisely reminds us that “comments do not make up for bad code.” This sentiment can be extrapolated onto infrastructure. If your organization relies on a complex web of interconnected services which requires the continual upkeep of detailed flow charts for anyone to understand what’s going on, then maybe the solution isn’t to improve the diagram. Maybe the solution is to simplify the infrastructure.

High developer turnover, especially the departure of senior developers

There are many complex reasons why employees may choose to leave a company, but if an organization is experiencing higher-than-normal rates of burnout, it may indicate toxic levels of technical debt. Those with more experience (and more job offers) are probably more likely to recognize that their future is limited in an organization that is unable or unwilling to clean up its messes. Look around: where are the Jedi masters?

Tech debt is not specifically acknowledged

It is no use to wave your hands in the air and say “yeah, it’s a mess”: there must be tickets in the backlog (or in the sprint) targeting specific instances of technical debt.

How to Escape?

Most software companies struggle with managing tech debt, just like most of us citizens struggle with financial debt. Managing technical debt is a lot like maintaining your own body through regular exercise, healthy diet, and proper hygiene: your organization must either start healthy or get healthy. There are precious few examples of companies who conscientiously began their journey with a culture committed to the proper management of technical debt. The only ones that come to mind are Basecamp and Pivotal. Most companies need to “get in shape” and sometimes that is more difficult than staying healthy to begin with.

  • Get experienced people involved; inexperienced developers may not even recognize there’s a problem
  • Acknowledge tech debt when it occurs (e.g. by creating a backlog ticket)
  • Devote a percentage of time each period to addressing tech debt
  • Require meaningful code reviews by experienced developers (keep the code clean)
  • Increase your developer skills to help reduce unintentional debt

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store