The multi-cloud tax, and how to stop paying it
A second cloud can cut your bill or quietly double it. Here's how data-transfer fees, workload placement and day-to-day cost habits decide which one you get.
part 2 of 8 · Cloud calls you'll have to makethe ideaRun each job next to its data. Price every crossing between clouds.
after reading, you can- Before you sign for a second cloud, list every data path that would cross over and price each one at twelve months of production volume.
- Explain data gravity, then write down where each workload lives, why, and what leaving would cost.
- Spot when a baseline gets split across two clouds, and why that quietly weakens your discounts on both.
The multi-cloud pitch is always about bargaining power. Resilience and best-of-breed services come up too. What never comes up is the question that decides whether you get any of it. For each workload, what does it cost to run here, and what does it cost to leave? Answer that per workload, in numbers, and the second cloud is a tool. Skip it and it's a tax.
Running on two clouds costs extra every time data crosses between them
Multi-cloud means running your systems on more than one cloud provider, say AWS for most things and Google Cloud or Azure for a few. Each provider lets you bring data in for free and charges you by the gigabyte when it leaves. So when an app on one cloud keeps reading data stored on the other, you pay a small fee on every trip, and those trips happen thousands of times a day. Nobody sends you a separate invoice for it. It just shows up as a bigger cloud bill each month, and it grows as the business grows. The fix is mostly planning: decide where each system lives, keep it close to its data, and know what it would cost to move it.
Picture two storage units from rival companies. Moving boxes in is free, but each company charges per box that leaves. Keep your tools in one unit and your materials in the other, and you pay every time you carry something across. Keep each job in the unit that already holds its boxes, and you only pay the day you actually move out.
- Owners weighing a second cloud provider
- Finance teams watching the cloud bill
- CIOs and IT leaders setting cloud strategy
- Platform and cloud engineering teams
- Companies merging two cloud estates
Why it matters to you
We call it a tax because it acts like one. It's charged every time data moves, and it grows quietly until nobody remembers agreeing to it. Usually the second cloud got approved for a good reason, like a service the main provider doesn't have. Then the bill comes in higher than anyone planned, and nobody can say which line grew.
The free allowance sounds generous until you put it next to a data warehouse that replicates nightly. A busy system can pass that in a day. After that every gigabyte is billed, and the meter keeps running for as long as the system runs.
-
01 List the data paths
Write down every flow that would cross between clouds. Replication, image pulls, backups and monitoring agents all count, since each one moves data out.
-
02 Price them at real volume
Put a cost on each crossing at twelve months of production volume. You may find a few paths that nobody priced when the diagram was drawn.
-
03 Place compute next to data
Run each workload on the cloud that already holds the data it reads. Compute moves easily and big datasets don't, so this usually removes the crossing.
-
04 Write down home, reason and exit cost
Each workload gets a stated home and a reason for it. It also gets the cost of leaving, meaning the engineering effort plus the bill to move its data out.
-
05 Put cost in front of the team
Tag resources, send each team its own costs and alert on spikes within a day. Then the team that caused a jump hears about it while it can still act.
-
06 Plan discounts per cloud
Forecast the steady baseline on each provider and buy discounts against it. Review coverage monthly so a split baseline doesn't leave both clouds on full price.
Egress is the tax collector, so map it before you sign anything
EgressdefinitionData leaving a cloud provider's network. Getting data in is free. Getting it out is billed by the gigabyte. pricing is how cloud lock-in gets enforced. Data comes in free and goes out at roughly $0.08–0.12 per GB at list price, and inter-region or cross-cloud transit charges stack on top of that. Split a chatty system across two providers and you pay that toll on each request, each replication cycle and each backup, for as long as it runs. We keep seeing the same cause. Someone drew the architecture diagram by service preference, and nobody priced it.
Before adopting a second cloud, trace the data paths that would cross the boundary and price them at twelve months of production volume. Cross-cloud replication for a warehouse, image pulls from a registry on the other side, observability agents shipping telemetry home: each is a recurring line item that scales with success. Some crossings are worth it. Most were never examined.
Place each workload next to its data
The cheapest place to run a workload is almost always next to the data it reads. That's data gravitydefinitionThe pull a big dataset has on the apps that use it. In practice it's usually far cheaper to bring the compute to the data than the other way around., and it should drive placement, because compute moves easily and petabytes don't. A sound multi-cloud setup is lopsided on purpose. One primary cloud holds the center of gravity. A short, deliberate list of workloads earns a place elsewhere, say a managed service with no real equivalent, a sovereignty requirement, or a resilience tier with a real failover runbook.
Write the placement rule down as policy so it doesn't depend on someone's memory. Each workload gets a home and a reason for being there. It also gets an exit costdefinitionWhat it would actually take to move a workload off its current cloud: the engineering effort plus the egress bill for getting its data out., which is the engineering effort plus the egress bill to move its data out. Workloads that are cheap to leave are where the real negotiating power sits. The expensive ones are commitments and should be priced that way. When someone says "we could move it if we had to," that's a claim. The exit-cost line is the evidence, and you'll want it at the next renewal.
The cheapest cloud for a workload is usually the one already holding its data.
# every workload declares its home and its exit workload: order-analytics home: primary-cloud / eu-west // co-located with lakehouse cross-cloud paths: 2 detected → 0 after co-location exit-cost: priced · reviewed quarterly ✓ justified · ✓ egress mapped · ✓ owner named
FinOps belongs in the engineering loop
A cost report nobody can act on is observability theater. FinOpsdefinitionTreating cloud spend as an engineering problem. Resources get tagged, costs land with the team that owns them, and someone acts on them while the numbers are still fresh. works when cost sits in the engineering loop the way latency does. Tag it at the resource, allocate it to the team that owns it, and express it as unit economicsdefinitionSpend divided by a unit of work, per tenant, per pipeline run or per thousand requests, so a team can see what drives it. such as cost per tenant, per pipeline run or per thousand requests. Alert on anomalies within a day instead of finding them at month-end. Multi-cloud makes this harder because each provider bills in its own schema. Without a normalization layer you can't even compare the numbers, let alone act on them.
Commitment management is where the discipline saves real money or wastes it. Reserved instances, savings plans or committed-use discountsdefinitionYou promise the provider a steady amount of usage for a set term, and it cuts the price. Reserved instances and savings plans work much the same way. Move the work elsewhere and you still pay for what you promised., they all assume a stable baseline on one provider. Split that baseline across two clouds without re-modeling coverage and you'll be under-committed on both while running more on-demand than either. Treat coverage like capacity planning. Forecast it per cloud and review it monthly. Use the placement policy to set where the baseline sits, instead of the sales cycle. Do that and the second cloud remains what it was meant to be, a source of negotiating power.
What changed: leaving got cheaper, staying split didn't
Exit fees have come down, partly under pressure from European rules. That helps the exit-cost line in your placement policy. It does much less for a system that runs on two clouds every day, because those crossings still get billed.
Rules and offers that change the exit cost
- Mar 5, 2024AWS waives data transfer out for customers leaving
If you're moving everything off AWS, or off one service, ask AWS Support to waive the transfer-out fees. Under the current terms, customers outside the EU get 180 days to finish, so plan the move before you ask.
- Sep 12, 2025EU Data Act limits egress fees for parallel use
Run two clouds side by side and a provider can't charge more for egress than the transfer costs it. For EU customers, replication jobs may get cheaper. They still don't go free.
- Jan 12, 2027EU Data Act ends all switching charges
- Workloads land wherever a team liked the services
- Chatty systems get split across providers, so every request pays egress
- Nobody knows what it would cost to leave, so "we could move it" is a guess
- The cost report arrives at month-end, after the money is spent
- Finance bought savings plans for one cloud. A year later half the baseline runs on the other one at full price
- One primary cloud holds the data. The few exceptions each have a written reason
- Each workload runs next to the data it reads
- Every exit cost priced, re-checked quarterly
- Teams see their own unit costs and hear about spikes within a day
- Commitments get forecast per cloud every month. Discounts follow what actually runs
Read the exit offers carefully. AWS's waiver covers moving off AWS. Ongoing transfers fall under the normal allowance. So a nightly replication job between two clouds keeps paying. The EU parallel-use rule caps those fees at cost. It doesn't make them free.
What to do now
What to do now, by who you are
- Ask for the cross-cloud data paths and their twelve-month cost before you approve a second provider. If nobody has it, the decision isn't ready.
- Ask what each important system would cost to move. A number on paper is what gives you leverage in the next renewal.
- Agree which cloud is the primary one. Everything else should need a written reason.
- Pull data transfer out as its own line on each provider's bill. Then you can see whether it's growing faster than the business.
- Check discount coverage on each cloud separately. Low coverage on both usually means the baseline got split.
- Ask for unit costs per customer or per transaction, so a rising bill can be traced to what drives it.
- Map every flow that crosses between clouds, including image pulls, backups and monitoring agents.
- Move the worst offenders next to their data. Usually that means moving the compute, since the data is too big to move.
- Write the placement policy and give each workload a named owner. For every one, note its home, why it's there and what leaving would cost.
- Tag new resources when you create them. Untagged spend can't be sent to anyone, so nobody fixes it.
- Watch your own unit cost the way you watch latency. When it jumps after a release, look at that release first.
Harden so the next one hurts less
Habits that keep the tax off your bill
- 01Make the placement policy part of the review
New workloads don't get built until they have a home, a reason and an exit cost. Put it in the architecture review checklist so nobody has to remember.
- 02Block untagged resources
Have the deployment pipeline refuse resources without an owner and cost tags. It's annoying for a week. After that, every dollar on the bill has a team behind it.
- 03Normalize the bills from each provider
Each cloud bills in its own format. Load them into one schema so you can compare a workload on one provider with the same workload on the other.
- 04Alert on anomalies within a day
Set daily anomaly alerts on spend per team and on data transfer out. A runaway replication job caught on day one costs a day. Caught at month-end it costs a month.
- 05Review commitments monthly, per cloud
Forecast the steady baseline on each provider and compare it with what you've committed to. Buy or let commitments lapse based on the placement policy, not on where the sales cycle happens to be.
- 06Re-price exit costs every quarter
Data grows, so the cost of leaving grows too. Re-run the numbers quarterly, and plan around the EU rule change if your company buys cloud services in the EU.
- 07Test the failover you're paying for
If a workload sits on a second cloud for resilience, run the failover runbook on a schedule. A resilience tier that has never failed over is just a second bill.
If the costs or outages pile up
If the costs or outages pile up
Maybe the bill jumped and nobody can explain it, or an audit found spend with no owner, or a failover didn't work when you needed it. Work through these in order. Cutting things before you know what they do usually causes an outage of its own.
- 01Stop the bleedingfirst week
- Find the biggest data transfer out lines on each provider's bill. Then track down the system behind each one, because nobody fixes a line they can't name.
- Pause or slow anything that isn't needed daily, like a test copy replicating every hour. Ask the owner first, then change it in a planned window.
- 02Find the crossingsfirst month
- Map every flow between clouds and price it at current volume. Sort by cost, because often a handful of flows drive most of it.
- Check discount coverage per cloud and mark where the baseline moved without the commitments following it.
- 03Re-place and repairthis quarter
- Move the costliest workloads next to their data, one at a time, with a rollback plan for each.
- Fix the failover runbook if it failed. Then run it again in a test, so you know it works before the next outage.
- 04Re-model commitmentsnext renewal
- Size commitments to the new baseline on each cloud. Don't renew on last year's numbers.
- If you're leaving a provider, ask about its exit waiver before you start moving data.
- 05Report and learnafter the fix
- Show finance and leadership what changed and what it saves per month. They fund the next fix faster once they've seen the numbers.
- Add the gap you found to the architecture review, so the next workload can't repeat it.
How this tends to play out
How this tends to play out
- the setup
- A software company keeps its data warehouse on cloud A. The analytics team liked cloud B's tools, so their jobs run there and query the warehouse across the boundary.
- what happens
- Every query and every refresh pulls data out of cloud A. The transfer line grows each month with the customer base, and nobody connects it to the analytics jobs until finance asks.
- what to do
- Move the analytics jobs to cloud A, next to the warehouse. If cloud B's tools really matter, price that crossing at twelve months of volume and decide with the number in front of you.
- the setup
- After an acquisition, a manufacturer runs on two providers. Each side kept its own savings plans, and workloads have been moving between them for a year.
- what happens
- The steady baseline is now split. Coverage is low on both clouds, more runs at full on-demand price, and the commitments bought before the merger don't match what either side runs today.
- what to do
- Pick the primary cloud and write the placement policy. Forecast the baseline on each side, then size the next commitments to it and let the rest lapse.
- the setup
- A regional bank runs almost everything on one primary cloud. One workload sits on a second provider because of a data residency requirement, and it's written down with a reason and an exit cost.
- what happens
- The workload reads its own data on the second cloud and only sends small summaries back. Almost nothing crosses over, so the egress bill stays tiny.
- what to do
- Keep the exception on the list and re-price its exit cost each quarter. If a new feature starts pulling data across, it goes back through the architecture review first.
Our cloud strategy work starts with that placement map. We list each workload, the data it reads and the paths that cross between clouds, and we price the exit before anything moves. Our cloud strategy page explains how an engagement runs, or you can start with an assessment.
What to take from this
- 01
Price every cross-cloud data path at twelve months of production volume before you commit to it.
- 02
Let data gravity set placement: one center of gravity, plus a short list of workloads that earn an exception, each with a written exit cost.
- 03
Put cost in the engineering loop. Each team sees its own unit economics and hears about anomalies within a day, and commitment coverage gets modeled per cloud.
- 04
Exit waivers and the EU Data Act make leaving cheaper. They don't make running split across two clouds free.
01Is multi-cloud a bad idea?
No. It gets expensive when it happens by accident. A second cloud makes sense for a service the main provider doesn't offer, a data residency rule or a failover someone actually tests. Write each exception down with its reason and exit cost, and you'll know what it costs before the bill tells you.
02How do I know if we're already paying the tax?
Look at the data transfer out lines on each provider's bill. If they're growing faster than the business, or nobody can name the system behind the biggest one, something is crossing between clouds that nobody priced. Your cloud team can often find the top few flows in a week.
03Don't the free exit offers solve this?
Only for the day you leave. AWS waives data transfer out when you move all your data off AWS or off one service, and you ask AWS Support for it. Day-to-day transfers between two clouds still get billed. In the EU, the Data Act caps parallel-use egress fees at cost, which helps but doesn't make them free.
04We buy cloud services in the EU. Does the Data Act change what we pay to leave?
Yes. From January 12, 2027, a provider can't charge you for switching to someone else. Until then it can only pass on costs tied directly to the switch, wherever the provider is based, as long as it sells to customers in the EU. Ask your account team what they'd charge you today, then re-price the exit cost of those workloads before you renew.
Three questions, about a minute
Pick an answer and we'll tell you if it's right, and why it is or isn't. The score stays in this browser.
-
Q1Your analytics job runs on cloud B. Its warehouse is on cloud A. Every query pays egress. What would you change first?
show the answer
B. Move the job to cloud A, next to its data Compute can move and petabytes can't. Put the job next to the data it reads and the cross-cloud path disappears, along with the egress it was paying on each request.
-
Q2Leadership says, "We could move this workload if we had to." Fine. What evidence does the post say should be sitting behind that sentence?
show the answer
A. A written exit cost: engineering effort plus egress to move the data The post calls that sentence a claim. The exit-cost line is the evidence. If the exit cost is low, you really can negotiate. If it's high, you've made a commitment, so price it like one.
-
Q3A company splits its steady baseline across two clouds and nobody re-models the commitments. What happens?
show the answer
C. Coverage drops on both, so more runs on-demand All three, reserved instances, savings plans and committed-use discounts, assume a stable baseline on one provider. Split that baseline and, as the post warns, you'll be under-committed on both while running more on-demand.