Merit AC
Guide · infrastructure architecture

Multi-cloud and hybrid cloud architecture

"Multi-cloud" is one of the most overloaded words in infrastructure. It's used to describe a deliberate, expensive, years-long architectural commitment and, in the same conversation, to describe a company that runs everything on one cloud but also has a Snowflake contract and a few Cloudflare zones. Those are not the same thing, and the gap between them is where most of the bad decisions in this space come from. This guide is about telling the two apart, and about hybrid cloud, which is a genuinely different problem with genuinely different reasons to exist.

1. What multi-cloud actually means

Ask a vendor what multi-cloud means and you'll get a picture of workload portability: the same application, running identically on AWS, Azure, and Google Cloud, moved between them at will based on price, capacity, or outage. Ask an engineer who has actually tried to build that and you'll get a much shorter answer: almost nobody does this, because almost nobody needs to, and the ones who claim to usually mean something narrower and more sensible.

What most organizations that call themselves "multi-cloud" actually run is one primary cloud that hosts the large majority of compute, data, and operational tooling, plus opportunistic use of a second cloud for something specific — a data warehouse product that's meaningfully better on one provider, a machine learning platform picked for a particular model or accelerator, a disaster-recovery footprint kept separate from the primary provider for genuine independence, or a piece of infrastructure inherited from an acquisition that nobody has migrated yet because the migration isn't worth the risk. None of that is workload portability. It's one cloud plus satellites, and it's a perfectly reasonable way to run infrastructure — the problem is only that it gets described with the same word as the much more expensive, much more disciplined thing.

The distinction matters because the two have almost opposite cost profiles. "One cloud plus satellites" costs roughly what running each piece independently costs, plus a modest tax for keeping two providers' worth of billing, identity, and networking straight. True workload portability — the same service able to run on either cloud, tested on both, with data replication and failover between them — costs a multiple of running on one cloud, indefinitely, because you're paying to maintain two working versions of most things rather than one. Knowing honestly which one you're building, or which one you're being sold, is the first decision this entire topic turns on.

2. The real reasons to go multi-cloud

There are legitimate reasons to run infrastructure across more than one cloud provider, and they're worth naming precisely because they're specific — none of them is "multi-cloud is more resilient" as a general proposition, which sounds true and mostly isn't, for reasons the next section covers.

Avoiding vendor lock-in is the most commonly cited reason and the one most often invoked vaguely. Stated precisely, it means: if this provider raises prices sharply, deprecates a service you depend on, or has a sustained regional outage, how much would it cost to move, and is that cost acceptable? For a company built entirely on one provider's proprietary services — a specific serverless database, a specific event bus, a specific identity system — the honest answer is often "very expensive, over many months," and that's a real risk worth pricing in even if the company never actually moves. The value of avoiding lock-in isn't that you switch providers; it's that the option to switch keeps the provider's pricing and support honest, and that a catastrophic single-provider failure doesn't take the whole business down with it.

Regulatory and data-residency requirements are the least negotiable reason, because they're not a cost-benefit tradeoff at all — they're a compliance floor. A company operating in multiple jurisdictions with data-localization rules, or serving a public-sector customer with a specific sovereign-cloud requirement, may simply not have the option of keeping everything on one provider's infrastructure in one region. This is the reason most likely to force a genuine multi-cloud architecture on an organization that would otherwise have no interest in the complexity, and it's worth distinguishing early from the "just in case" reasons below, because it changes the calculus from "is this worth it" to "this is a requirement, now minimize its cost."

Best-of-breed service selection is real but narrower than it sounds. It is genuinely true that different providers lead in different areas at different times — one might have a stronger managed data warehouse, another a stronger managed Kubernetes offering, another better proximity to a particular accelerator generation. Picking up a second provider for one clearly superior service, while keeping the operational core on the primary provider, is a targeted and often defensible move. It stops being defensible when it's used to justify spreading a dozen services across three providers because each one was "the best" for its narrow purpose at the time it was chosen — that's not best-of-breed, that's an unmanaged sprawl of one-off decisions that nobody added up.

