Anyone who’s ever postponed installing a new OS to the newest version can attest to the technical issues that arise when older systems are not updated. Continuing to use outmoded technology can lead to a world of problems, from security issues to poor performance and reliability. As a result, the need to modernize is clear to many businesses. However, the process for modernization is decidedly less straightforward, with strategies that run the gamut from “lifting and shifting” an application onto newer infrastructure to replacing or rewriting the old application from scratch. This post will discuss the challenges and benefits of modernizing, five strategies for modernization, and how to devise a modernization strategy that’s right for your business.
What is modernization?
Application modernization is the process of updating or rebuilding legacy applications to more effectively leverage modern technology and trends. This may include:
- Moving an application to the cloud or edge
- Decomposing a monolithic application into microservices
- Using new deployment methods like containers and serverless
- Automating operational tasks
- Exposing systems through APIs
Challenges and benefits of modernization
Gartner defines a legacy application as “An information system that may be based on outdated technologies, but is critical to day-to-day operations.” This is one of the key reasons older systems tend to hang around: overhauling a system that is, by definition, essential is a risky proposition. Mission-critical apps have little—if any—downtime flexibility and may include complex ties to the functionality of other operations, making them difficult to change.
The challenges of modernizing include:
- Lack of downtime flexibility
- Interdependencies on other systems
- Cost of new tools and talent
- Difficulty of learning new systems
However, the mission-critical nature of legacy applications is precisely why it’s so important to modernize. A recent analysis of federal expenditures estimated that the U.S. government spends 80% of its total IT budget on Operations and Maintenance, including the rising cost of maintaining legacy systems, which pose “efficiency, cybersecurity, and mission risk issues” that “may hinder agencies’ ability to comply with critical cybersecurity statutory and policy requirements.” In other words, the longer outdated systems remain in place, the less secure and reliable they become, impeding their ability to carry out mission-critical work.
And while the cost of modernizing may be significant, the costs of maintaining legacy systems only increases over time due to their inefficient resource use, proprietary technology, and technical debt. A 2018 report by Stripe noted that each developer spends over 30 hours a week on average addressing bad code and technical debt, resulting in an annual loss of $85 billion worldwide.
In addition, failure to update may hinder company growth due to performance issues, slow rollout of new features, and inability to attract talented programmers who prefer to use newer languages and frameworks. Ultimately, investing in modernization can result in long-term gains that offset short-term costs through:
- Reduced security risks
- Faster deployment
- Improved performance and reliability
- The use of newer, more efficient tools
- Better resource use
- Ability to attract new talent
Strategies for modernization
As with any important undertaking, the best place to start with modernization is by making a plan. Strategies for modernization can be roughly categorized based on the extent to which legacy elements are upheld or replaced. Although groupings and definitions tend to vary, this article will use definitions provided by Gartner and focus on five different strategies: rehost, refactor, re-architect, rebuild, and replace.
Sometimes referred to as “lift and shift,” rehosting involves moving an app “as is” from a legacy environment such as on-premises servers to newer infrastructure, such as the cloud. Requiring little to no change to source code, this strategy is minimally disruptive and can be executed quickly with minimal cost spent on developer hours. In addition, it can provide some of the benefits of the cloud, such as scaling without the need to physically install servers or consolidating on-premises infrastructure.
However, since monolithic applications are not optimized for the cloud, the benefits of rehosting can be limited or even negated in the long run. Some monolithic applications may be too complex to rehost, while others may consume so many resources that shifting to cloud infrastructure could actually increase costs over time as companies scale.
- Minimal downtime
- Fast and inexpensive transition
- Consolidate on-premises infrastructure
- Easier to scale
- Retain tech debt
- Not optimized for cloud
- Could increase costs long-term
Refactoring is the process of restructuring code while still maintaining its external behavior. According to Martin Fowler, whose book Refactoring: Improving the Design of Existing Code helped to define the term, these small changes to code make it easier to maintain and can prepare it for larger changes. He writes, “When I need to add a new feature to a codebase, I look at the existing code and consider whether it’s structured in such a way to make the new change straightforward. If it isn’t, then I refactor the existing code to make this new addition easy.”
With refactoring, each individual change may do little on its own, but many changes can have a great cumulative impact, making code easier to read and reducing the technical debt that an application takes on as new features are introduced. In addition, working incrementally reduces the chances of breaking the system as changes are made. However, since refactoring does not change an application’s behavior, it will not fix performance issues stemming from the use of monolithic structure or older infrastructure.
- Reduce technical debt
- Make changes easier to implement
- Low risk
- Low cost
- Retain outdated infrastructure and architecture
Unlike rehosting and refactoring, re-architecting involves fairly intensive changes to an application. Gartner defines this strategy as “materially alter[ing] the code to shift it to a new application architecture and exploit new and better capabilities.” These bigger changes may include breaking down a monolithic application into microservices or changing from a relational database to NoSQL. In both cases, these changes not only serve to make an application more cloud-compatible, but have advantages on their own, such as scalability and reliability. As a result, re-architecting can address the needs of businesses that are at an inflection point—requiring agile scaling and deployment of new features—better than refactoring or rehosting. However, these benefits come with a price. The code restructuring involved in re-architecting may be difficult to develop, resulting in bugs or compliance issues as changes roll out.
- Optimize for the cloud
- Improve scalability and agility
- Add new functionality
- Potentially high costs
- Difficult and time-consuming to develop
- Changes may introduce errors
Of the five strategies discussed in this article, rebuilding is by far the most time-consuming and difficult to implement. Rebuilding involves a complete overhaul of an application, preserving only the scope and specifications, while the rest of the system is rewritten from scratch. However, moving from a stable system to one that has not been tested over time is a risky proposition. As such, The New Stack recommends running the new system in tandem with old code to allow time for double-checking and and slowly rolling out changes, giving users the option to opt-in to the new system. This minimizes the risks of rebuilding, but introduces additional complexity and costs to an already difficult and expensive modernization strategy.
Despite the challenges of rewriting, the price may be worth it in certain circumstances. A 2020 article from CMSWire discussed rewriting as a tool for implementing changes when “the architectural source code fails to align with the business drivers or quality attributes.” In these cases, the application’s components are incapable of meeting the business’s current needs, so reorganizing the code or refactoring to eliminate tech debt would provide little business value.
- Customize application to fit current business needs
- Eliminate outmoded systems and tools
- High cost
- High risk
- Difficult and time-consuming to develop
- Users must adjust to new UI
Although some applications may require a complete rewrite in order to fulfill the company’s goals for modernization, the challenges of rewriting may be prohibitive for some businesses. One strategy that allows for overhauling a legacy application in a manner that is faster and easier to implement is replacement. Also known as “repurchasing,” it involves replacing an old application with fully managed commercial software that better serves the business’s needs. This can provide scalability and lower costs while providing a tested, easy-to-use solution with updates made available by the provider. However, there may not always be a SaaS that meets the needed requirements, and companies that do purchase SaaS may be limited in their ability to customize software and run the risk of vendor lock-in.
- Minimal administrative overhead
- Provider handles updates
- Fast and easy to implement
- Vendor lock-in
- Limited customization
- Limited control
Devising a strategy
Although each company’s journey toward modernization is likely to be different, almost any modernization strategy is going to involve an assessment of two factors: the business goals for modernizing and the technology in need of modernization. Evaluating business drivers can help companies assess what needs to change; evaluating their technology provides a clear picture of how that change can (or should) take place.
For some companies, the business needs for modernization may already be painfully clear, from the need to cut infrastructure costs to performance woes that are causing a dropoff in users. Others may be aware of the benefits of modernizing, but are unsure what to prioritize. In this case, New Relic notes that “One way to get started is to identify the highest priority business-critical applications and explore how they would benefit from better performance, scalability, and reliability.” Considering the impact of technical metrics, such as latency, on business metrics, such as ad conversions and sales, can help companies to set specific goals and benchmarks for modernization.
From a technical perspective, companies should conduct a thorough evaluation of their portfolio to gain an understanding of the challenges of modernizing specific applications. Computerworld recommends using an automated solution during the modernization process to continually evaluate an application’s:
- Viability with modern architecture
- Code redundancy
- External interfaces
- Logic flows
- Business rules
With the advent of cloud computing, 5G, and other changes in technology, modernization is increasingly necessary to remain competitive in today’s digital landscape. However, because of the myriad considerations involved, the process of modernization is difficult for many businesses. Having a partner to assist with modernization can help to alleviate some of these difficulties. Azion offers support services for enterprises that include 24x7 access to our Support Engineers. In addition, our serverless model simplifies the process of modernization by handling the management of server-side resources and security, allowing companies to focus on the user experience, rather than rote tasks like infrastructure management. The next post in this series will provide more information on serverless computing with a comparison of serverless container-based options for modern application architecture.