Is It Ever a Good Time to Reduce Technical Debt?
In the global response to the COVID-19 pandemic, there have been plenty of stories about the acceleration of digital transformation efforts. Satya Nadella recently commented, “We have seen two years’ worth of digital transformation in two months.” And new global research from Vanson Bourne in partnership with VMware shows that while nearly all organizations have been digitally transforming (99.54%), almost as many (98.77%) said there was room for improvement in their digital transformation efforts.
The speed of transformation has been impressive. But, it is important to question whether this is just a short-lived reaction to the current crisis or whether we’ll see a long-term change in attitude to transformation.
One widely reported story set me thinking on this topic. It’s about the need for COBOL programmers to improve the performance of a critical system for handling unemployment claims in New Jersey. COBOL is not often in the news, and nor is it much associated with digital transformation. It was already going out of fashion when I was learning to write software in the 1970s. And yet here we are in 2020, still depending on it.
WIRED magazine’s analysis of the problem reached the reasonable conclusion that the problem wasn’t COBOL per se so much as:
- Difficulty making changes to the system.
- A lack of scalability (to handle unprecedented demand) in the overall system.
One thing we can be sure of is that the system wasn’t built using the latest approaches to application development.
An ability to push updates in response to a changing landscape (42%) and the ability to rapidly scale (35%) are some of the main benefits of modern cloud-native applications, according to respondents of our recent research who took the survey upon the outbreak of the current pandemic. Yet, scaling challenges are a common theme in response to COVID-19.
A story that generated both amusement and irritation in Australia was the creation of a virtual queue to get onto a shopping website. While consumers were annoyed, it was arguably better to limit the number of users on a website than to have the site crash or become unresponsive. Of course, a much better option would have been to build a website that scaled up its performance when the load increased. But that option wasn’t immediately available to the retailer when demand for online shopping suddenly took off under lockdown.
What these and similar anecdotes have in common is they expose the effects of technical debt. Martin Fowler’s short piece on technical debt makes the case well. When a piece of software isn’t well designed, every change to that software requires more effort than it would on well-designed code. That extra effort is the interest on the technical debt.
Paying down debt, like paying off a mortgage, generally can’t be done all at once. It must be done a bit at a time, ideally at a fast-enough pace that eventually the debt is reduced. Then, it becomes easier to make future changes—smaller interest payments. A process of making many small improvements doesn’t necessarily leave you where you want to be when an unexpected crisis like COVID-19 arrives.
Reducing Technical Debt
There are a lot of ways to reduce technical debt. Here are a few:
- Organizations may choose to replace or repurchase a legacy application with something more modern, possibly a SaaS alternative.
- Some legacy applications might serve such a niche business need that they are no longer worth maintaining. These can be retired.
- For some applications, the best option is going to be refactoring or rearchitecting. Although these terms cover a lot of territory, refactoring today often entails taking a monolithic application and breaking it into microservices.
These strategies—replace, retire, refactor—are among the six strategies for moving to the cloud, as suggested by AWS. While moving an application to the cloud is not a guarantee that technical debt will be reduced, it is often a step in the right direction.
The process of modernizing an application to take advantage of cloud infrastructure will likely involve changes to the structure of the application that can reduce technical debt. And the wide variety of cloud-native services can reduce the amount of code that must be developed and maintained by the application owner.
Both the COBOL system and the online shopping website mentioned above are likely candidates for refactoring. A much wider array of tools is available today for building, running, and managing applications that weren’t available decades ago. And in many cases, the best course of action will be to embrace application modernization.
The Role of Microservices
I’m not going to prescribe solutions for application problems that I know about only via media articles. Yet, it’s easy to see why the modern practice of microservice-based architecture could help in these cases. Microservices, used appropriately, allow applications to scale out by rapidly provisioning resources to just those parts of the application that are limiting performance. They also force designers to provide clear boundaries among components of an application, potentially easing the task of making changes to one part of the application in the future.
James Watters recently talked about the impact of microservices over the last decade, and highlighted developer productivity and scalability as two of the “superpowers” they unleashed. At the same time, they are not a panacea. The microservices backlash illustrates that it’s easy to find examples of where microservices failed to deliver the purported benefits.
Building a Resilient Future
My hope in all of this is that the long-term response to COVID-19 won’t just be a set of quick fixes to immediate problems. Instead, it should teach us something important about the need to reduce technical debt over time.
Application modernization cannot typically be done quickly, just like a mortgage can’t (in most cases) be quickly paid off. But it is important and can deliver an enormous return on investment, especially when focused on the applications that matter most. Applications that scale gracefully can deal with unanticipated challenges. And applications built to leverage modern cloud infrastructure can take advantage of the amazing ecosystem of open source projects and cloud-native services that grow by the hour.
Reducing technical debt makes it easier to deliver new and impactful features to end-users, which in turn generates business value. It also helps businesses respond to unanticipated needs in a crisis.