As every software company and developer can tell you, almost all companies have technical debt. Accumulated by taking the “quick and dirty” approach in software development rather than resolve issues upfront, it makes code harder to build, run and deploy. And just like its close cousin financial debt, the costs can continue to compound and become unmanageable, and may even cause major production outages later down the road. Developers might know that they need to address technical debt, whether by refactoring or changing some code, but they often struggle with quantifying it, and prioritising what needs to be addressed first. To ultimately get rid of technical debt, or at least make moves to reduce it, developers need to take an Agile approach to ensure its easier to handle.
Software teams often fail to resolve debt because they don’t get the ball rolling soon enough, not because they can’t fix technical issues. Working on the wrong issues for any particular type of debt can waste precious resources and time, defeating Agile principles. Teams also make mistakes by accounting for technical debt across multiple projects in different ways, leading to more problems in the longer term. Truly Agile teams must understand each debt’s worth is a factor of its scope within the overall production, impact on frequently modified code, and the time required to fix it.
To help relieve the debt, teams need to prioritise fixes and coordinate releases across all project backlogs because technical debt in dependent projects can inhibit delivery across other projects. By defining a few best practices ahead of time for how teams, DevOps and QA plan to approach the debt, and having teams commit to these practices, companies can ensure that rogue shortcuts don’t lead to disaster.
A few basic best practices companies can implement:
- Always revisit existing code to give it another gut-check
- Regularly check on the status/amount of accumulated debt so that it doesn’t becoming unwieldy later
- Ensure team are documenting changes at every level so no one is left scratching their heads trying to reduce debt
- Technology moves fast; make sure to implement a stay current strategy for business-critical applications
- Implement Enterprise Agile Delivery (EAD), which focuses on iterative and incremental software development to always stay on top of things in the delivery pipeline
Developing an agile strategy
Take an 80/20 Agile approach to technical debt, improving development on the most frequently modified code (that 80 per cent) by tackling it a little (20 per cent) at a time. Will you erase all debt? No. That’s not the goal here. It’s about making the debt easier to manage and incorporating an Agile approach to delivery. If it isn’t getting in the way of normal development activities, then move on to something else so you can keep teams focused in the right direction and on the larger problems affecting more of the progress.
By prioritising this type of approach first, you can begin to reduce debt and then resolve other portions as part of a long-term strategy. Remember: this isn’t going to resolve itself overnight. Get the whole team on board before committing to across-the-board technical debt reduction because unlike a Waterfall approach, Agile changes are small and frequent, so everyone will need to commit to the new method.
Again, teams can tackle this by adopting an EAD approach, so they can focus on moving slowly and deliberately to avoid including any new changes that might introduce new debt or increases existing debt. An EAD approach also helps to ensure teams are committed to testing throughout the DevOps process, which in turn creates a more collaborative environment and promotes transparency. With Agile, each successive version of the software builds directly on the previous version. It also allows for repeat work that improves upon previously completed activities.
Approaching technical debt this way – in smaller batches – can make it much easier to approach and manage.
No one is an island
No one person can manage and shrink technical debt on his or her own. By working across borders – bringing together the business, testing, development and delivery teams – it’s easier to create connected activities and workflows that focus on the same objective. Working in siloes won’t work.
Companies can start by prioritising efforts across all projects, especially since not all projects are created equally. Getting a bird’s eye view to achieve visibility into all projects and releases with software is a key factor in deciding what to tackle and when. Sometimes automation can help, too. But it’s a challenge of balancing what works for others and what really works for your company – sometimes a human touch is just as, if not more, effective.
Getting out of debt with agile methods
Unfortunately, there’s no magical tool out there to quantify your technical debt and tell you how to start reducing it. However, by adopting an Agile delivery mindset, you can start to put collaboration, communication and transparency first. As Gartner has said, “Enterprise agile delivery is a fundamentally different way of delivering demonstrable business outcomes frequently and in a flexible manner.”
Placing value on these qualities, rather than sticking to rigid deadlines, will help teams deliver greater business value. It’s a shift in mindset, which means getting rid of old practices and embracing new working methods.
Here are a few things to remember:
- Technical debt is accumulated over time – don’t aim to wipe it out with a single, large release. It could lead to more issues and create additional debt.
- Don’t bite off more than you can chew in the beginning by tackling the biggest issues – it won’t work. This is all about taking an approach to reduce debt slowly and steadily.
- Tackle debt in small batches, addressing what’s used the most to begin to incrementally reduce debt over time.
- Don’t work in a bubble. EAD is all about collaboration and working as a team on testing, development and delivery to focus on one main objective
- Addressing large, system-wide debt is complicated – move deliberately, slowly and do your best to avoid including any massive changes with releases that could exacerbate the debt
Advancing change by committing to a stay current strategy with a strong code quality methodology and reducing technical debt is truly a way to better invest in your company’s future. Rather than worry about debt catching up later down the road, teams can focus their efforts on innovation.
David Binny, chief product officer, Panaya
Image source: Shutterstock/TechnoVectors