Negotiating leverage is the reason procurement teams like most and engineers underrate. A credible ability to run meaningful workload on a second provider — not a slide deck, an actual running footprint — changes the conversation in a contract renewal. This is a real benefit, but it's worth being honest that it's a business benefit paid for with ongoing engineering cost, not a free byproduct of good architecture. If the negotiating leverage is the only reason on the list, it's worth pricing that leverage against the tax described next before assuming it's worth it.

3. The real costs

The costs of multi-cloud are less visible than the reasons for it, because they show up as ongoing operational drag rather than a line item, and they compound in ways that are easy to underestimate from a whiteboard.

Operational complexity doesn't add, it multiplies. Running one cloud well means one identity and access model, one network topology, one monitoring and alerting stack, one set of deployment pipelines, one incident-response runbook per category of failure. Adding a second cloud doesn't mean doubling that list — it means maintaining two versions of most of it, plus a layer of translation between them (how does an incident that spans both get correlated? whose on-call owns it?), plus the failure modes that only exist at the seam — a DNS or networking misconfiguration between the two environments that neither provider's tooling will surface, because it's not really either provider's problem to surface.

The lowest-common-denominator problem is the subtlest cost and the one most likely to surprise a team mid-project. The moment a piece of infrastructure genuinely needs to run on either cloud, it can only use the features available on both — which usually means neither cloud's more advanced, proprietary services, since those are exactly the features that don't exist on the other provider. A team that adopts Kubernetes specifically to stay portable across clouds will, almost immediately, feel the pull to also adopt a managed queue, a managed database, or a managed secrets service that's genuinely better than what they're running themselves inside the cluster — and every one of those adoptions quietly breaks the portability they built Kubernetes to preserve. Multi-cloud doesn't just cost engineering time; it costs access to the parts of each cloud that were the actual reason to be there.

Network egress between clouds is a cost that's easy to model in a spreadsheet and easy to forget in practice, because it only shows up once data actually starts moving. Cross-cloud traffic — replicating a database between providers, or a workload on one cloud regularly reading data that lives on another — is billed as egress by the provider the data leaves, at rates that are usually far higher than intra-cloud transfer. An architecture that looks clean on a diagram can turn out to move enough data across that boundary, continuously, that egress becomes one of the largest line items in the infrastructure budget — not because anyone made a mistake, but because nobody modeled the steady-state data flow before committing to the split.

Duplicated tooling and skill requirements are the cost that shows up in headcount and hiring rather than a bill. Two clouds means two sets of provider-specific expertise to hire, train, and retain — an engineer fluent in one provider's IAM model and networking primitives is not automatically fluent in another's, and the differences are exactly subtle enough to cause real incidents (a security group that behaves one way on one provider and a semantically similar but not identical construct on the other). It also means twice the surface area for infrastructure-as-code modules, twice the CI/CD integration work, and twice the vendor relationships to manage — support contracts, compliance paperwork, security reviews — each of which is small on its own and adds up to a standing tax on every team that touches infrastructure.

The honest framing: multi-cloud doesn't remove risk, it trades one category of risk (single-vendor dependency) for another (operational complexity, integration surface, and reduced ability to use any one provider's best features). Whether that trade is worth it depends entirely on how much the first risk actually costs your organization — and for most organizations below a certain scale, it doesn't cost much yet.

4. Hybrid cloud, specifically

Hybrid cloud — some combination of on-premises or privately operated infrastructure alongside public cloud — gets lumped in with multi-cloud in casual conversation, but it's a different problem with different, often more concrete, justifications. Where multi-cloud is usually a choice between comparable options, hybrid cloud is more often a response to a constraint that doesn't have a clean public-cloud answer.

Data gravity is the most common honest reason. Some data genuinely resists moving — not because moving it is technically impossible, but because the data volume, the systems that depend on low-latency access to it, and the cost of a one-time migration make relocation a multi-year, high-risk project rather than a weekend job. A manufacturing company with decades of sensor data feeding real-time control systems on a factory floor, or a financial institution with a trading system whose latency budget is measured in microseconds relative to a specific exchange's data center, has a genuine reason to keep that data and the systems built around it where they are, while running everything newer — analytics, customer-facing applications, anything without that specific gravity — in public cloud.

