Here's a number that should make every CTO uncomfortable: the average company wastes 32% of its cloud spend. That's not our estimate — it's from Flexera's 2026 State of the Cloud report.
We've audited dozens of AWS environments, from early-stage startups spending ₹2L/month to enterprises spending ₹50L+. The waste patterns are almost always the same. And they're almost always fixable within 30 days.
This guide covers the seven strategies that consistently deliver 30–40% cost reduction without touching a single line of application code.
Strategy 1: Right-Size Your Instances (Savings: 20–35%)
This is the single highest-impact, lowest-effort optimization. Most teams pick an instance size during initial setup and never revisit it.
The reality? Over 60% of EC2 instances are over-provisioned. That m5.xlarge running at 12% CPU? It should be an m5.large — same performance, half the cost.
How to do it:
- Open AWS Compute Optimizer (free, already collecting data if you've enabled it)
- Look for instances flagged as "Over-provisioned"
- Check the recommended instance type and projected savings
- Resize during your next maintenance window — it takes 2 minutes per instance
"We audited a fintech client's AWS environment and found 23 out of 31 EC2 instances were over-provisioned by at least one size. Right-sizing alone saved them ₹4.2L per year — in an afternoon."
Pro tip: Don't just look at CPU. Check memory utilization too. If your application is memory-bound, switch to an R-series instance type rather than downsizing the M-series.
Strategy 2: Savings Plans & Reserved Instances (Savings: 30–60%)
If you're running any workload 24/7 on On-Demand pricing, you're overpaying — period.
Three commitment options:
- Compute Savings Plans — commit to a $/hour spend, flexible across instance types, regions, and services (EC2, Fargate, Lambda). Our default recommendation. Savings: 30–40%.
- EC2 Instance Savings Plans — commit to a specific instance family in a specific region. Less flexible, more savings: 40–50%.
- Reserved Instances (3-year, all upfront) — maximum savings (up to 60%) but locked to a specific instance type. Only for workloads you're 100% sure won't change.
Startups / fast-changing workloads → Compute Savings Plans (1-year). Maximum flexibility.
Stable production workloads → EC2 Instance Savings Plans (1-year). Good balance.
Databases, always-on infrastructure → Reserved Instances (3-year). Maximum savings for predictable workloads like RDS.
How to calculate: Look at your last 3 months of usage in Cost Explorer. Your minimum consistent spend is what you should commit. Never commit 100% — leave 20% as On-Demand headroom for spikes.
Strategy 3: Spot Instances for Non-Critical Workloads (Savings: 60–80%)
AWS Spot Instances use spare EC2 capacity at up to 90% discount. The catch: AWS can reclaim them with 2 minutes notice.
Perfect for:
- CI/CD build runners (GitHub Actions self-hosted runners on Spot = almost free)
- Batch processing and data pipelines
- Dev/staging environments
- Stateless microservices behind a load balancer (with auto-scaling)
- Machine learning training jobs
Not suitable for: Single-instance databases, stateful services, or anything that can't tolerate a 2-minute interruption.
Best practice: Use Spot Fleet or EC2 Auto Scaling with mixed instance policies. Request capacity across multiple instance types and availability zones. AWS interrupts the cheapest instances first, so diversification is your insurance.
Strategy 4: Storage Lifecycle Policies (Savings: 40–70% on Storage)
S3 storage costs seem small — until they're not. We regularly find clients with terabytes of data in S3 Standard that hasn't been accessed in months.
S3 storage tiers (per GB/month, ap-south-1):
- S3 Standard: ~₹1.88/GB — for frequently accessed data
- S3 Infrequent Access: ~₹1.02/GB — for data accessed less than once a month
- S3 Glacier Instant Retrieval: ~₹0.32/GB — for archival with rare millisecond access
- S3 Glacier Deep Archive: ~₹0.09/GB — for compliance/backup data accessed once or twice a year
Set up S3 Intelligent-Tiering for buckets where access patterns are unpredictable — AWS automatically moves objects between tiers based on actual usage. No retrieval fees for S3 Intelligent-Tiering.
For known lifecycle patterns, create S3 Lifecycle Rules:
- Logs older than 30 days → Infrequent Access
- Logs older than 90 days → Glacier Instant Retrieval
- Logs older than 365 days → Glacier Deep Archive
- Incomplete multipart uploads → delete after 7 days (these quietly accumulate costs)
Strategy 5: Kill Zombie Resources (Savings: 5–15%)
Every AWS account has them — resources that were created for a project, a test, or a demo, and then forgotten.
Common zombies:
- Unattached EBS volumes — provisioned storage charging you monthly with no EC2 instance using it
- Idle Elastic IPs — AWS charges for EIPs not attached to a running instance
- Old snapshots — EBS snapshots from instances terminated months ago
- Unused NAT Gateways — ₹2,500+/month each, even with zero traffic
- Idle load balancers — ALBs/NLBs for decommissioned services
- Stopped RDS instances — AWS auto-starts stopped RDS instances after 7 days. They charge while running.
Use AWS Trusted Advisor (Business/Enterprise support) or AWS Cost Anomaly Detection to find these automatically. We also recommend running a monthly "zombie hunt" as a team ritual.
Strategy 6: Autoscaling Done Right (Savings: 20–40% on Compute)
Running fixed-size infrastructure 24/7 for workloads that are only busy 8 hours a day is like keeping every light in your office on all night.
Quick wins:
- Dev/staging environments: Schedule them to shut down at 8 PM and start at 8 AM. Saves 50% instantly.
- Production auto-scaling: Use target tracking policies (e.g., maintain 60% average CPU). Let AWS add and remove instances based on actual demand.
- RDS scaling: Use Aurora Serverless v2 for unpredictable workloads. It scales down to 0.5 ACU during quiet periods.
- ECS/Fargate: Scale tasks based on request count or queue depth, not just CPU.
"A SaaS client was running 8 ECS tasks 24/7 for an application that got traffic only during Indian business hours. We added time-based scaling: 8 tasks during the day, 2 at night. Monthly Fargate bill dropped from ₹1.8L to ₹95K."
Strategy 7: Monitor, Alert, Automate (Ongoing)
Cost optimization isn't a one-time project — it's a practice. Without ongoing monitoring, costs creep back up within 3–6 months.
Set up these on day one:
- AWS Budgets — create alerts at 50%, 80%, and 100% of your expected monthly spend
- Cost Anomaly Detection — AWS ML-based alerting that catches unexpected spikes (free to enable)
- Weekly cost reports — automated email from Cost Explorer to the engineering lead and finance
- Tagging policy — every resource must be tagged with
team,environment, andproject. Untagged resources = unaccountable costs.
The 30-Day Cost Reduction Playbook
Week 1: Enable Compute Optimizer, Cost Anomaly Detection, and Trusted Advisor. Tag all untagged resources. Kill obvious zombies (unattached volumes, idle EIPs).
Week 2: Right-size the top 10 over-provisioned instances. Set up S3 lifecycle policies. Schedule dev/staging environments to stop at night.
Week 3: Purchase Compute Savings Plans for your baseline steady-state usage. Implement autoscaling for production workloads.
Week 4: Move CI/CD runners to Spot. Set up AWS Budgets and weekly cost reports. Review and document everything for the team.
Ready to Cut Your Cloud Bill?
We offer a free AWS cost audit — a 30-minute call where we screen-share your Cost Explorer and identify the top 5 savings opportunities on the spot. No sales pitch, no commitment. Just straight numbers.
Most clients see their first savings within the same week. Book your free audit here.