Many companies are tempted to rehost or minimally replatform applications for the cloud. The most significant benefits (including cost savings of up to 50%) go to those that thoughtfully replatform, refactor, and relicense their applications to leverage what the cloud offers.
Rehosting refers to moving an application’s components from physical servers to virtual machines in the cloud. This is often called a “lift-and-shift” migration. Moving your apps to VMs in this way lets you easily migrate to the cloud but does not involve re-architecting the solution to use cloud-native services. You will be faced with the same limitations to scalability and options for future development as you were in the datacenter. If you need to move out of a physical datacenter quickly, do not expect to need to update the application very often or at all, or if it is of lower strategic importance to the business, you may not want to invest the effort to replatform or refactor it, making it a good candidate for rehosting.
Replatforming involves moving an on-prem application to the cloud while making minimal source code changes to allow for more fine-grained management of application components. It is a cost-efficient approach but allows for some cloud-native benefits such as auto-scaling, improved security and resilience, and managed storage. One method of replatforming is auto-containerization using a hyperscaler’s migration tools. This approach can reduce costs by using a shared platform instead of IaaS and provides an opportunity to move from commercial software to open-source containers in the cloud, further reducing total cost of ownership (TCO). Replatforming is best for workloads with straightforward components, controlled technical debt, and no major performance or security problems. Perhaps you’ve prioritized other apps within your portfolio for more extensive modernization and need to be pragmatic about the rest.
Rehosting and replatforming can be tricky. According to a recent IDC whitepaper on application modernization, replatforming “could result in unexpected (and unwelcome) surprises that impact application stability and performance.”
Refactoring is the process of re-architecting and making significant code changes to an application to make it better suited to the cloud. In a proper refactor you can pay technical debt, decompose monoliths, solve performance and security issues, and add cloud-native services. Usually, monolithic apps (built with functionality such as UI, database, and logic all in a single unit) are decomposed to use individual cloud services natively. This allows you to optimize the use of cloud services based on business requirements, technical requirements, and cost considerations across compute, storage, database, and so forth. It also opens the entire catalog of purpose-built services from the hyperscalers for future innovation (such as ML, AI, IoT, edge, blockchain, etc.). Finally, it enables more agile, modern ways of working for development and operations teams.
Two recognized modern architectural patterns are microservices (individual functions are deployed into containers that operate as stand-alone applications) and serverless (run code without being concerned about the underlying infrastructure). Refactoring can be accomplished all at once or in iterative phases, according to the scope of refactoring required and appetite for investment. Applications central to your business and planned to be continuously enhanced in the future will benefit from the investment in refactoring.