I used to think a multi-cloud solution was a bad idea. In some ways, that's true, but here's why I was wrong.
Migrating to the cloud can be daunting; even architecting cloud solutions can be overwhelming. Consider the growing list of services available from Azure or AWS cloud alone (over 400 services available combined) and the expertise required to understand the nuances of each provider, let alone each service. It's incredibly intimidating; I've been building in the cloud for over ten years, and I learn something new every week.
Usually, architects will pick a single cloud provider and simply use all the services from there exclusively. This is not a bad strategy and is advisable in a lot of cases. You optimize for the most critical parts of your infrastructure to be hosted on the cloud provider where they have a competitive advantage in that domain, for example:
Microsoft for AI, ML, and Hybrid integrations,
AWS for Infrastructure and IoT
GCP for Big data, compute, and storage
*Note: I fully expect people to disagree with my classifications above and that would be a reasonable reaction because it's getting harder and harder to distinguish competitive advantages (more about this in another article).
Microsoft Services
AWS Services
But wait! Here's Why...
Now let me convince you why you should consider a multi-cloud solution in spite of the potential complexities.
I'll give 5 solid reasons:
Reason #1: Complex deployments only require mastery of tools like Pulumi and Terraform to abstract away the complexity. You should want to learn these tools anyway because documenting infrastructure through infrastructure as code is the right thing to do. Once done, automate via GitHub Actions, Chef Recipes, or Azure Pipelines. Take your pick; they all support major clouds.
Reason #2: With reason #1 solving one of the biggest objections, you can finally actually implement a best-in-breed strategy that doesn't limit your options! So go on a cloud shopping spree for the tool that best aligns with your tech roadmap.
Reason #3: With highly commoditized services like VMs and storage, it really boils down to availability zones (aka regions, aka data centers) and cost. Most solutions don't require the biggest, beefiest compute hardware available. Ergo, differentiation below that level is arbitrary and boils down to pricing. So just pick the cheapest and host it within your VPN.
Reason #4: Your developers will LOVE the autonomy to choose what suits them best if they aren't shackled to a single provider; it broadens your hiring pool and smooths learning curves because teams can simply build and play to their strengths. This particularly resonates in teams that are building a microservice architecture.
Reason #5: Each cloud provider has its own flavor of a proprietary data platform. With data virtualization, you are no longer limited to hosting your DB of choice on a VM or choosing one from the provider your resources are deployed to. You can pick the data engine that best aligns with your architecture, which means even a managed DB from a different cloud provider. For example, Azure has Cosmos DB, AWS has DynamoDB and Redshift, and GCP has BigQuery.
Because we live in a world where computing cost is at the forefront of any cloud administrator's top three concerns, it's easy to pick the cheaper option, but the iceberg below the surface is engineering effort to implement, cost to maintain, scalability, and developer experience. These are overlooked and often add more costly than the upfront compute cost. Having optionality through a multi-cloud approach allows you to widen your consideration criteria and truly compare apples to apples without giving one cloud the handicap over another.
Other cloud providers that deserve notable mention: