← All articlesCloud & Infrastructure

We Audited 12 Startups' AWS Bills — Average Waste: 43%

Real data from 12 startup AWS audits. The 5 biggest cost leaks, exact savings, and a 45-minute audit process you can run today.

Y
Yash Pritwani
5 min read read

# We Audited 12 Startups' AWS Bills — Average Waste: 43%

Last quarter, we ran infrastructure cost audits for 12 startups (seed to Series B). The results were consistent and painful: every single one was wasting between 28% and 67% of their AWS spend.

Not because they were stupid. Because AWS makes it trivially easy to provision resources and quietly expensive to maintain them.

Here's exactly what we found and how to fix it in 45 minutes.

The 5 Biggest Cost Leaks (In Order of Impact)

1. NAT Gateway Charges: The Silent $540/Month Tax

Every startup we audited was running 3 NAT Gateways (one per AZ) at $180/month each — $540/month for outbound internet traffic routing.

The reality: A 4-person engineering team with a single-service backend does not need multi-AZ redundancy for NAT. Your app server can tolerate a single NAT Gateway. If it goes down, requests retry.

The fix: Reduce to 1 NAT Gateway in your primary AZ. If your app is truly multi-AZ critical, use VPC endpoints for AWS services (S3, DynamoDB, SQS) to eliminate NAT traffic for internal AWS calls.

Savings: $360/month (67% reduction in NAT costs)

2. Oversized RDS Instances: Paying for 12x the CPU You Need

8 out of 12 startups were running db.r5.xlarge or larger ($800+/month) with CPU utilization under 10%.

Why this happens: The RDS instance wizard defaults to production-grade instances. Developers pick "recommended" and forget. RDS has no auto-downsize.

The fix:

# Check your actual utilization
aws cloudwatch get-metric-statistics \
  --namespace AWS/RDS \
  --metric-name CPUUtilization \
  --dimensions Name=DBInstanceIdentifier,Value=YOUR_DB \
  --start-time $(date -d '30 days ago' --iso-8601) \
  --end-time $(date --iso-8601) \
  --period 86400 \
  --statistics Average Maximum

If your P99 CPU is under 40%, drop one instance class. Under 20%? Drop two.

A db.t3.medium ($70/month) handles most startup workloads beautifully until you hit 500+ concurrent connections.

Savings: $500-730/month per instance

3. CloudWatch Log Retention: Paying Forever for Logs Nobody Reads

Default log retention: Never expire. Cost: $0.03/GB/month stored, $0.50/GB ingested.

One startup had 4TB of CloudWatch logs going back to 2023. Cost: $120/month storage + $200/month ingestion for verbose DEBUG logs in production.

The fix:

# Set 14-day retention on all log groups
aws logs describe-log-groups --query 'logGroups[].logGroupName' --output text | \
  xargs -I {} aws logs put-retention-policy --log-group-name {} --retention-in-days 14

For long-term analysis, export to S3 ($0.023/GB/month — 75% cheaper) and query with Athena on-demand.

Savings: $200-400/month

4. Orphaned EBS Snapshots: Ghost Costs From Deleted Instances

When you terminate an EC2 instance, its EBS snapshots stay. Silently. At $0.05/GB/month.

The find script:

# Find snapshots with no matching volume
aws ec2 describe-snapshots --owner-ids self \
  --query 'Snapshots[?!VolumeId].{ID:SnapshotId,Size:VolumeSize,Created:StartTime}' \
  --output table

One client: 2.3TB of orphaned snapshots. $115/month for dead data.

Savings: $50-230/month

5. Load Balancers for Internal Services: $16/Month Each for Nothing

Every ALB costs $16/month base + traffic charges. We found startups running 4-6 ALBs for services that only communicate internally.

The fix: Replace internal ALBs with:

Docker service DNS (free, already works in compose/swarm)
AWS Cloud Map for service discovery ($0.10/month per service)
Or simply direct IP/port references behind a VPC

Savings: $64-96/month

The 45-Minute Audit Process

You can run this yourself. Right now.

Step 1 (10 min): Export Cost Explorer data

aws ce get-cost-and-usage \
  --time-period Start=$(date -d '90 days ago' +%Y-%m-%d),End=$(date +%Y-%m-%d) \
  --granularity MONTHLY \
  --metrics "UnblendedCost" \
  --group-by Type=DIMENSION,Key=SERVICE \
  --output json > cost-report.json

Step 2 (15 min): Map utilization vs. provisioned

RDS: CloudWatch CPU/memory utilization
EC2: CPU, network I/O
Lambda: concurrent executions vs. provisioned concurrency

Step 3 (10 min): Find zombies

Unattached EBS volumes
Orphaned snapshots
Unused Elastic IPs ($3.60/month each when unattached)
Idle load balancers (0 requests/day)

Step 4 (10 min): Calculate savings

Right-size instances (match actual utilization + 30% headroom)
Eliminate orphaned resources
Set retention policies
Remove unnecessary redundancy

Results Across 12 Audits

Startup Stage
Monthly AWS
Waste Found
Post-Audit Cost

|--------------|-------------|-------------|-----------------|

Pre-seed (2 eng)
$800
52%
$384
Seed (5 eng)
$2,400
43%
$1,368
Series A (12 eng)
$5,100
38%
$3,162
Series B (25 eng)
$12,000
41%
$7,080

Average savings: 43%. Zero performance impact. Zero downtime.

When Self-Hosting Makes More Sense

If your post-audit AWS bill is still above $2,000/month for a straightforward stack (web app + DB + cache + queue), self-hosting may save you another 80-90%.

We run 84 containers for $45/month on a single Proxmox node. Same stack that costs $2,400 on AWS.

That's a different conversation — but the audit comes first. Know your real spend before deciding your platform strategy.

Get Your Free Audit

We do free 15-minute cloud cost reviews. No pitch, no obligation. We screen-share, run the commands above against your account, and tell you exactly what you're wasting.

Book a slot: techsaas.cloud/contacttechsaas.cloud/contacthttps://techsaas.cloud/contact

Or run the audit yourself with our free PDF checklist that includes all the CLI commands above plus 12 more checks we run.

#aws#cloud-cost#finops#startup#cost-optimization

Need help with cloud & infrastructure?

TechSaaS provides expert consulting and managed services for cloud infrastructure, DevOps, and AI/ML operations.