Moving to the Cloud: Strategies, Benefits, and Experiences
Why does everyone want in the cloud?
In recent years, the trend of cloud adoption has gained significant momentum, with many organizations considering the move to the cloud. While the fear of missing out on the latest technological advancements is justified (https://cloud.google.com/learn/advantages-of-cloud-computing, https://azure.microsoft.com/en-us/resources/cloud-computing-dictionary/benefits-of-cloud-migration/), it is essential to understand that migrating to the cloud does not automatically solve all problems and may not be the perfect solution for every scenario. In this blog post, we will explore the key factors to consider before taking the leap into the cloud, including our own cloud migration experience and how we performed it. Our own cloud journey and this blog post are both highly influenced by Gregor Hohpe’s book ‘Cloud Strategy — A Decision-based Approach to Successful Cloud Migration’.
Why do we want to move to the cloud?
Our journey into the cloud migration realm began with an application running directly in the client’s data center, carrying minimal load. We then opted to move to an “as-a-service”-approach, so the application was relocated to an in-house data center. Because of that, the load increased massively, so we needed to make minor adjustments to keep the applications running. We quickly realized that this wasn’t enough and we needed to do more to handle the load.
Our new aim? Migrate to the cloud, embracing a platform on the top of Kubernetes and deploying multiple instances to withstand the increasing load.
Because of the client’s policies, we had to utilize their private cloud, which means that certain experiences discussed may not directly apply to your situation if you use a public cloud.
Benefits?
First off, let’s take a look at the main reasons we and most other companies want to move to the cloud.
Scalability
One of the key advantages of the cloud is its scalability. It provides flexible options to scale resources up or down as needed, making it easier to accommodate varying workloads. Additionally, serverless architecture in the cloud can simplify application development and management.
This was also the primary driver for our transition to the cloud. The initial data center solution couldn’t provide the scalability we needed for our application.
Cost Reduction
Another motivation for cloud migration is the potential cost savings. However, it is crucial to realize that cost reduction is not guaranteed. In fact, at the initial stages of migration, expenses may increase as you work to configure everything correctly. Cloud infrastructure requires careful planning and optimization to fully realize its cost-saving benefits.
This is one of the benefits that is really important if you move to a public cloud, but it was no main driver for us. It may be cheaper due to shared servers, but the private cloud obviously does not have pay-as-you-go.
Improved Uptime
Cloud providers offer robust infrastructure that can lead to better uptime and availability. However, it is important to note that the application’s stability is crucial in this aspect. If your application experiences frequent crashes or instability, the cloud infrastructure alone may not be sufficient to ensure continuous uptime.
This was also very clear to us, so we planned some rearchitecting, in the beginning, to make the application more stable.
Performance
Cloud migration can improve performance due to reduced network latency and better server hardware provided by cloud vendors. The cloud enables faster and more efficient access to services by shortening the distance between users and applications.
Our main starting point for improving our performance was horizontal scalability.
CI/CD Integration
Cloud environments are well-suited for implementing Continuous Integration and Continuous Deployment (CI/CD) pipelines. Automated deployment, testing, and delivery of software can be seamlessly integrated into cloud-based infrastructure, enabling faster and more reliable software releases.
We are still working on this process but are very keen to use it. I will keep you updated when we manage to fully integrate it and how we did it.
Security
Security concerns are used to deter many from migrating to the cloud. However, modern cloud providers have made significant strides in ensuring the security of data and applications hosted on their platforms. Cloud providers prioritize security, often investing in advanced security measures and compliance certifications to protect their customers’ data.
Security was not a big reason for us to move to the cloud because it was really important from the beginning. So the most important thing was to keep our high standards.
Observability
The cloud offers a wide range of monitoring solutions that can be easily integrated into your infrastructure. These monitoring tools provide valuable insights into system performance, resource utilization, and application health, allowing you to identify and address issues proactively.
Our platform team did already an awesome job setting up lots of observability tooling that we can use. It will surely improve our observability experience.
So, cloud migration can bring numerous benefits, including potential cost savings, improved performance, and enhanced security. However, it is essential to approach cloud migration with a thorough understanding of its implications and challenges. Careful planning, resource optimization, and application stability are crucial for a successful transition to the cloud. Also, every migration is different and has different goals. We quickly realized that during our own migration to the private cloud. Many benefits listed here did not directly concern us, while others were more important. Next, let’s take a look at how to plan a cloud migration properly and what you need to bear in mind.
Before we start
Before embarking on this transformative journey, it is essential to take a step back and consider several key factors to ensure a successful and smooth migration process.
Define Expectations: Before starting the cloud migration, you must clearly understand what you want to achieve. Not everything can be migrated to the cloud immediately, so identifying your priorities and setting realistic expectations will be essential for a well-executed migration. For us, this was the ability to handle more load by easily increasing instances of our application without going through complicated procurement processes.
Set Clear Goals: Setting clear goals is equally important to establish realistic expectations for the cloud migration. While the cloud offers numerous benefits, as discussed before, these advantages may not be immediately visible. Understand that cloud migration is a journey, and the benefits will gradually become apparent over time. This was also one of those things that became clear to us repeatedly throughout the process. New elements that were not part of the initial plan keep cropping up simply because they were not visible in the beginning.
Test with Local Tools First: Before migrating applications or data to the cloud, testing them locally with existing tools is a good practice. This will help identify potential issues and make necessary adjustments before the migration, reducing the risk of unexpected complications during the process.
Avoid Application-Centric Migration: When migrating applications to the cloud, consider a holistic view of your entire IT landscape. Instead of focusing solely on individual applications, adopt a strategic approach considering the interconnections between systems, processes, data, and the new options and possibilities the cloud can give you. If you use the same methods as before, you just move to another data center.
Discard Existing Methods and Processes: The cloud provides an opportunity to reinvent and optimize processes. Instead of replicating existing on-premises methods, be open to embracing new and more efficient practices offered by cloud technology. One of the new practices we wanted to enforce was DevOps. We wanted to deploy and adjust more freely and with less dependency on operations. Also, the operations teams supported this new way because, like this, they could focus on the platform and infrastructure instead of deploying and monitoring our applications.
Leverage Existing Solutions: The cloud offers a wide range of services and tools that can complement your existing solutions. Before reinventing the wheel, explore how cloud services can integrate with your current infrastructure to optimize your application’s migration, running, and monitoring. A huge improvement in this area was the observability solutions provided by our private cloud. But also, in the public cloud sector, the wide range of observability solutions will surely help you.
Let’s do it
So I think we are ready now to actually start the migration. So, let’s start! A cloud migration consists of three fundamental steps to achieve a (hopefully) seamless transition.
1. Planning
In the planning phase, it is crucial to lay a strong foundation for the cloud migration. This involves defining the migration’s scope, understanding the motivations and goals, and identifying the success metrics. Stakeholders must be informed and involved in the planning process to ensure alignment with the organization’s strategic objectives. Informing the stakeholders and keeping them up to date was very crucial for us. It is important that they know what is going on, how we are doing, and which problems we face. The goal is to make the whole process as transparent as possible.
Size
Define the size and complexity of the migration and clearly define the goals you want to achieve. Inform and discuss this with your stakeholders.
The Right Team
Assemble a competent team comprising a sponsor, architect, and manager. The sponsor secures necessary resources and budget, the architect makes crucial technical decisions and designs, and the manager handles communications and schedules the execution phase.
Embrace the Full Potential of the Cloud:
Rather than merely trying to avoid cloud lock-in, explore and leverage the full capabilities of the cloud. Embracing cloud-native services and features can unlock various advantages, including scalability, cost-efficiency, and enhanced performance.
Remember, Migration is Not Business as Usual:
Understand that cloud migration is a unique endeavor that requires dedicated efforts and resources. Treating it as just another routine task can lead to suboptimal results and missed opportunities. I cannot stress this enough: please do not underestimate the migration. Everyone who ever performed such a task will tell you the same, so correctly plan it as the journey that it is.
Virtual Private Cloud?
For public cloud migrations, consider whether a virtual private cloud (VPC) is required. Most of the time, it is not, but when specific requirements need to be met, VPC may be the answer. It provides added security and control while still leveraging the benefits of the public cloud infrastructure. For us, a private cloud was necessary due to special requirements.
Hybrid Cloud as an Option
Consider a hybrid cloud approach if it aligns with your organization’s needs. A hybrid cloud model allows for a gradual migration and facilitates early experiences with the cloud.
Recognize that every migration is unique, and tailor the process to match your specific circumstances, workload, and objectives.
Possible slices may be between the Front- and Backend, Development, and Production Environments or between new and old services. We decided to start with a Development and Production slice to get confident enough and fix the problems early.
2. Execution
Execution is the heart of cloud migration, where the actual transfer of applications takes place.
Discovery
Conduct a thorough inventory of your current infrastructure and applications and define what and how this will be mapped to the cloud. Understand what needs to be migrated and consider dependencies and potential challenges.
We decided to migrate our development and testing environments first and leave production and our data still on-premise. This was a business decision to minimize risk and make the migration process as smooth as possible.
Automation
Leverage automation tools to streamline the migration process. Manual tasks are prone to errors and can slow down the migration progress.
Training
Ensure that everyone involved receives adequate training to use the cloud services effectively. Proper training will empower them to make the most of the cloud’s capabilities. We did this throughout the process by including our devs in most of the steps, showing them how and what we do, and giving them tasks to perform themselves.
Digression: Pythagoras and cloud migration
Yes, you read right. Pythagoras can help you in your cloud migration process. If you do not believe me, read on (but also if you believe me).
The allure of moving everything to the cloud is tempting, but it’s important to approach the process strategically. List & Shift all applications without proper evaluation can result in replicating the complexities of an on-premises environment in the cloud.
You have to find the balance between perfection and pragmatism. While completely rearchitecting applications for optimal cloud integration might seem appealing, it’s important to balance perfection and practicality. Over-optimizing every aspect can lead to prolonged timelines and excessive costs. Decision models can help here.
Decision models serve as guiding principles throughout the migration process. Effective models are not complex; they simplify complex concepts and aid in decision-making. They can help you evaluate factors such as application criticality, complexity, data dependencies, and potential cost savings.
Choose Your Migration Approach
Applying the model of Gregor Hohpe, which I really like, there are two primary directions to cloud migration: “Migrate” and “Modernize”.
Migrate: This approach involves moving applications and data to the cloud without significant modifications. While it offers quick migration, it may not harness the full benefits of cloud-native capabilities.
Modernize: This strategy involves rearchitecting applications to fully leverage cloud capabilities, abstracting them from hardware details. While more time-intensive, it yields greater long-term benefits.
The best approach often lies in a combination of both modernizing and migrating. This hybrid approach balances efficiency and speed while ensuring the best fit for each workload.
Here, you can see that the first step was to modernize the application, which means the application was changed, so that later on, the many features of the cloud can be used.
After that, the first part of the application was migrated to the cloud, which resulted in a hybrid cloud setup. While running in the hybrid cloud setup, another step to modernize the application was performed, which may include some fine-tuning and adapting to issues that appeared. That finally allowed it to move completely to the cloud.
For one of our applications, the process began with significant rearchitecting, including notable transformations like the adaptation of Spring Boot to use Spring Cloud features. Another big change was implemented after Spring Boot was introduced to our application: the cache and application state were stripped. This led to more frequent database accesses, which increased strain on it, prompting us to reevaluate and optimize our database interactions.
As the migration progressed, the challenge of concurrency across multiple instances emerged, requiring ongoing fine-tuning and adaptation. Throughout the journey, we found ourselves repeatedly revisiting our initial plans as novel obstacles emerged at unexpected turns. Countless rounds of discussions with project leadership were necessary to clarify priorities and ensure alignment.
After these steps, we were able to run in a hybrid cloud setup, where the development environment is in the cloud while the production environment is still on-premise. Currently, we are in the process of adapting the last steps needed to fully go to the cloud. Our steps here are very similar to those in the graphic, and if our plan stands, the production environment migration will follow soon.
Do you already see where Pythagoras comes in handy? No? Then let’s continue.
Migration triangles provide a visual representation of your migration strategy.
Think of cloud migration as a Pythagorean theorem: the hypotenuse is shorter than the sum of the sides. In this analogy, the hypotenuse represents the optimal migration path. You can achieve shorter timelines and cost efficiencies by adopting a combined approach between modernization and migration.
3. Validations: Ensuring a Successful Migration
The validation phase ensures that the migration achieves the desired outcomes and meets predefined success criteria. Here are some key validation aspects:
Environment Validation
Ensure that the cloud environment accurately reflects your organization’s requirements and objectives.
Testing
Conduct rigorous testing to verify that applications and data function correctly in the new cloud environment.
Security
Validate that the migration adheres to robust security measures to protect sensitive data and maintain compliance.
Business Goals Attained
Measure whether the cloud migration has achieved the expected business goals and assess the overall impact on the organization.
For us, post-validation, knowledge sharing also became very important. The exchange of insights and expertise within our team facilitated smoother collaboration and understanding of the intricacies involved. Right now, we operate in a Dev/Prod hybrid setup, where we are still learning and adapting new things, which will then help us go to production.
The journey was brimming with invaluable lessons. We realized the initial steps were only the tip of the iceberg, as the complexities lurking beneath demanded persistent attention and continuous adaptation. The transition taught us the importance of meticulous planning and open communication.
Conclusion
In retrospect, our cloud migration journey wasn’t just about moving applications; it was about embracing a transformative shift. It highlighted the significance of agility, adaptability, and the collective expertise of our team. As we continue refining and optimizing our cloud environment, we remain committed to growth and continuous improvement.
In conclusion, navigating the terrain of cloud migration demands good planning and a comprehensive understanding of its complexities. As you embark on this transformative journey, remember that success hinges on strategic planning and a well-thought-out roadmap.
If you want to share your thoughts or have any questions, feel free to contact me. I am always happy to receive input and will try to answer your questions as well as I can.
Thanks for reading until here, and if you have a cloud migration coming up, I wish you all the best and hope my blog post can help you!