Every cloud cost audit we have run has found substantial waste, and it is nearly always the same categories. Work through them in this order — the early items are risk-free and often cover the cost of the exercise.
1. Delete what nobody is using
Unattached EBS volumes, old snapshots, idle load balancers, unassociated elastic IPs, dev environments left running since a project ended. This is free money and carries no risk. Start here.
2. Right-size before you commit
Look at actual CPU and memory utilisation over 30 days, not the size someone picked on day one. Instances running at 8% CPU are extremely common. Right-size before buying reserved capacity, or you will lock in the wrong size for a year.
3. Then commit
Once sizing is correct, Savings Plans and Reserved Instances cut 30–60% off steady-state compute. Start with a one-year commitment on your genuinely stable baseline and keep the variable portion on demand.
4. Fix storage tiers
S3 lifecycle policies moving logs and backups to Infrequent Access and then Glacier are trivial to set up and frequently cut storage costs by an order of magnitude. Almost nobody does it.
5. Look at data transfer
Cross-AZ and egress charges are the line item people forget. Co-locating chatty services in the same AZ and putting CloudFront in front of static assets often removes a surprisingly large number.
Then make it stick
Set budget alerts and cost anomaly detection, and tag everything by team and environment. Without ownership, the bill quietly grows back within six months.