The pressure has never been greater on developers: to move from legacy to modern infrastructure, to reduce inefficiencies, and create products which build customer satisfaction and increase revenue. Many enterprises are moving forward with a DevOps mindset, but in all their progress forward, they may be forgetting one thing, technical debt. Indeed, devs may be moving fast and breaking things, but never actually fixing them. In response, technical debt builds up, resulting in a downturn in engineering productivity and significant costs to an organisation.
Earlier this year, Umser Mansoor did a small survey of developers for Codeahoy on technical debt. Out of 91 respondents, it found that 68% of developers said they work on products with high or very high amounts of tech debt. Technical debt costs companies $85bn annually, but it also has devastating impacts on engineering teams.
Can you imagine your development team spending almost three months (or more) of the year on technical debt? You'd have no hope in hitting your engineering team KPIs. A research study out of Sweden undertook a longitudinal study of software developers and found that software developers waste on average 23% of their working time due to technical debt.
These numbers are backed up by research into large software companies found that the cost of managing tech debt in large software organisations is substantial, and it is estimated to be, on average, 25% of the whole development time. Research by Stripe places the numbers even higher at 33%! That's a massive amount of avoidable expenditure.
Even worse, as detailed in the Swedish study, addressing technical debt only gets more challenging over time, since any additions to the codebase are made on top of a system that already wasn't working—so bugs and glitches continually compound. The team is infected with technical debt, and it's contagious.
In terms of value, build speeds and the ability to release faster is impeded. It's difficult to offer time estimates for work and the profit margin for delivering code deteriorates.
According to the Swedish study, wasted time is most commonly spent on performing additional testing, followed by conducting additional source code analysis and performing additional refactoring. One interviewee claimed:
"Usually, it takes a longer time to make the correct solution. It is more or less always a time question. Often when you introduce technical debt, it's because something had turned up. Which was not quite the way that we thought it was when we planned how to do the software".
The Codeahoy research attributes technical debt to several factors including outdated libraries, lack of documentation, poor code quality, bloated monoliths, static analysis tools not included in the dev process, lack of unit tests, haphazard architecture, poor design decisions and a lack of continuous delivery. Specific examples included "a framework built ten years ago in house" and "Leftover AWS infrastructure for services not used."
The kitchen analogy for describing the reality of technical debt is a great metaphor:
"If you run a commercial kitchen and you only ever cook food, because selling cooked food is your business - if you never clean the dishes, never scrape the grill, never organise the freezer - the health inspector will shut your shit down pretty quickly.
Software, on the other hand, doesn't have health inspectors. It has kitchen staff who become more alarmed over time at the state of the kitchen they're working in every day, and if nothing is done about it, there will come a point where the kitchen starts failing to produce edible meals. Generally, you can either convince decision-makers that cleaning the kitchen is more profitable in the long run or you can dust off your resume and get out before it burns down."
Let's not forget that your unhappy staff will be a great asset to your competitor.
Technical debt harms team morale and leads to an excessive cognitive load. Further, managing engineering teams of people feeling resentful is no easy task. Most people take pride in doing their job well and get rewards from succeeding. They may feel dragged down or overwhelmed by technical debt. This is compounded if they've raised their concerns to management and had no recourse. 80% of the Codeahoy survey respondents note that their management is aware is technical debt: Specifically 57% state that their managers are aware but have no plan and 23% rate that their managers are aware but doesn't care.
One respondent notes:
"Management actively acknowledges it, and we even prioritise among technical debt, but the technical debt items never make it into work streams because it's never seen as important enough."
According to another:
"One of the curious things I've noticed is that our company is struggling financially, which means addressing tech debt is de-prioritised over new features that might bring in more revenue. However, I think a lot of our issues are related to our tech debt (such as systems being degraded over the weekend without us noticing due to poor monitoring). For whatever reason, new features keep winning over fixing the issues that cost us users."
Technical debt is as much a management as a tech problem. Happy developers staff high functioning teams, and if your developers are not satisfied, they'll leave, and take their (probably undocumented) knowledge with them.
Technical debt is one of the reasons people leave - or asking themselves if they should leave. The Codeahoy survey found that 50% of developers surveyed are likely or 'very likely' to leave their jobs because of tech debt. Another 27% per cent indicated that they think about it, but aren't sure. All in all, that's a sizable chunk of people who could be swayed by a compelling job offer from a competitor. Suppose your company is experiencing a high turnover of developers. Technical debt might be a factor, especially amongst those who are spending their time putting out fires in response to errors in legacy code at the expense of more exciting projects.
Replacing people is expensive. Research estimates a cost of 6 to 9 months of annual salary to replace an employee, with even more time for high-earning or executive-level employees.
There's a risk of negative customer experience if technical debts result in the release of a mediocre product. Developers may be somewhat removed from the end-user, but they'll be first in line for pager duty and the burden of help desk tickets when there are errors. Further, as code becomes more complex, it can take developers longer to release new functionality into production, slowing down overall production and delaying updates which leads to less customer satisfaction and the risk of competitive disadvantage.
Technical debt can have serious consequences when tech updates relate to adherence to standards. It can result in expensive data breaches, fines and compliance penalties and even lawsuits in areas such as healthcare and banking. Delays on mission-critical software can be life-threatening in some cases.
Every minute spent on maintenance due to technical debt is a lost opportunity for innovation or value-adding work. Research by Accenture into Federal IT systems suggests that technical debt and resulting IT discontinuities impede Innovation and agility and engineering velocity suffers. 83% indicated that technical debt severely limits their ability to be innovative, and 79% report that it inhibits their responsiveness to change. Notably, only 38% of those surveyed were even estimating the cost of remediating technical debt.
"Technical debt accumulating in legacy systems is a key barrier to modernization."
Engineering leads and managers have enough to deal with; we can help. The Stepsize integrations allow engineers to report debt directly from their workflow. When technical debt has had a clear, tangible cost, engineers can record that. In particular, they can track where they've lost time, and the product quality issues that can be traced back to tech debt.
This information is then visible to everyone on the Stepsize web app, organised by team and / or functional area of your codebase, showing the total amount of debt and its historical cost.