Strategies for Addressing Tech Debt

Tags: , , ,

Technical debt is a topic we’ve written about previously, but it routinely comes up in client engagements and is an issue that nearly every company using software must confront at some point. 

So, I appreciated when Wall Street Journal reporter Christopher Mims gave it greater visibility by labeling it a $1.52 trillion problem. It inspired me to sit down with Chariot Solutions’ Director of Consulting Sujan Kapadia for a deeper dive and to secure some tips for how companies and engineers alike can tackle this problem. 

Tech Debt is Pervasive

If you’re unfamiliar with technical debt, it’s a term that describes the future cost of having to rework code that – for several possible reasons – is no longer usable or operating as intended. While the phrase may sound innocuous, its impact is anything but (see the number above).  

The reality is that the modern world runs on software. From phones to vehicles to the government, it has become vital infrastructure supporting our everyday lives, even more ubiquitous than physical infrastructure. But like those bridges, roads and municipal systems, it is perpetually aging and in need of fixing. 

While any good developer acknowledges the widespread nature of technical debt and the need to constantly be addressing it, few business or government leaders share that point of view. For them, it’s often a near-term cost dragging down their bottom line or sapping energy that could be directed towards other priorities. Unfortunately, technical debt can only be ignored for so long. 

Root Causes of Tech Debt

Sujan explained that technical debt is incurred in two primary ways. The first is due to poor decisions made when creating software. Building a new solution or updating an existing one is always a race to completion. But if it’s poorly architected or a team cuts corners because they’re under pressure to get to market, it can result in inferior code that will have to be reworked at a future time. 

The second type of tech debt occurs because circumstances or environments change. This can also be called “bit rot” – when things fall apart over time because of new updates or new dependencies. This is more difficult to control or account for at the time of creation. 

Regardless of their root cause, both types of technical debt are pernicious. And left unaddressed, they can spider out – like cracks on a windshield – to impact developer morale, business effectiveness, and even customer satisfaction and loyalty. 

These risks are also becoming heightened as many of the original coders who developed our earliest software are reaching retirement age. No organization is immune – even NASA is bringing people back from retirement because they’re the only ones familiar with certain software and systems. 

If not managed properly, this generational shift could cause us to lose enormous amounts of institutional knowledge overseeing mountains of critical applications and software. The resulting tech debt could be crushing. 

While many companies would prefer to push costs further down the road until these impacts become priorities, they are just creating a bigger problem. Like paying the minimum on a high interest credit card, the bill will ultimately come due and over time they’ll have paid much more than the original debt. 

Prioritizing Fixes

Forward-looking teams and companies will have built-in strategies for addressing technical debt before it snowballs into an emergency. 

According to Sujan, the best teams will allocate a certain portion of their work during each sprint to fixing it. They begin with one piece, update it, then move on to the next. Over time, they’ll have fully transitioned antiquated code. It can seem a long and sometimes complicated strategy, but the longer a team waits, the more difficult it becomes. 

Of course, this might not always be possible. Current projects can take priority and consume all available resources or managers and leadership won’t set aside time or money to deal with tech debt. For these companies, the adage “if it ain’t broke, don’t fix it” is a guiding philosophy. 

So how should engineers call attention to tech debt if they work at a company that doesn’t grasp its future implications or where no business drivers exist to convince leaders to fix old code? The key is to prioritize the asks. 

While managers and financial teams may routinely joke that engineers are always asking for money, Sujan says this holds a hint of truth. He reminds developers that not everything can be labeled urgent. 

Engineers should always prioritize budget asks and frame those involving technical debt with context. Help managers understand the future implications of technical debt and the potential cost when systems break with no one around to fix them. 

Paint a visual picture for them by listing the potential fallout across an organization and attach example costs if possible. Show them that fixing tech debt is not a cost center but rather a critical business function.  

Hiring Quality Engineers

On the flip side, businesses can also help diminish existing tech debt and avoid future instances of it by investing in good engineers. While hardware is getting cheaper and the cost of building things is going down because of the cloud and other more efficient resources, creating custom software is still expensive because it requires skilled labor. The quality of an input directly affects the output. 

Within this reality, lower quality development teams are more prone to cutting corners and creating code that will have future issues. Many developers also avoid vocalizing the risk of tech debt or their concerns surrounding it because they don’t want to get shot down or don’t feel empowered to highlight problem areas. 

By hiring smart people and empowering them, Sujan says companies create developers willing to champion for more rigorous development standards or extended sprint times. This will lead to superior near-term products and less issues and expenses in the future.  

Solving for Tech Debt

Looking ahead, while it’s unlikely that generative AI will serve as an automated tech debt fixer, it could become an important ally in the fight against it. 

Because AI is only as good as the data that it’s trained on, complex code or code without documentation might produce AI prone to tech debt. However, generative AI assistants or co-pilots could help engineers analyze code and break down the big scary monster of tech debt into smaller, more manageable pieces. In that way, it will help teams increase velocity as they address tech debt rather than solve it wholly on their behalf. 

Ultimately, the lesson for businesses is that ignoring tech debt because it’s expensive does not make the problem go away. It only kicks the can down the road. 

In a world dominated by software and in which tech debt is pervasive, smart organizations and teams can stave off a future crisis by approaching tech debt as a routine, scheduled part of their development process today.