Where Cloud Costs Actually Go, and What's Worth Fixing First
Cloud costs almost never spike from a single dramatic mistake. They creep — a slightly oversized instance here, an unused resource there, a caching layer that was never added, a data transfer pattern nobody questioned because it worked fine when volume was lower. By the time someone looks closely at the bill, it's the accumulation of a dozen small decisions, not one big one.
That also means there's rarely a single fix. But a handful of categories account for most of the recoverable spend in a typical cloud bill, and they're worth checking in order of expected payoff before reaching for anything more elaborate.
Oversized compute is almost always there
Instances get sized for peak load, or sized generously "to be safe," and then never revisited once traffic patterns stabilize. Right-sizing — matching instance size to actual sustained usage, not worst-case peak — is usually the single largest recoverable cost in a cloud bill that hasn't been audited recently.
This pairs naturally with autoscaling: if load genuinely varies significantly, sizing for the average and scaling up for peaks costs less than sizing permanently for the peak.
Storage that's still being paid for after it stopped being useful
Snapshots, old backups, unattached volumes, logs retained far longer than any compliance or debugging need actually requires — storage costs are individually small and collectively significant, because nothing ever prompts anyone to clean them up. A volume detached from a terminated instance six months ago is still billing every month, silently, until someone specifically goes looking.
A lifecycle policy — automatic tiering to cheaper storage classes for data that's rarely accessed, automatic deletion for data past its actual retention need — turns this from a manual cleanup task into something that doesn't accumulate in the first place.
Data transfer costs that nobody accounted for upfront
Moving data between regions, between availability zones, or out to the public internet often costs more than the compute or storage generating that data in the first place — and it's easy to architect a system without thinking about transfer costs until the bill arrives. Multi-region architectures are the most common place this bites: data replicated or queried across regions for reasons that made sense functionally, without anyone pricing the transfer cost of that pattern.
Missing caching where it would actually help
A caching layer in front of expensive database queries or external API calls often pays for itself immediately — every cache hit is compute, database load, or a third-party API charge you didn't incur. Teams under initial deployment pressure often skip caching to ship faster, with the intention of adding it later. "Later" doesn't arrive until someone connects rising costs to the queries hitting the database on every single request.
Reserved and committed-use pricing left unclaimed
Cloud providers offer meaningfully discounted pricing for committing to sustained usage — reserved instances, committed-use discounts, savings plans — but they require an active decision to opt in. Workloads that run continuously and predictably are usually running on full on-demand pricing simply because nobody made that commitment decision, not because on-demand was the deliberate choice.
The audit that actually finds this
A cost audit worth doing looks at:
- Utilization vs. provisioned size for every compute resource — what's actually being used against what's being paid for
- Storage age and access patterns — what hasn't been touched in 90+ days and could move to cheaper storage or be deleted
- Data transfer patterns — where data crosses regions or leaves the cloud provider's network, and whether that's architecturally necessary
- Cache hit rates on anything expensive that gets queried repeatedly with the same or similar inputs
- On-demand vs. committed pricing for anything running predictably and continuously
None of this requires a platform migration or an architecture rewrite. It requires someone actually looking, on a recurring basis — because the same drift that created the current bill will recreate itself within a year of any cleanup if nothing changes about how resources get provisioned and reviewed going forward.