Cloud Cost Optimization: Cut 30% by Asking Three Questions
Right-sizing, lifecycle, and reserved coverage. Cloud cost cuts don't come from dashboards — they come from three decisions made weekly.
Cloud bills don't runaway because of one bad day; they escalate one silent decision at a time. The teams that cut 30% without breaking engineering speed all ask the same three questions on a cycle.
1. Are we paying for idle?
The cheapest instance is the one that isn't running. Before any savings plan:
Eliminate idle compute. Tag every resource with owner, environment, and tier. Then:
- Stop dev instances off-hours (
Instance Scheduleron AWS,Cloud Scheduler + start/stopon GCP) - Kill orphaned EBS snapshots old than 60 days first
- Use spot for anything batch or resumable
- Delete that 8-month-old "looks important, might be" bucket
Idle right-sizing alone usually finds 10–15%.
2. Are we sized to the 99th percentile — while running at 2%?
The classic: provision for peak, pay for peak, live with the idle. Fix with three moves:
- Right-size by measured utilization. Look at CPU/mem over 30 days, not peak guesswork. Move from
m5.xlargetom5.largewhere p95 < 40%. - Stop following the highest instance in the fleet. Containerized? Let the autoscaler do compute, and keep the burst instances only where latency demands.
- Vertical only when horizontal is noise. For most web services, add replicas, don't supersize.
3. Do we have coverage where it matters?
After waste is gone, cover the predictable baseline with reserved or savings-plan commitment, and let autoscaling eat the variable remainder.
aws ce get-reserved-purchase-recommendation \
--service EC2 \
--lookback-period-in-days 30 \
--term-in-years 1
A healthy pattern: ~70% coverage of baseline for 3-year term, 15% for 1-year, 15% on-demand for the unpredictable spikes.
Making it repeatable
One-time cleanup isn't FinOps. Build the feedback loop:
- Weekly: orphaned resource report + autoscaling sanity check
- Monthly: right-sizing and "idle by tag" review against budget
- Quarterly: coverage vs. baseline, committed-spend vs. actual
Make the numbers visible to engineers, not just finance. Teams that see the price tag of t3.2xlarge next to their repo stop leaving dev boxes running overnight.
The questions in one line each
| Question | The fix |
|---|---|
| Is anything running but unused? | Stop it / schedule it |
| Is anything sized for a peak it never hits? | Right-size to measured p95 |
| Is our baseline covered cheaply? | Commit via savings plans |
Summary
Cut idles first, right-size second, cover the baseline third — and loop it weekly. The 30% is in the waste nobody notices, not in the discount nobody negotiated.