What is Technical Debt?
When a software project has to be quickly completed and delivered, despite the code not being perfect, your team is assuming technical debt to meet the deadline. In their haste to deliver software capabilities, developers sometimes engage in less-than-optimal coding practices, or ‘forget’ to test or document parts of the software. If not addressed, these shortcuts can ultimately yield unexpected rework, security or stability issues that offset the benefits of rapid delivery. Technical debt conceptualises the tradeoff between the short-term benefits of rapid delivery and long-term value.
Martin Fowler, author, developer and international public speaker on software development provides this introduction to technical debt:
“In this metaphor, doing things the quick and dirty way sets us up with a technical debt, which is similar to a financial debt. Like a financial debt, the technical debt incurs interest payments, which come in the form of the extra effort that we have to do in future development because of the quick and dirty design choice. We can choose to continue paying the interest, or we can pay down the principal by refactoring the quick and dirty design into the better design. Although it costs to pay down the principal, we gain by reduced interest payments in the future.”
Not all debt is bad, and if incurring some technical debt helps your company achieve a big goal, then it could be worth the “interest payment”. With get-rich-quick stories about entrepreneurs rushing out products and fixed-price projects that were ‘not so handsomely estimated’ many organisations have decided that the risk of technical debt is worth it. But problems do arise, and what may seem like minor annoyances now often become major issues if left alone for too long.
Here are 3 ways that technical debt impacts your business:
1: No new features, just rework
The problem with technical debt is when it gets out of control and development teams spend the greater part of their time paying off the “interest payments” from past projects, instead of working on new features or critical new updates. The technical debt must eventually be repaid and that comes at the cost of adding new features or working on other updates that move the product forward. Progress becomes stagnant. Instead of tackling new change requests, the development team spends hours, maybe days, even weeks, wrangling the quick-and-dirty code to get the product to a state in which future modifications won’t be a painful effort or crash the system.
If taking the quick and dirty route to reach a deadline, developers could skip the traditional protocol of writing clean, organized, code in a balanced architecture. The code structure would be messy and has low readability. Even worse: functionality was implemented in the ‘wrong’ part of the system to speed up delivery. These design practices may help get the project completed on time but will make it challenging for different programmers to work on the project in the future. The technical debt associated with poor design will be a backlog of items related to cleaning up the code.
2: Volatile Performance, stability and security
Pushing out a not-quite-perfect product could be a boon for your business, but it could also have challenging consequences. The technical debt associated with a product displaying volatile performance is related to fixing bugs, system crashes and engineers’ bandwidth. Bugs in the code might surface after the release.
If your engineering team is spending large amounts of time implementing simple enhancements in one module of code, this is one of the red flags that the technical debt might have reached a critical point. There is a cut-over point where your team is spending more time working around the technical debt and not enhancing the code or implementing new features. If your system crashes due to high-volume traffic or editing of code, then you’ve just added to your technical debt to figure out the cause.
Working around technical debt or ‘interest payment’ on the tech debt is a major cause of losing development effectiveness. A solution for this issue is twofold.
- Measure the balance between feature development and non-feature development using ZEN Software’s Agile Analytics
- Change the engineering culture to include concepts like ‘the boy scout rule’ where it is celebrated to make small improvements wherever you may find them ('leave the campsite cleaner than you found it' in boy scout speak)
3: Drained Productivity
Technical debt will drain your productivity, leading to slower and slower output. Poorly designed code will require more of your team’s time and effort to decipher and manage. If you ask your team to make a simple enhancement to the code that would normally require 3 weeks of time, you might be surprised to learn that it’ll actually take them 6 weeks and they’ll have to postpone other projects. Technical debt will not only lead to your team slowing their build times, but also to a slowing of your overall production-test-release cycle. You’ll request new features, but such changes will add new bugs to the poorly written code and make it all the more challenging for your QA team to test. And, when you finally navigate the code and are ready to release, your team will probably be stressed due to the extended schedule and you will most likely incur profit loss due to the lost time on the market.
Conclusion and solution
As the old adage goes, you get what you pay for. If it means taking advantage of a huge market opportunity, incurring technical debt may sometimes be the optimal decision. But problems arise when the amount snowballs into a behemoth, which can drain your resources. Too much technical debt will reduce your team’s productivity and engagement. Using ZEN Software’s machine learning A.I-based SaaS solution Agile Analytics you can now spot the trend of lower Lead Time for Change (LT) and a higher focus on non-feature work than previously. Using Agile Analytics or ZEN Software’s integrated DevOps Accelerator your organisation can spot issues with Technical Debt early and take corrective measures before you enter the quicksandy hells of ‘interest-only development’.
Implement DevOps
Implementing DevOps requires linking the support systems to bring the ‘Dev’ to the ‘Ops’ and vice versa.
Find out how to set this up in 30 minutes yourselves.