← All Articles
DevOps8 min read

AWS Cost Optimisation: How We Cut Client Bills by 40% Without Touching Code

January 30, 20258 min read

We inherited an AWS account from a client last year that was costing $28,000 per month. Within 90 days, we had it at $16,000 — same workload, same availability, no performance regression. Here's exactly what we did.

Right-size EC2 instances first

AWS Compute Optimizer analyses your actual utilisation and recommends right-sized instances. Most early-stage companies over-provision 3–5× "just to be safe." We found r5.2xlarge instances running at 8% CPU utilisation. Down-sized to r5.large, saved $800/month on a single instance family.

Reserved Instances and Savings Plans

On-demand pricing is the most expensive option and almost nobody should be using it for stable workloads. 1-year Savings Plans give 30–40% discount with no commitment to instance type. 3-year reserved instances give up to 60% off. Analyse your baseline usage in Cost Explorer and commit to what you know you'll use.

Spot Instances for fault-tolerant workloads

Batch processing, ML training, CI/CD runners, and stateless workers can run on Spot Instances at 70–90% discount. Use Spot with a fallback to on-demand. Configure interruption handlers to drain gracefully. We moved a client's entire CI fleet to Spot and saved $3,200/month.

S3 storage classes

S3 Standard is priced for frequently accessed data. Most data isn't frequently accessed. Use S3 Intelligent-Tiering for unpredictable access patterns — it automatically moves objects between tiers. Set lifecycle rules to move objects to S3 Glacier after 90 days. We found 4TB of build artifacts sitting in S3 Standard, costing $96/month. Moved to Glacier: $4/month.

Delete unused resources

Every account has them: unattached EBS volumes ($0.10/GB/month), idle load balancers ($16/month each), stopped EC2 instances still paying for EBS, old AMI snapshots accumulating. Run AWS Trusted Advisor or Cloud Custodian to find and delete them. We typically find $500–$2,000/month in zombie resources on accounts over 2 years old.

RDS optimisation

RDS Multi-AZ is often enabled in non-production environments where it's not needed. Turn it off in dev and staging. Enable Aurora auto-scaling to scale storage and read replicas based on actual load. Consider Aurora Serverless v2 for variable workloads — you pay per ACU-second, not for provisioned capacity that sits idle.

Data transfer costs

Data transfer is a hidden cost that compounds fast. Traffic between availability zones costs $0.01/GB each way. Use VPC endpoints for S3 and DynamoDB to avoid NAT gateway transfer costs. Enable CloudFront for static assets — egress from CloudFront is cheaper than from S3 or EC2 directly.

Set budgets and alerts

AWS Budgets alert you before you overspend, not after. Set alerts at 80% and 100% of your monthly budget. Set anomaly detection alerts for unexpected cost spikes. Make cost a team metric — show the monthly bill at engineering all-hands.

GET STARTED

Ready to build
something exceptional?

From idea to launch in weeks, not months. Let's talk about your project.