Rethinking Cloud Strategy: Is Portability and Flexibility Always Beneficial?
In the field of cloud computing, technologies such as Kubernetes and Docker have become the standard for deploying applications.
But the reasons for their widespread use often arouse curiosity. Portability and flexibility are often touted as the main benefits of these platforms.
However, the actual benefits they offer in terms of portability and flexibility should be examined more closely.
Let's look at a scenario that is often described in the context of cloud portability: Moving from Azure to AWS or perhaps to Google Cloud or even a third-party private cloud.
This scenario reminds me of my early days as an apprentice, when I learned about the layered approach to software architecture.
Back then, it was about creating a data layer that could easily switch from one persistence system like MS SQL to another like Postgres, long before ORM (Object-Relational Mapping) tools became mainstream.
I've (probably fortunately) never seen the data access layer switched from one persistence technology to another.
This experience makes me wonder: Is the oft-vaunted portability really beneficial or does it hinder the speed and cost-efficiency of application development?
In my opinion, the ideal approach to the cloud might be the exact opposite of the prevailing wisdom.
Rather than prioritizing portability, which often means being able to switch between cloud providers, I advocate a more focused strategy where portability isn't a deciding factor.
It might be more beneficial to use the specific services and tools that each cloud provider offers, regardless of the possibility of tighter coupling.
But what exactly do we mean by "tighter coupling"?
In the context of cloud services, be it Azure's networking capabilities, AWS's storage solutions or GCP's data analytics tools, each platform inevitably contains proprietary systems.
Furthermore, the portability of your code and its underlying runtime — whether it was written in Java, on the Node.js runtime or in another language — is largely independent of the underlying cloud infrastructure. It's portable!
While the lure of portability and flexibility is undeniable, it's important to critically examine its actual impact on your projects.
The key may be to use the unique strengths of each cloud provider to your advantage, rather than being constrained by the pursuit of universal compatibility.