Technical debt and modernization: three lessons learned

Table of Contents

Kapil Nawab

Can you imagine developers spending as much as 13.5 hours a week on an activity that doesn’t focus on building new features? According to Stripe, that’s exactly how much time dealing with technical debt takes an average software engineer. The CIOs surveyed by McKinsey also state that tech debt amounts to 20–40% of their entire technology estate value.

Technical debt is inherently expensive, which explains why companies often engage consultancies like AgileEngine to pay it down. This article covers a few lessons learned from our experience modernizing, refactoring, testing, and redesigning hundreds of digital solutions. We’ll look at our recent client engagements and strategies that helped us maximize our clients’ value while tackling their code, architecture, and design debt.

Lesson #1: Modernization doesn’t equal retiring tech debt

Engineers typically view modernization as a way to retire accumulated technical debt. While this holds true for complete system rewrites, most modernization projects are much more incremental in nature, and their success often depends on how well companies can manage technical debt. According to McKinsey, poor practices for dealing with tech debt correlate with up to 40% higher likelihood of canceled or unfinished modernization projects. 

In heavily regulated domains such as Healthcare or Finance, accumulating technical debt may also result in losing compliance certification. Failure to meet compliance requirements can decrease the number of end-users or even make selling the product impossible.

In our experience, auditing our client’s project architecture, code, libraries, and documentation lays the groundwork for drastically improving their modernization outcomes. Audits of this kind often yield high-impact optimizations.

Case study: removing dead code from a SaaS used by Volvo and Uber

In a recent project involving the modernization of a SaaS leveraged by Volvo and Uber, our inspections revealed over 2000 lines worth of dead code and deprecated libraries. Removing the legacy code facilitated the company’s migration to microservices, enabling further optimization of its cloud-based data infrastructure. Eventually, these optimizations allowed us to clear away more than 60% of logs in a cloud system processing 140 million events.

Key takeaways and action items

Unless you’re dealing with a complete system rewrite, modernization projects often mark a milestone for getting your tech debt in check. At this stage, reviewing the tech debt inventory, product architecture, API documentation, and dependencies can uncover potential for impressive outcomes. This means that product teams need to factor in these activities when providing estimates for modernization projects.

Lesson #2: Address tech debt as early as possible

Technical debt has an unfortunate tendency to snowball over time as systems grow in scope and complexity. Each “quick and dirty fix” tends to get progressively more expensive to replace as it entrenches itself deeper into the architecture. As they say, “dirty remains long after quick has been forgotten” — and the longer you postpone the cleanup, the more you’ll have to pay the cleaner.

Since incurring technical debt is inevitable, our teams constantly strive to identify, document, and fix issues as early as possible. Solid automation testing coverage coupled with CI/CD (and, ideally, integrated into TDD and/or DevOps) is also essential. It serves as a helpful safety net once you start eliminating tech debt: your tests will always show what’s broken, and you won’t have to pay the price of increasing the duration of regression testing.

Case study: migrating the world’s #1 cloud network orchestration app 

One project that illustrates this approach is the migration of the cloud network orchestration application of a company listed on Fortune and trusted by household names like Vodafone and SoftBank.

When re-implementing the app in a new technology, defining suitable architecture and abstractions proved challenging because our engineers lacked knowledge about the specific functionality they would need to migrate later on. 

To mitigate the challenge, our team made sure to request enough time from the client for resolving new architecture and code issues as early as possible. Integral to our ability to identify these issues was an extensive automation coverage that eventually reached 95% of the product code base, encompassing more than a thousand user workflows.

Key takeaways and action items

Identifying and eliminating new tech debt as early as possible may take extra time and effort, but it’s a great way to reduce long-term project costs. Automated testing and DevOps help a lot in identifying these issues, which makes these practices a staple in modern product development. It also goes without saying that engineers can nip a great deal of technical debt in the bud with regular architecture and code reviews and static code analyzers.

Lesson #3: Remember to pay down UX debt

UX debt doesn’t come up at product team meetings all too often, but it deserves just as much attention as technical debt. Take one too many design shortcuts and leave them unattended long enough, and you’ll find yourself in a project overburdened by rework and compounding user problems. 

Design debt becomes a major issue after mergers and acquisitions, when companies add other companies’ products to their portfolios. Newly acquired products typically introduce unfamiliar UX patterns and workflows, producing hard-to-learn use-cases, end-user confusion, and hard-to-sell integrated product suites. 

According to Nielsen Norman Group, Agile Development Teams are especially prone to such issues due to the high pressure to ship new features frequently. In our designers’ experience, UX debt tends to accumulate at a rate that’s comparable to tech debt. This means companies with a longer history benefit more from UI/UX design audits and activities specifically targeting UX debt and unifying user experience across product suites.

Case study: unifying three decades worth of UX debt

One such company collaborating with our Design Studio is a supply chain analytics platform founded in the early 90s. As the platform evolved over decades, embracing leading-edge data and AI capabilities and adding new user flows, it also grew in complexity. At some point, its evolution produced a large ecosystem of isolated products that looked and behaved differently, creating UX friction.

Our designers addressed this challenge by creating a Unifying Experience Layer pulling the data from separate products into a single UI. Coupled with a design system for the company’s UI/UX and dev teams, this solution offered a non-disruptive way of unifying its customer experience. The cohesive design also streamlined our client’s front-end development efforts, boosting engineering efficiency.

Key takeaways and action items

Not all tech debt can be tackled by engineers. As products grow, their design systems accumulate debt, creating usability issues and production bottlenecks. In our experience, finding design solutions for such problems requires a strategic approach that involves ideation and alignment workshops, qualitative research with end-users, UX audits, and prototyping. The impact of this work, however, is often felt by both users and the developers working on the product.

A few words about engaging third-party consultancies to deal with tech debt

The pace of the modern tech industry puts a lot of pressure on companies to build new products and features quickly. In this environment, product teams often have to deliberately cut corners and make less-than-ideal design decisions, incurring technical debt. When it comes to paying it down, engaging remote talent can help companies boost efficiency.

Global digital consultancies like AgileEngine engage thoroughly vetted engineers and designers across dozens of nearshore and offshore locations. When working with our experts in LATAM, Europe, and Asia, clients see up to 3X more value delivered on their existing budget. In the past ten years, our app development, UI/UX design, data, AI, and QA teams have supported products and companies top-rated by Gartner, G2, Deloitte, and Fortune. Contact us and discover how the same talent can help fuel your growth.

TAGS
Kapil Nawab

Technopreneur with over 19+ years of experience handling all aspects of running a business including pre-sales, Marketing, customer management, Operations, People, vendor management, and Finance.

SHARE THIS POST!
Related articles