App Modernization: How to Manage Risk and Generate ROI as You Go
You moved a critical application to the cloud, expecting infrastructure and operational expenses to decrease. It didn’t play out like you thought. You are paying much more than you planned, making you reconsider why you moved it to the cloud in the first place. But there was a reason you moved to the cloud, and running an application on your infrastructure just puts you right back where you started.
3 Major Components Driving Cloud Costs
The major components of your cloud cost are compute, storage, and network bandwidth fees. This means the application is consuming more resources than you expected, eroding or eliminating your savings.
Applications have an architecture. They consist of components with responsibilities that interact with each other to deliver value. The problem is, in many cases, that architecture emerged from a series of expedient decisions over a long period of time. It is an accidental architecture. It wasn’t designed – it just happened. This is as much a consequence of poor decision-making as it is technology or bad code.
You probably noticed the application getting more problematic to change over time. Releases take longer and longer. More time is spent fixing defects than adding new features. And you moved this to the cloud. If the application wasn’t designed for the cloud, then it isn’t going to make efficient use of the cloud.
A Different Approach to App Modernization
We believe there is a path to realizing the benefits you expected when you began your cloud journey. Modernizing applications allows you to take advantage of what the cloud offers and generate savings.
Modernizing an application that has been built over the years can seem like a daunting proposition. You may have already tried in the past and failed. The most significant success factor will be to develop a roadmap of improvements, economically justify them, and take it a step at a time. This way, you can manage risk and generate returns as you go. There are four key principles to keep in mind:
- Establish the seams
- Eliminate technical debt
- Scale what needs to be scaled
- Make better bets
Establish the Seams
Divide the application into components focused on business capabilities or customer problems. Extract each component in order of value or return, focusing on the seams where they interact with other parts of the application. Place the component behind a contract barrier using APIs, messages, or events. Develop automated tests that validate the component’s contracts. Then, wire the component back into the application using the new contracts.
Eliminate Technical Debt
Now that the component is hidden behind a contract, it can be safely improved without affecting the rest of the application. This is where the first level of value can be obtained. Refactor the component to take advantage of the economies offered by the cloud provider. Look for less expensive, less resource-heavy solutions.
Scale What Needs to be Scaled
All components are not created equal. Some are used more heavily than others, and some are subject to varying demand and peaks. These components can be placed in serverless functions or auto-scaling groups so that you only pay for what you use. This is the second level of economic value.
Make Better Bets
Nobody wants to create a mess. But the temptation to fall into the tyranny of the urgent is strong. Unless you fix how you make decisions (governance), you could easily wind up in the same fix again. Recognize that the development process is a system and create an agile system of delivery that owns the total problem – the health and hygiene of the solution as well as the features to be developed. With the proper structure, governance, and metrics, you can avoid technical debt and expedient decisions.
Your application may be old, and it is costing you more than you expected. By establishing the seams, eliminating technical debt, scaling what needs to be scaled, and making better bets, it is possible to realize the promise of cloud computing.