Legacy systems with real migration cost are the second honest reason, and the key word is "real." Every organization has some system that's inconvenient to migrate; the question worth asking is whether the migration cost is actually large relative to the ongoing cost of not migrating, or whether "it's legacy, we can't touch it" has become a permanent excuse that outlived the reason behind it. A mainframe-based core banking system with regulatory certifications tied to its exact current configuration is a real migration cost. A ten-year-old application that nobody wants to spend a quarter modernizing, sitting on hardware that's increasingly hard to get parts for, is a deferred decision wearing the same justification.

Regulatory data-residency requirements apply here too, and for the same structural reason they applied to multi-cloud: some jurisdictions and some customer contracts require data to remain on infrastructure the organization controls directly, or within a specific legal and physical boundary that a public cloud region may not satisfy on its own. Hybrid cloud is often the practical answer — public cloud for everything unconstrained, private infrastructure for the specific dataset the requirement actually covers, rather than pulling the entire estate back on-premises to satisfy a rule that only applies to part of it.

What hybrid cloud is not a good reason for is a general discomfort with public cloud economics or an unresolved preference for owning hardware. Those are real considerations, but they're cost and control tradeoffs to model explicitly — capital versus operating expenditure, the engineering cost of running infrastructure yourself versus paying a provider to do it — not justifications that stand on their own the way data gravity and regulatory residency do.

5. The abstraction-layer tradeoff

The standard technical answer to lock-in concerns is an abstraction layer: run everything on Kubernetes so the compute layer looks the same regardless of which cloud it sits on, manage infrastructure with Terraform so the provisioning code is portable across providers, and treat the specific cloud underneath as a swappable implementation detail. This works, as far as it goes, and it's worth using even for organizations that have no near-term multi-cloud plans, because it also improves discipline and reproducibility on a single cloud. But it's a real tradeoff, not a free abstraction, and the cost side deserves equal billing.

Kubernetes abstracts compute scheduling, not the services around it. Two clusters on two different clouds can run the same container images and the same manifests, but the moment either cluster needs a database, a queue, an object store, or an identity integration, the abstraction runs out — and the natural next step, self-hosting those pieces inside the cluster to preserve portability, means giving up the operational benefits (automatic patching, built-in high availability, integrated monitoring, provider-managed backups) that were a large part of the reason to use a managed cloud service in the first place. Every managed service you decline to use for the sake of portability is a piece of undifferentiated operational work your own team now owns instead.

Portable, thin:                         Cloud-native, deep:
- Compute on Kubernetes                  - Compute on managed serverless/containers
- App config in Helm/Kustomize           - Managed database with built-in HA, backups
- Self-run Postgres/Redis in-cluster     - Managed queue/event bus, scales to zero
- CI/CD targets any cluster              - Provider-native identity & secrets

