Nevertheless, most Agile/Scrum practitioners readily identify technical debt as the bane of product development because it messes up predictability in software release cycles big time – failed deadlines, code refactoring, higher defect rates and escalating costs are some of the symptoms of technical debt spilling over from legacy projects. Servicing technical debt is a serious productivity bottleneck. According to a broader industry survey, code duplication, on average, can account for 25% extra efforts, with figures rising to as high as 35% for financial/enterprise industries. What can be really done to avoid a situation like this?
First, it has to be understood that technical debt is deeply ingrained in each and every project action item, and cannot really be wished away any more than short-cuts and inefficient processes can due to business pressures, deadlines and commitments. We all live in the real world; no matter how well-planned you think your project is, some slackness in execution is to be expected, which doesn’t really matter a great deal initially but over a period of time, can build up like “compound interest”.
Most organizations slip into the reactive mode when it comes to dealing with technical debt – deploying project managers, developers, bug fixers and other capable resources to sort out existing gaps in the system – as and when it happens. This approach works well only for resolving short-term technical debt but for long-drawn projects with thousands of dependencies, it would be as effective as having a band-aid fix for a deep fracture.
In contrast, the more proactive approach, especially for an Agile organization, would be to integrate their software development skills with a test engineering frame of mind – at each and every stage of the project. This goes by our very understanding of the nature of technical debt, if you want to reduce it to a theoretical zero, it’s important to be able to diagnose inefficient processes, inelegant coding and in-built weaknesses as early as possible – with testing automation tools.
That can only happen when you try to approach 100% testing coverage, leaving no corners untouched. Instead of relying on in-house resources, it may be advisable in many cases to go for an experienced, mature external team competent in automation (through remote outsourcing or leveraging in-house teams). Such an approach would be reliably faster than making do with what you presently have. Less time in testing, 100% defect acceptance rate and improved software quality are some of the standalone benefits of test automation.
In fact, the profile of Software Designers/Engineers in Testing (SDiT, SEiT) is one of the most sought after in Silicon Valley today. Their primary expertise lies in test automation since they may have already worked on past projects, and have excellent command over reusable test frameworks specific to certain industries – e-commerce, healthcare, IoT, aerospace & defense, financial systems etc.
Using automation not only benefits you in terms of higher output per engineer thus, speeding up testing results but the reusable code kind of works like large down payments made to a bad loan- helping you quickly eradicate your technical debt, and start over from scratch again!