Most growing businesses do not have a hosting strategy. They have hosting history — a server bought in a good year, a cloud account that started as one virtual machine and quietly became forty. So when the cloud invoice starts climbing faster than the business, the instinct is to assume the cloud is simply expensive. It usually is not. The bill is climbing because of how the move was done, and the good news in that sentence is that the same thing that caused it can be undone.
Why the bill balloons
The single most common cause is the “lift-and-shift” migration: taking each on-premises server and recreating it in the cloud, one for one. It is fast and low-risk to do, which is exactly why it is so common — and it carries every inefficiency across with it. On your own hardware, an over-sized, mostly-idle server is a sunk cost you have already paid for. In the cloud, that same idle capacity becomes an active, recurring charge, billed by the hour, month after month. As one analysis puts it, “you aren’t paying for what you use — you’re paying for what you provisioned”.
Once you know the shape, you can see where the money actually leaks:
- Over-provisioned machines — virtual servers running at 10–20% utilisation for most of the day, sized for a peak that lasts an hour.
- Non-production environments — development and staging copies left running around the clock at full production cost, including overnight and at weekends when nobody is using them.
- Orphaned storage and forgotten backups — disks and snapshots from projects that ended, quietly accruing charges that nobody is watching.
- Data-transfer (egress) fees — the cost of moving data out of the cloud, which almost never appears in the original business case and surprises people every time.
This is not an edge case; it is the industry norm. Flexera’s State of the Cloud research has organisations estimating that around 27% of cloud spend is wasted, with the more recent figure ticking back up towards 29% after years of slow improvement. The encouraging corollary is that the waste is not just large, it is recoverable — structured optimisation typically claws back a meaningful share, often in the region of 20–40%, within about 90 days. You are not stuck with the bill.
The levers that actually move the bill
Cost reduction is mostly a matter of doing a few unglamorous things deliberately rather than one clever thing once.
- Right-size to real usage. Look at what each machine actually consumes over a normal month, not what it was provisioned for, and shrink it to fit. Most estates are carrying a lot of paid-for air.
- Schedule the things that don’t need to be always-on. Non-production environments, batch jobs and anything that only runs in business hours can be switched off the rest of the time.
- Clean up the orphans. Unattached disks, old snapshots and abandoned backups are pure waste; an estate this is never reviewed accumulates them by default.
- Use commitment discounts for the steady part. The baseline you genuinely run all year is cheaper bought on a one- or three-year commitment than on-demand — but only commit to the part you are certain about.
- Match the workload to the right model. This is the big structural lever, and it deserves its own section.
Where serverless genuinely fits — and where it does not
Serverless functions — AWS Lambda, Cloudflare Workers, Azure Functions and the like — invert the always-on assumption. You deploy code rather than servers; the platform runs it on demand, in response to an event, and bills only for the milliseconds it actually executes. When nothing is happening, you run nothing and pay nothing for compute. That “scale to zero” is the whole point, and it is a remarkably good fit for a large share of a growing business’s back-office work.
Serverless is at its best on workloads that are spiky, event-driven or intermittent: “when a form is submitted, do X”; syncing between a CRM and an accounts package; webhook handlers; nightly exports and reminder emails; month-end reporting; a light API that scales from nothing to a spike and back. For these, the value is twofold — the direct saving of having no idle box to pay for, and, just as important, the removed burden of having no operating system to patch and no server to size.
But serverless is a sharp tool, not a universal one, and the honest limits are the credible part:
| Workload shape | Better fit | Why |
|---|---|---|
| Spiky, event-driven, mostly idle | Serverless functions | You pay nothing when nothing runs; no idle box, no patching. |
| Steady, 24/7, high concurrency | Containers | Remove the idleness and the maths flips — a continuously running container can be materially cheaper than serverless. |
| Long-running or heavy-compute jobs | Containers | Functions have hard time limits and fixed memory; long or heavy jobs belong elsewhere. |
| Latency-critical, user-facing paths | Containers (or warmed functions) | “Cold starts” add delay when a function has not run recently; keeping one warm erodes the saving. |
| Big, stateful databases and storage | Managed services | Buy these managed rather than running and patching them yourself. |
The most important honesty here is the steady-workload one. Scale-to-zero saves money precisely because the workload is mostly idle. For something running flat-out around the clock at high concurrency, a container can be substantially cheaper than serverless — by one analysis, 50–70% cheaper. Anyone recommending serverless for everything has stopped thinking about your bill and started thinking about their preferred architecture.
There is one more piece of honesty worth carrying: the function line is often only a quarter to a third of the real serverless bill. The gateways, data transfer, logging and managed datastores around it make up the rest. Serverless changes where the cost sits; it does not remove the need to govern it.
Why monitoring is the part that lasts
A one-off optimisation saves money once. The reason estates drift back to waste is that nobody is watching, and cloud spend grows by default — a new environment here, a forgotten disk there. The durable saving comes from making cost visible: knowing what each part of the system costs, tagging resources so spend can be attributed, setting budgets and alerts so a runaway environment is caught in days rather than at the next invoice. Right-sizing gets you to a good number; monitoring is what keeps you there as you grow.
Frequently asked
- Why did our cloud bill go up after we “moved to the cloud”?
- Almost always because the move was a lift-and-shift — your servers were recreated in the cloud unchanged, so you now pay by the hour for capacity that was a sunk cost before. The reliability and patching improve, but the over-provisioning comes along for the ride. The fix is to right-size, schedule and match each workload to the right model, which industry data suggests can recover 20–40% within about 90 days.
- Is serverless always cheaper?
- No. Serverless is cheaper for spiky, mostly-idle, event-driven work because you pay nothing when nothing runs. For a steady workload that runs flat-out 24/7, a container can be 50–70% cheaper, because there is no idleness for scale-to-zero to save. Right-sizing each workload, not adopting a single model everywhere, is what reduces the bill.
- What is the quickest win to reduce our bill?
- Usually switching off non-production environments out of hours and cleaning up orphaned storage — pure waste that requires no change to the application. After that, right-sizing over-provisioned machines to their real usage and buying commitment discounts for the steady baseline are the next biggest, lowest-risk levers.
- How do we stop the savings from drifting back?
- By making cost visible and continuous: tagging resources so spend can be attributed, setting budgets and alerts, and reviewing the estate regularly. Cloud spend grows by default as you grow; monitoring is what keeps a one-off optimisation from quietly unwinding.
If your cloud bill is climbing faster than the business and you are not sure where the waste sits, that is exactly what our free assessment is designed to surface — hosting, cost and the workloads that are in the wrong place. Start it at /application-modernisation/free-assessment.