When a cloud bill doubles, the instinct is to blame the cloud. Nearly every time we audit one, the overspend is self-inflicted — and recoverable without a migration or a feature freeze.
The five places the money leaks
- Idle and zombie resources. Unattached disks, old snapshots, load balancers pointing at nothing, and dev environments running 24/7.
- Over-provisioning. Instances sized for a launch-day spike that never recurs, and databases two tiers larger than their actual load.
- Storage on the wrong tier. Cold data sitting on hot storage; logs kept forever with no lifecycle policy.
- Egress surprises. Cross-region and cross-AZ traffic that nobody costed at design time.
- No commitment coverage. Paying on-demand for steady-state workloads that should be on savings plans or reserved capacity.
How we run a cost audit
We start by tagging everything and attributing spend to teams and features — you can’t fix what you can’t see. Then we right-size from real utilisation data (not guesses), add autoscaling and scheduled shutdowns for non-prod, set storage lifecycle rules, and apply commitment discounts to the stable baseline.
Make the savings stick
One-off clean-ups drift back within a quarter. The durable fix is guardrails: budgets and anomaly alerts, cost shown in pull requests, and a monthly FinOps review so spend stays visible to the people who create it.
The takeaway
A 30–50% reduction is normal on a first audit, and it rarely requires re-architecting anything. Make spend visible, right-size from data, and put guardrails in place so it doesn’t creep back.









