Multi-Cloud Is a Tax, Not a Strategy
“We need a multi-cloud strategy to avoid vendor lock-in.”
This sentence has launched more expensive infrastructure projects than any other in enterprise technology. And in most cases, it’s wrong — not because vendor lock-in isn’t a real concern, but because the multi-cloud cure is typically more expensive and damaging than the disease.
Multi-cloud isn’t a strategy. It’s a reaction to a fear. And that fear — vendor lock-in — is usually less expensive than the complexity, talent, and operational overhead required to operate across multiple cloud providers simultaneously.
The Case Against Multi-Cloud
The Complexity Tax
Running one cloud well is hard. Running two clouds well requires duplicating everything — and doing a mediocre job at both:
- Two sets of IAM policies with fundamentally different authorization models (AWS’s policy-based vs. Azure’s role-based vs. GCP’s hierarchical)
- Two networking architectures with different primitives, different VPC models, and different connectivity options
- Two monitoring and observability stacks — or a third abstraction layer that monitors both but misses provider-specific insights
- Two deployment pipelines with different tooling, different artifact registries, and different deployment paradigms
- Two cost models that calculate differently (AWS’s per-hour vs. Azure’s per-minute vs. GCP’s sustained-use discounts)
- Two security postures with different compliance certifications, different encryption models, and different audit trails
- Two support relationships with different escalation paths, different SLA structures, and different account teams
Every engineer now needs to understand two cloud primitives for the same function. S3 and Cloud Storage. Lambda and Cloud Functions. RDS and Cloud SQL. DynamoDB and Cosmos DB. The cognitive overhead compounds across every architectural decision, every operational procedure, and every incident response.
A team that is excellent at AWS can make rapid, confident decisions about networking, security, and scaling because they understand the platform deeply. A team that is adequate at AWS and adequate at Azure makes cautious, slow decisions about everything because they’re never quite sure whether the mental model from one cloud applies to the other.
The Abstraction Trap
“We’ll use Kubernetes/Terraform/Crossplane to abstract away the cloud differences!”
Congratulations, you’ve replaced cloud vendor lock-in with tooling lock-in. And the tooling abstraction layer covers about 70% of what each cloud offers — the commodity compute, storage, and networking primitives that are similar across providers.
The remaining 30% — the managed services that provide the most competitive advantage — can’t be abstracted because they’re fundamentally different between providers. AWS Lambda, Azure Functions, and Google Cloud Run solve similar problems in architecturally different ways. Snowflake on AWS and Snowflake on GCP use the same SQL but different underlying storage and networking. BigQuery has no direct equivalent on AWS; SageMaker has no direct equivalent on GCP.
You end up using the lowest common denominator of both clouds, which means you’re getting the capabilities of neither. The managed services that would save you the most engineering time — the services that are the entire point of choosing a cloud platform — are the ones you can’t use because they’d create provider dependency.
This is like buying a sports car and then driving it in first gear because you want to be able to easily switch to a sedan. You’ve paid for performance you’re not allowed to use.
The Talent Problem
Finding engineers who are truly excellent at AWS is hard. They understand not just the service catalog but the edge cases — how VPC peering behaves under specific conditions, how to optimize DynamoDB partition keys for their specific access patterns, how to structure IAM policies that are both secure and maintainable.
Finding engineers who are equally excellent at AWS and GCP is nearly impossible. Deep platform expertise takes years to develop through hands-on production experience. An engineer who has spent five years mastering AWS has not also spent five years mastering Azure.
In practice, multi-cloud means one of two outcomes:
Siloed expertise: You hire AWS people and Azure people and assign them to cloud-specific workloads. They collaborate poorly because their mental models are different. Cross-cloud architectural decisions become political negotiations between the two camps.
Shallow generalists: You hire engineers who are broadly familiar with both platforms but deeply expert in neither. They make reasonable decisions but miss the optimization opportunities, security hardening, and cost savings that come from deep platform knowledge.
The Cost Multiplication
Multi-cloud doesn’t just add complexity — it adds direct costs. Data transfer between clouds is expensive. Running redundant services on two platforms is expensive. Maintaining two sets of reserved instances or committed-use discounts is expensive. The “risk mitigation” of multi-cloud often costs more than the vendor price increase it’s trying to avoid.
A common scenario: the company runs 80% of workloads on AWS and 20% on GCP “for portability.” The 20% GCP footprint doesn’t get volume discounts, doesn’t benefit from reserved instance pricing, requires separate tooling and monitoring, and generates egress charges for data that flows between the two clouds. The “insurance policy” adds 15-25% to total infrastructure cost.
When Multi-Cloud Is Actually Justified
There are legitimate scenarios where multi-cloud makes sense. They’re rarer than most executives believe:
Regulatory requirements. Some industries and geographies mandate that specific workloads run on specific providers or in specific sovereign regions that a single provider can’t serve. Data residency requirements in certain EU countries may require a local cloud provider in addition to a hyperscaler.
Acquisition integration. Company A runs AWS. They acquire Company B, which runs Azure. Forcing an immediate consolidation would be more disruptive than running both temporarily. The key word is “temporarily” — plan the migration, set a deadline, and execute it. Don’t accept permanent multi-cloud as the end state.
Best-of-breed for genuinely different workloads. Running your main application on AWS while using GCP’s BigQuery for analytics is a defensible choice. You’re not running the same workload on two clouds — you’re using each cloud for what it does best. This isn’t multi-cloud in the strategic sense; it’s pragmatic tool selection.
Genuine leverage negotiation. If you have the engineering capacity to credibly migrate, maintaining a small proof-of-concept on an alternative cloud gives you leverage in pricing negotiations. This requires the capability to actually execute the migration — a PowerPoint slide showing a theoretical migration path is not leverage.
The Real Risk: Understanding Switching Costs
Vendor lock-in fear is usually about switching costs. But switching costs exist in every technology decision. You’re locked into your programming language, your database, your framework, your architecture patterns, your organizational structure. Cloud is just one more.
The question isn’t “can we avoid switching costs?” The question is “are the switching costs worth the benefits of going deep on one platform?”
For most organizations, the answer is yes. Going deep on AWS (or Azure, or GCP) means you can:
- Use managed services that eliminate operational overhead and reduce engineering staffing needs
- Optimize costs aggressively using provider-specific discount programs and architectural patterns
- Hire specialized talent who can work effectively from day one instead of spending months learning a new platform
- Move faster because decisions don’t require evaluating how they work on two platforms
- Build deeper security because your team understands every control, every configuration, and every edge case
That speed and depth advantage compounds over years. The multi-cloud alternative — being adequate at two platforms — compounds too, but in the wrong direction: increasing complexity, increasing cost, and increasing technical debt.
The Decision Framework
If you’re choosing your first cloud: Pick one. Go deep. AWS, Azure, or GCP — the choice matters less than the depth of commitment. Choose based on your existing talent, your vendor relationships, and the managed services that matter most for your workload.
If you’re already multi-cloud by accident: Assess whether the cost and complexity are justified. If not, plan a consolidation. If regulatory or technical requirements genuinely prevent consolidation, invest in the abstraction and tooling that makes multi-cloud operation sustainable — but recognize the ongoing cost.
If someone is proposing multi-cloud for “risk mitigation”: Ask them to quantify the cost of the risk versus the cost of the mitigation. In most cases, the annual cost of running multi-cloud infrastructure exceeds the one-time cost of migrating between providers if you ever actually needed to.
The Garnet Grid perspective: Cloud strategy should be driven by business requirements, not fear. We help organizations make clear-eyed cloud platform decisions and build cloud architectures that maximize the value of their chosen provider. Explore our cloud migration assessment →