App modernization looks different for everyone!
There are no hard-and-fast rules or one-size-fits-all approaches to migrating applications to the cloud. Every organization has its own unique challenges, constraints, culture, goals, budgets, and market pressures that guide them on their journey. There are however some common strategies that have helped organizations successfully move tens, hundreds, or thousands of applications to the cloud.
Some common steps in the migration effort include:
- Business planning
- Migration planning
- Application design, migration, and validation
Business planning: “By failing to prepare, you are preparing to fail.” – Benjamin Franklin
One of the first steps that needs to be taken is to develop a good business case and set the right expectations for a migration effort. This means getting the leadership team engaged early, opening channels of communication, creating a space where everyone can be honest and challenge effectively, setting meaningful goals with a clarity of purpose, and rallying the entire organization around the effort to migrate.
Migration planning: Effectively scoping app migration can accelerate learning and adoption.
When organizations are looking to perform large-scale modernization efforts, it is important to perform an analysis of the technology landscape that provides an inventory of applications as well as interdependencies to build a migration plan. The complexity and business criticality of selected applications and the ambitiousness of the migration strategy will influence how things are migrated to the cloud.
It is often a good idea to start with applications that are lower in complexity and are not as business critical. This helps to:
- Achieve a few quick wins that can drive funding for larger and more complex migrations
- Build new skills in a low pressure setting that helps grow the teams confidence
- Provide insight into migration patterns that work well for the organization
- Fill process gaps and reinforce best practices over time
- Drive smaller, more iterative cultural changes that are easier to manage
Application design, migration, and validation: Time to start building!
After alignment on the business and migration plan, it is time to start the migration process by moving apps, data, and infrastructure to the cloud. Each application is designed, migrated, and validated according to a specific migration strategy.
The organizations that are the most successful with app migration efforts employ an iterative approach that emphasizes flow, feedback, and continuous learning and experimentation.
The teams that are best able to scale these efforts focus on cloud platforms as a product that enables greater self-service.
Operations: Focus on culture.
Shifting to a culture of cloud is essential for adoption and stable operations. As part of that shift, it is important to consider how modernizing applications changes an organizations operating model. Team members may need to be ready for a new set of expectations and skills, realignment to new team structures, changes to process and procedure, new paradigms and ways of working, and a new set of app, configuration, and cloud technologies.
The important thing to remember is that this change will not and cannot happen overnight. Be thoughtful and intentional but don’t try to figure everything out in the first go. Build a strong foundation with a focus on people and iterate towards a modern operating model.
Following this approach will help ensure that operations is an evergreen set of people, process, and technology that gets better over time and can mature and scale as learnings are cultivated, and cloud migrations accelerate.
Rs of migration: The many ways to get to the cloud.
The R’s of migration are a set of strategies for modernizing applications by migrating to the cloud. In some cases, this involves a “lift-and-shift” of existing applications to the cloud running on infrastructure that is managed by the consumer (Rehost). Other times, it might be a complete reimagining of a product that includes redesigning user experiences, rewriting application code, or developing new features that leverage cloud capabilities (Rearchitect, Refactor or Rebuild). It might even involve scrapping a homegrown application all together to take advantage of newer commercial off-the-shelf or software-as-a-service solutions (Retire, Repurchase or Replace). In some cases, there is not a strong business case or organizational will to migrate all applications from on-premises or to modernize an application stack (Retain or Revisit).
As you can see, there are many different strategies for getting to the cloud and the R’s offer a useful mnemonic device for remembering what those are. The important thing to understand is that not all apps and migrations are created equal. Each app should be assessed independently to determine what the right strategy is to achieve the desired value to effort ratio in the modernization process.
Retain or revisit: Sometimes the best move is not to move.
Apps that fall into this strategy either don’t make sense to migrate, lack a business case or organizational willingness to migrate, or have a business need to stay on-premises. Apps identified as being good candidates for this strategy are reviewed periodically to determine if any fundamental factors have changed that would compel a cloud migration.
In practice, as more and more of an organizations apps are modernized the fewer reasons there are to retain any IT assets on-premises.
Retire: Say “goodbye” to technical weight.
As teams start to assess their IT portfolio, it is often the case there a handful of applications identified that are no longer useful or required. Retiring these applications can help bolster the business case for cloud migration and app modernization efforts while enabling the team to stay focused on the most important, value-added apps.
Rehost: ”Lift-and-shift” can be the right answer.
One strategy that offers a fast path to the cloud is called rehosting. This method of migrating an application is also known as “lift-and-shift” because you are simply redeploying an app as-is to the cloud. Most applications are rehosted to the cloud early in the migration path because of the quick return on investment (ROI), the ability to reduce consumption of data center resources and over time reduce capital expenditures, and due to the smaller amount of effort and expertise required to perform this type of migration. It can also result in a quick win for technology organizations looking to grow their skills and expand their ambitions.
There are many tools out there than can help with rehosting apps, data, and infrastructure in the cloud using manual or automated approaches. In many cases, teams elect for manual rehosting at the beginning of their journey to take advantage of the learning that can happen along the way.
While rehosting likely will not result in better performance or scalability of an app and has some downsides associated with using infrastructure-as-a-service (IaaS), it does make it easier to rearchitect in the future because the app, data, and networking have already been migrated to the cloud and the team will have learned new skills.
Replace or repurchase: Sometimes its better to “drop and shop”.
In some cases, it can make more sense to replace an application by purchasing a common-off-the-shelf (COTS) or software-as-a-service (SaaS) application. This is sometimes referred to as “drop and shop”. Over time, services can become commoditized meaning that a custom solution is no longer required. There are many cases where replacing a homegrown application with a vendor-based product can help to reduce costs (development, infrastructure, operations, maintenance, etc.) and enable a smoother migration to cloud using integrations that are available out-of-the-box from the vendor.
In situations where an organization is already using a COTS or SaaS product, it might be possible to repurchase to take advantage of new features and functionality or better cost models (subscription-base, consumption-based, etc.).
The major disadvantages to this approach are that not all problems have a vendor developed solution available, not all features you want are always supported, difficulty with access to data or data residency, and vendor lock-in.
Refactor or replatform: “Lift-tinker-and-shift” strikes a balance.
Another path to the cloud is to refactor or replatform an app. This strategy is sometimes known as “lift-tinker-and-shift”. It offers the ability to blend familiarity with innovation by allowing developers to reuse languages, frameworks, and containers with minimal changes to take better advantage of the cloud using platform-as-a-service (PaaS) offerings. This allows teams to get some of the benefits of fully managed cloud services such as speed, scalability, and cost-effectiveness without having to fully rearchitect the app.
Some of the drawbacks of this approach can be missing capabilities, framework lock-in, and sub-optimal architecture design leading to more fragility that naturally results from tightly coupled services.
Rearchitect or rebuild: Getting serious about app modernization.
A more complex migration strategy is to rearchitect or rebuild an application. I like to call this approach app “reimagination”. It involves materially altering and decomposing an application into cloud-native services to achieve a services-oriented or microservices-based architecture. It can also mean partially or fully redesigning and rewriting frontend and backend app code using more modern languages, frameworks, and services or even writing or rethinking entire application features.
This approach often requires a larger investment of people and time and therefore money to complete and is driven by a strong business need to add features, improve scalability, or drive greater performance. In some cases, the decision to employ this strategy can also arise from a desire to improve the predictability and reliability of a highly business critical application or to out-innovate competitors and take greater market share.
Benefits of rearchitecting or rebuilding an app can include the ability to:
- Deliver new features faster to happier customers
- Make ever smaller changes that are more frequently delivered to cloud environments
- Scale an application to meet the needs of customers while only paying for what you use
- Adopt newer cloud technologies faster
- Enable teams to work more autonomously and in different technology stacks
- Drive greater business continuity
- Better implement more modern delivery models such as Agile and DevOps
The greatest disadvantage of this approach are the skills and time required to rearchitect, the cost and effort associated with material architectural changes, and the level of cultural change required to get effective adoption of new ways or working.
Key takeaways about migrating apps.
There is no one-size-fits-all approach or one linear, homogenous process to modernizing apps. An organizations portfolio of IT assets should be assessed to determine what migration strategy will be most effective on an application-by-application basis. To maximize the likelihood of success, think very carefully about how you will:
- Build a business case
- Fund the effort for the long term
- Achieve some quick wins
- Change your operating model
- Grow the skills of your team
- Drive cultural adoption of new ways of working