← Back to Blog

How I Reduced AWS Costs by 40% Without Touching the App

Real method to reduce your AWS bill using right-sizing, autoscaling, and Reserved Instance strategy. No code changes required.

Problem

Our AWS bill jumped 60% in three months. Engineering team had no idea why. Finance was asking questions. Classic story.

Cause

Three root causes after a two-day audit:

  • Over-provisioned EC2: t3.2xlarge instances running at 8% CPU average
  • No autoscaling: instances running 24/7 including nights and weekends
  • Data transfer waste: logs being shipped cross-region unnecessarily

The Fix

Step 1: Right-size your EC2 instances

Use AWS Cost Explorer's right-sizing recommendations:

# Find instances with low CPU utilization
aws cloudwatch get-metric-statistics \
  --namespace AWS/EC2 \
  --metric-name CPUUtilization \
  --dimensions Name=InstanceId,Value=i-xxxxxxxxx \
  --start-time 2026-03-01T00:00:00Z \
  --end-time 2026-04-01T00:00:00Z \
  --period 86400 \
  --statistics Average

If p99 CPU is below 20%, you're overprovisioned. We moved from t3.2xlarge to t3.large — same workload, half the cost.

Step 2: Enable autoscaling for non-prod environments

{
  "AutoScalingGroupName": "staging-asg",
  "ScheduledActions": [
    {
      "ScheduledActionName": "scale-down-nights",
      "Recurrence": "0 20 * * MON-FRI",
      "DesiredCapacity": 0,
      "MinSize": 0
    },
    {
      "ScheduledActionName": "scale-up-mornings",
      "Recurrence": "0 8 * * MON-FRI",
      "DesiredCapacity": 2,
      "MinSize": 1
    }
  ]
}

Staging environments running nights and weekends is pure waste.

Step 3: Switch to Reserved Instances for baseline load

For workloads running 24/7, Reserved Instances save 40–60% vs On-Demand:

Type Discount Commitment
On-Demand 0% None
1-yr No Upfront 35% 1 year
1-yr All Upfront 40% 1 year
3-yr All Upfront 60% 3 years

Start with 1-year No Upfront for flexibility.

Step 4: Fix cross-region data transfer

# Find where your data transfer costs are coming from
aws ce get-cost-and-usage \
  --time-period Start=2026-03-01,End=2026-04-01 \
  --granularity MONTHLY \
  --filter '{"Dimensions":{"Key":"SERVICE","Values":["EC2 - Other"]}}' \
  --group-by Type=DIMENSION,Key=USAGE_TYPE

We found 3TB/month of logs being shipped from us-east-1 to eu-west-1. Moving the logging stack to the same region saved $180/month alone.

Result

Category Monthly Before Monthly After
EC2 compute $4,200 $2,100
Data transfer $380 $60
Non-prod environments $900 $350
Total $5,480 $2,510

54% reduction. No application changes.

The real lesson: cloud costs aren't a finance problem, they're an engineering hygiene problem. One audit per quarter prevents the 3 AM "why is the bill $40k this month?" conversation.

Dealing with a similar problem?

I offer production DevOps consulting. Let's fix it together.

Hire Me →