Almost every growing team we meet is overpaying for cloud — usually by a lot. The good news: most of that spend is recoverable without touching performance or reliability. Here are the five changes we reach for first, roughly in the order of effort-to-payoff.

The average team we audit is running 30–45% more cloud spend than it needs. None of the fixes below require rewriting your app.

1. Right-size before you do anything else

The single biggest source of waste is instances that are far larger than the workload needs. Teams pick a size early, the traffic assumptions never get revisited, and the bill quietly compounds.

Pull two weeks of CPU and memory metrics, find anything sitting under 20% utilization, and step it down one size. On a fleet of any real size, this alone often recovers 15–25%.

2. Buy commitments for your steady baseline

If you know you'll be running a certain amount of compute for the next year — and almost everyone does — paying on-demand for it is leaving money on the table. Savings Plans and Reserved Instances discount that predictable base load significantly.

The rule we use: commit only to your floor (the capacity you never drop below) and keep the variable top layer on-demand or spot.

3. Use spot instances for the right workloads

Spot capacity is dramatically cheaper, with the trade-off that it can be reclaimed. That makes it perfect for fault-tolerant work:

  • CI/CD build and test runners
  • Batch processing and data pipelines
  • Stateless workers behind a queue
  • Non-production environments

A simple config change in your autoscaling group can move eligible workloads onto spot:

capacity_type = "SPOT"
instance_types = ["m6i.large", "m5.large", "m5a.large"]
# mix types so reclaim of one pool doesn't stall you

4. Delete what nobody is using

Orphaned resources are pure waste: unattached storage volumes, idle load balancers, old snapshots, forgotten test environments. They rarely show up in a casual glance at the console but add up fast.

Set up a monthly sweep — or better, an automated one — that flags anything untagged or idle for 30+ days. Use tags to make ownership clear so nothing gets deleted by surprise.

5. Set budgets and alerts so it never creeps back

Cost optimization isn't a one-time project; it's a habit. The teams that stay lean are the ones that get a Slack message the moment spend trends above plan — not a surprise invoice at month-end.

Put a budget on each environment, alert at 80% of target, and review the top movers once a month. That feedback loop keeps the savings from quietly eroding.

The bottom line

You don't need to re-architect anything to spend less. Right-size, commit your baseline, use spot where it fits, clean up the dead weight, and watch the trend. Most teams recover a third of their bill within a few weeks of doing exactly this.

If you'd rather have someone run this audit for you, that's one of the things we do — get in touch and we'll take a look.