Costs: your team runs DB HA, backups,    Costs: services differ (or don't exist)
patching, scaling by hand                 on another provider — migration harder
Gains: same deploy story on any cloud     Gains: less to build and operate yourself

Terraform's portability has the same shape of limit. Terraform's provider model means the syntax for describing infrastructure is consistent across clouds, but the actual resources it describes are not interchangeable — an AWS-specific module and an Azure-specific module for "a managed database" still have to be written, tested, and maintained separately, and Terraform doesn't make a resource that exists on one provider and not the other appear on both. What it does provide is a consistent operational workflow — the same plan/apply discipline, the same state management, the same review process — across whatever mix of providers you run, which is a genuine and durable benefit even when the underlying resources aren't portable at all.

The practical resolution most teams land on, and a reasonable default, is to use the abstraction layer for the workflow and operational consistency it provides, while accepting that full workload portability isn't actually the goal for most of the estate. Use Kubernetes because it's a good way to run compute, not because it guarantees a same-day migration to another cloud. Use Terraform because declarative, reviewable infrastructure is better than console clicking, not because it makes the underlying resources provider-agnostic. Reserve genuine multi-cloud-portable design — dual-provider testing, replicated data, tested failover — for the specific systems where section 2's reasons actually apply, and let everything else use each cloud natively.

6. A worked example

Consider a mid-sized company running a customer-facing SaaS product with a fairly typical shape: a web application, an API layer, a relational database, a queue for background jobs, and a data warehouse for internal analytics. Is this a good multi-cloud candidate?

Almost certainly not, for the core application. The web app, API, database, and queue form a tightly coupled system with meaningful internal traffic — the API talks to the database on nearly every request, the queue feeds background workers that also touch the database, and latency between those pieces matters to the product's own performance. Splitting this core across two clouds means paying cross-cloud egress and added latency on the traffic that matters most, for a portability benefit — being able to fail over the whole application to another provider — that this company almost certainly doesn't need urgently enough to justify running two full working copies of its core stack indefinitely. This is the textbook case for "pick one cloud, use it natively, and get very good at running on it."

The data warehouse is a better multi-cloud candidate, and for reasons that map directly onto section 2. Analytics workloads typically have looser latency requirements than the live application — a report or dashboard query being a few hundred milliseconds slower because data has to move between clouds is rarely noticed, unlike the same delay on a customer-facing API call. If a specific data warehouse product on a second provider is meaningfully better suited to this company's analytics workload — a genuinely superior query engine, better integration with a specific BI tool the company standardized on — then running that one piece on a second cloud, with a defined, monitored data pipeline feeding it from the primary cloud, is a targeted best-of-breed decision with a bounded blast radius: if that pipeline breaks, analytics is stale, not the customer-facing product.

The distinction the example is meant to draw out: multi-cloud suitability isn't a property of the company, it's a property of the individual workload — its coupling to other systems, its latency sensitivity, and how much a second provider's specific service actually improves on the primary provider's equivalent. A company can correctly run one core application on a single cloud while also correctly running one analytics pipeline across two, and both of those are the right call at the same time.

7. Decision framework

The question worth asking before any multi-cloud or hybrid commitment isn't "should we be multi-cloud" as a philosophy — it's a specific, narrower question for each workload under consideration: does one of the real reasons in section 2 or section 4 apply here, concretely and today, or is this decision being made because a Fortune 500 company's conference talk made multi-cloud sound like table stakes for anyone serious about infrastructure?

A few honest checks help separate the two. If the justification is "avoiding lock-in" — can you name the specific proprietary service the lock-in risk is about, and would the cost of migrating away from it, if it ever became necessary, actually exceed the ongoing cost of running two providers to keep that option open? If the justification is regulatory, is there an actual cited requirement, in a contract or a regulation, naming this data or workload — or is it a general sense that residency "might become an issue"? If the justification is best-of-breed, is there one clearly superior service worth adopting on its own, or is this the first domino in an unplanned spread across providers, each individually reasonable and collectively unmanageable? If the justification is negotiating leverage, has anyone actually estimated what that leverage is worth against the ongoing operational tax, or is it assumed to be free?

Scale changes the answer more than most other factors. A large enterprise with dedicated platform teams, existing expertise across multiple providers, and a security or compliance function that already has to reason about multi-provider risk can absorb the operational tax of genuine multi-cloud in a way that a fifty-person engineering org cannot. For a smaller organization, the standing cost of maintaining two providers' worth of tooling, identity, and on-call expertise routinely exceeds the entire benefit being sought — the negotiating leverage, the lock-in insurance — and the honest recommendation is almost always to go deep on one cloud, use its native services fully, and revisit the question only when a specific, concrete reason from section 2 or 4 actually arrives, rather than provisioning for a risk that hasn't shown up yet.

Quick self-check

  • Can you name the specific service or system driving the lock-in concern, not "lock-in" generally?
  • Is there a named regulation or contract clause requiring residency, or just a hunch it might matter later?
  • Does the workload have low internal coupling and tolerance for added cross-cloud latency?
  • Have you priced cross-cloud egress for the workload's actual steady-state traffic, not just its peak?
  • Do you already have — or are you willing to hire and retain — deep expertise on a second provider?
  • Would this decision survive being described honestly as "more operational cost, for this specific benefit"?

None of this is an argument against multi-cloud or hybrid cloud — both are the right architecture for specific, nameable reasons, and this guide has tried to be precise about what those reasons actually are. The argument is against adopting either one by default, on the assumption that more providers is inherently safer or more sophisticated. It usually isn't. It's usually just more expensive, and the expense is worth paying only when a concrete reason, not a general anxiety about dependency, is the thing paying for it.