Cloud Cost Optimization Best Practices
Learn how to reduce your cloud spending by 40% with these proven strategies
Cloud Cost Optimization Best Practices: How We Cut Spend by 40%
Three years ago our cloud bill crossed six figures a month, and nobody could explain why. This is what actually worked when we fixed it — no fluff, just the moves that moved the number.
1. Start With Visibility, Not Cuts
You can't optimize what you can't see. Most teams try to cut costs before they even know where the money is going.
The first fix: tag every resource — team, environment, project. Boring, but it's the highest-leverage move on this list. Once a team can see their own costs, they start caring.
Untagged resources are where budgets quietly die.
2. Right-Size Before You Reserve
Don't commit to reserved instances before right-sizing. Locking in a 3-year discount on a wrong-sized server just locks in the waste.
We pulled 30 days of CPU and memory data and flagged anything under 40% utilization. The results were humbling:
Databases sized for Black Friday, running that way in February
Staging environments provisioned identically to production, "for consistency"
Result: ~15% savings, and it took less time than anything else on this list.
3. Commit to What You Actually Use
Once things were right-sized, reserved instances made sense. The rule we followed:
Commit to your steady-state baseline. Use on-demand or spot pricing for everything above it.
For us, baseline covered ~70% of compute. The rest stayed flexible.
Spot instances deserve their own mention — for anything stateless and fault-tolerant (CI/CD runners, batch jobs), spot pricing cut costs by 60–70%. It does require engineering effort: retry logic, checkpointing. Not a free lunch.
4. Kill the Zombie Resources
Every environment collects zombies:
Unattached storage volumes
Idle load balancers
Forgotten dev environments
Old snapshots nobody remembers
Unused elastic IPs
None look urgent alone. Together, they were 8% of our bill.
Fix: an automated monthly report flagging anything idle 14+ days, tagged to an owner. It doesn't auto-delete — that breaks things — it just forces a decision.
5. Fix Storage Tiering
Storage costs creep up quietly because nobody actively decides where data lives.
We added lifecycle policies:
Untouched 30+ days → move to infrequent access
Untouched 90+ days → move to archive tier
Nearly zero effort, ~6% savings, and no ongoing maintenance.
6. Make Autoscaling Actually Work
Most autoscaling is configured but never tuned — it scales up aggressively, down cautiously. A one-way ratchet toward overspending.
We found services scaling out at 50% CPU (way too conservative), and moved several bursty, low-traffic services to scale-to-zero outside business hours.
Nights and weekends, those resources simply didn't exist. Nobody noticed — except finance.
7. Build a Culture of Cost Awareness
The technical fixes got us most of the way. They don't stick without a culture shift.
We added cost estimates directly into code review — the same way security or performance gets reviewed. A PR spinning up a new database now shows its projected monthly cost before merge.
Untagged resources get flagged after 7 days, shut down after 30 if unclaimed.
Practice Savings Right-sizing existing resources ~15% Reserved instances / savings plans ~12% Eliminating zombie resources ~8% Storage tiering ~6% Spot instances ~5% Autoscaling tuning ~4%
None of it was exotic. All of it required someone to actually look.
The Real Lesson
Cost optimization isn't a one-time project — it's a habit. Stop watching, and costs drift back up.
Start with seeing, not cutting.