- Cloud
- Cost Optimization
Cloud cost: the five usual suspects
Most cloud bills that grew without a plan have the same sources of waste. Here is where to look first, and how to keep the savings.
· 2 min read
Cloud bills rarely explode overnight. They creep. Each individual decision made sense at the time: a bigger instance to get through a launch, a snapshot “just in case”, a test environment for a project that ended last year. Add those up across a few years and a meaningful part of the bill is paying for nothing.
In cost reviews, the same five sources of waste come up again and again.
1. Idle and forgotten resources
Environments for finished projects, load balancers in front of nothing, unattached disks, old snapshots and elastic IPs no one remembers allocating. Individually small, collectively significant.
Where to look: resources with near-zero utilization over 30 days, storage volumes not attached to anything, and anything without an owner tag.
Keep it fixed: require owner and environment tags through policy, and schedule non-production environments to shut down outside working hours.
2. Oversized compute
Instances are usually sized for a peak that happened once, or for a guess made before launch. Many run at 5–15% CPU for their whole lives.
Where to look: average and 95th-percentile CPU and memory utilization per instance or container. Right-size in steps, watching latency, rather than all at once.
Keep it fixed: autoscaling on real metrics, and resource requests in Kubernetes that reflect measured usage instead of copy-pasted defaults.
3. Paying on-demand prices for steady workloads
If a workload has run 24/7 for a year and will keep doing so, paying on-demand rates is a choice to pay a premium for flexibility you are not using.
Where to look: your stable baseline of compute and database usage.
Keep it fixed: cover the predictable baseline with savings plans, reservations or committed-use discounts, and review coverage quarterly. Use spot or preemptible capacity for fault-tolerant batch and CI workloads.
4. Data transfer
Data transfer is the line item people understand least. Traffic between availability zones, NAT gateway processing charges, and egress to the internet can quietly rival compute costs.
Where to look: NAT gateway data processing, cross-AZ traffic between chatty services, and large egress flows that a CDN could serve more cheaply.
Keep it fixed: VPC endpoints for cloud-provider services, keeping chatty service pairs in the same zone where resilience allows, and caching at the edge.
5. Storage and logs that live forever
Logs retained indefinitely at the highest-priced tier, object storage without lifecycle rules, and database backups kept far longer than any recovery or compliance requirement.
Where to look: log ingestion and retention settings, the largest storage buckets, and backup retention policies.
Keep it fixed: lifecycle policies to move old data to cheaper tiers or delete it, sampling for noisy debug logs, and retention periods agreed with whoever owns compliance.
Savings that stick
A one-off clean-up feels great and fades within a year. What keeps costs down is making spend visible to the teams that create it:
- Allocate costs to teams and products with consistent tagging.
- Set budgets and anomaly alerts so a runaway resource is caught in days, not at month end.
- Put cost in the engineering loop. Show it in dashboards next to latency and errors, and discuss it in architecture reviews.
Cost optimization is not a project. It is an engineering habit, and a surprisingly easy one to build once the first round of waste is gone.