Completing an IT software project quickly without incurring some level of technical debt is challenging. When a project is developed and deployed in a rush, quality often suffers and the venture must inevitably be revisited to repair compatibility problems, security gaps, performance issues and various other budget-draining headaches.
Yet even when an important project is held hostage to a tight timetable, technical debt can be reduced to an acceptable level, leading to a reasonable tradeoff of time versus quality versus cost. Here are eight ways to reduce or eliminate technical debt with few, if any, adverse effects.
1. Align operations and business teams
One way to reduce your likelihood of incurring technical debt is to include both IT operations and business teams in project planning. “This gives operations a voice in the planning process and allows for trade-offs in terms of time-to-market versus maintenance costs,” says Matt Seu, a principal at financial services advisory firm Actualize Consulting.
“Make specific decisions in iteration planning that identifies when technical debt will occur and in what time-frame it must be burned off,” he suggests. “Managing technical debt in this manner will eliminate the risk as the project ends.”
Controlling technical debt is a team effort and should be managed like a project, advises Harley Lippman, CEO of Genesis10, an IT staffing and technology services firm. “This will give the organization a fighting chance of not forgetting about it or letting time get away,” he notes. Focus on incremental improvements. “Consider establishing team metrics to ensure team alignment as well as establishing managing technical debt as a priority.”
2. Plan carefully and budget realistically
Keeping technical debt at bay requires careful planning and a heavy dose of harsh truth. “Clear requirements and a vision for where the product needs to go, combined with adequate resourcing and mature software development processes, allows engineers to build with the right level of tech debt,” explains Jonathan Rosenberg, CTO of cloud contact center provider Five9.
Jarman Joerres, principal software engineer at medical technology software developer MedAcuity, advises creating an “engineering reserve” budget at a project’s outset to accommodate any unexpected factors leading to unanticipated technical debt accumulation. “The best way to plan a … software project that ensures technical debt is either minimized or eliminated is to … include it in your planning and estimation,” he notes.
The only time technical debt is useful is when it’s known, understood, planned and used strategically to position the organization for the future, observes David Dodd, vice president of IT and CIO at the Stevens Institute of Technology. “For example, [when] an organization is intentionally playing the chessboard by waiting on critically needed emerging technologies for a new product, or planning the development and release of an entirely new system that will help transform the market,” he explains. “Otherwise, technical debt is maladaptive and compromises the long-term interests of the organization by selling out your future capabilities.”
3. Set achievable goals and measure results
Time-to-delivery pressures are a fact of business life, but try to resist the temptation to use design shortcuts to accelerate development progress, because hastily-developed software tends to require plenty of future attention.
“Architect a solution that scales for development and production,” suggests Mike Duensing, CTO and executive vice president of engineering at development platform provider Skuid. Duensing stresses the importance of spending time with end-users to understand their requirements and to anticipate the need for future changes. It’s also advisable to avoid setting unrealistically high design goals. “Instead of trying to publish a larger set of functionality, scope down to a smaller solution increment that allows you to allocate the proper time to adequately design and test,” he says.
Jason Noble, co-founder of CTO Academy, a management skills training organization, recommends stressing the importance of quality to all development team members. “Make them understand it needs to be baked into all processes,” he says.
Noble also advises setting measurable goals for each product iteration. “Set them at a realistic level,” he suggests. “After several iterations, the technical debt should be reduced without affecting new product functionality, with the bonus of more sustainable and reliable code.”
To ensure that quality goals are met, Noble recommends using static analysis tools, such as SonarQube, an open-source offering. “These tools scan the code and provide various metrics on quality, similar to the reading and grammar tools used in word processors,” he says.
4. Build on a strong, flexible foundation
Ensure that your project is mounted on a solid architectural base. “Poor architecture makes a flimsy house that can’t be changed … and can trigger regressions,” Duensing warns. Well-designed, hardened solutions help make project updates faster and less costly, thereby reducing the possibility of incurring unexpected technical debt.
Team leaders should also understand that just about every project plan begins at its maximum point of ignorance, and is frequently developed under institutional pressure to be wildly optimistic. “The cure for technical debt is not to tackle that over-optimism by de-risking with even more detailed plans and even tighter contracts, but to manage delivery expectations more intelligently,” suggests Ken Charman, CEO of Unilever spinout uFlexReward, which markets an employee rewards system. “Use looser plans with spreads that narrow based on experience; this will reduce the need to hit delivery by ditching functionality,” he advises.
5. Get agile
A growing number of organizations are embracing agile software development, a set of methods and practices that places projects in the hands of collaborative, self-organizing and cross-functional teams. When rigorously applied, agile development allows organizations to avoid technical debt by helping teams build and launch new products quickly and iteratively. “This [process] gets new products and capabilities into the hands of users sooner and in stages,” Dodd says. Improvements and fixes are addressed as new versions are delivered, making any accrual of technical debt highly unlikely.
Agile recognizes that projects are never truly finished during their lifetime and are also never perfect. “At the same time, agile focuses on … streamlined development that targets capability as well as quality,” Dodd says. Key functions are developed, tested and placed into production at frequent intervals. Rather than taking a “Big Bang” approach to software delivery, agile teams may release several major upgrades each year. “This keeps the products evolving rather smoothly, and also helps users avoid major disruptions,” Dodd notes.
6. Avoid outdated tech
Legacy applications, outdated technologies and disparate platforms and processes can drag an organization into deep technical debt, forcing it to postpone essential modernization initiatives. “Technical debt sinks real dollars and valuable time into systems and applications that simply weren’t built for the scale and speed required by modern business,” says Kris Beevers, co-founder and CEO of DNS and traffic management technologies provider NS1.
Older assets and approaches are also frequently rife with security vulnerabilities, difficult to integrate and automate, and may be no longer be updatable. “Finding talent to manage legacy applications built on complex or outdated code is also a growing challenge,” Beevers notes. “Sticking with outdated technology that delivers average-at-best performance not only consumes valuable budget, but it also hinders the company’s ability to innovate and stay competitive.”
7. Retire lightly-used resources
Regularly reviewing the usage levels of existing platforms and applications offers another way to reduce technical debt. “It may be that technical debt can be eliminated simply by removing an unused, or rarely used product instead of updating it,” suggests Rob Peterscheck, principal consultant at Small Scale AI, an AI and machine language consulting firm. “It can often be the case that technical debt is worst in areas with the least usage.”
Technical debt can be reduced by efficient lifecycling, focusing on platforms and applications that are critical to everyday needs and shedding non-essential products that, while perhaps not exactly legacy tools, require a steady stream of updates and fixes to serve a dwindling number of users. “The difficult part for large organizations is often simply knowing all of the applications and solutions that are in the environment and how they are in use,” Peterscheck observes.
8. Heed the warning signs
Organizations should also pay heed to the warning signs that appear when technical debt reaches an inflection point and must be addressed. Key indicators include extensive one-off manual changes, inadequate documentation and poor integration with other apps or the cloud, Beevers notes.
One time when it’s okay to tolerate a certain amount of technical debt is when speed must be placed over perfection to get software to market quickly. “There are times when getting something out the door, in the interim to a future revision, is acceptable,” Beevers says.