A Practical Guide to Cutting Cloud Costs Without Cutting Corners
By the time a company calls us for a cost audit, the cloud bill has usually become a board-level topic. The good news is that in nearly every audit we've run, the majority of the savings come from a short list of well-understood problems — not from painful tradeoffs against reliability or performance.
Start with what you're actually running, not what you provisioned
The first pass of any audit is simple: pull actual CPU, memory, and network utilization across every instance and compare it to what's provisioned. It is extremely common to find production fleets running at 15 to 20 percent average utilization, sized for a peak load that either never materialized or only happens for a few hours a month.
Right-sizing based on real utilization data, not the instance size someone picked eighteen months ago, is consistently the single largest line item in these audits — often 20 to 40 percent of total compute spend.
Reserved capacity is underused because it feels risky
Teams are often reluctant to commit to reserved instances or savings plans because they're worried about locking themselves into infrastructure they might not need in a year. That worry is reasonable, but it's usually solved by committing conservatively — reserve your baseline steady-state load, and let auto-scaling handle burst capacity on-demand. Most workloads have a floor that barely moves month to month, and that floor is exactly what reserved pricing is built for.
Storage costs sneak up because nobody owns them
Compute spend gets scrutinized because it's the biggest line item. Storage spend accumulates quietly — old snapshots that were never cleaned up, log retention policies set to "forever" by default, data sitting in a high-performance storage tier that hasn't been accessed in a year. None of these individually move the needle, but together they're routinely 10 to 15 percent of a cloud bill in accounts that haven't had a storage lifecycle review.
The fix is mechanical, not architectural: lifecycle policies that automatically tier or delete stale data, and a scheduled job that flags snapshots and volumes with no active attachment.
Data transfer costs are the ones nobody budgets for
Cross-region and cross-AZ data transfer fees are among the least visible costs in a cloud bill until someone actually breaks them out by service. We've seen architectures where a chatty internal service was making cross-region calls for no functional reason, quietly adding a meaningful percentage to the monthly bill. Mapping actual data flow against your architecture diagram — not the diagram from the original design doc, the one that reflects what's running today — usually surfaces at least one of these.
The order that actually works
- Right-size based on real utilization, not provisioned capacity. This is the highest-leverage, lowest-risk change.
- Commit reserved capacity for your steady-state floor, leaving burst capacity on-demand.
- Run a storage lifecycle audit and automate cleanup instead of relying on someone remembering to do it.
- Trace data transfer costs against actual service architecture, not the diagram in the wiki.
- Only then consider architectural changes — serverless for spiky workloads, spot instances for fault-tolerant batch jobs, multi-cloud arbitrage — because these carry real engineering cost and should be justified by data, not intuition.
Cost optimization doesn't have to mean accepting worse reliability. In most of the audits we run, the biggest wins come from spending that was never intentional in the first place — not from making the infrastructure worse to make it cheaper.