AWS Cost Troubleshooting · Startup Guide

Why Is My AWS Bill So High? The 7 Most Common Causes for Startups

Your AWS bill jumped and you don't know why. Here are the 7 most common causes we find in startup accounts - and how to fix each one fast.

30–40% typical overspend
Most issues fixable in days
No Reserved Instances required
01

Over-provisioned EC2 instances

Saves $400–2,000/month

That's $2,400–$12,000 in waste every 6 months of "we'll get to it."

The most common finding in every audit. Instances are sized for peak load at launch and never revisited. CloudWatch shows 5–15% average CPU utilization, but the team is afraid to downsize in case something breaks.

The fix

Analyze 2 weeks of CPU, memory, network, and EBS I/O metrics. Downsize to the next smaller instance family, or migrate to Graviton (20–40% cheaper). Memory metrics require CloudWatch Agent - most startups don't have it installed.

EC2 rightsizing guide
02

NAT Gateway data processing charges

Saves $800–3,000/month

A 15-minute fix. Every month you delay costs another $800–$3,000.

NAT Gateway charges $0.045/GB for all data processed - on top of the hourly rate. Traffic from EC2 instances to S3 or DynamoDB goes through NAT Gateway by default, racking up charges that look like 'data transfer' on the bill.

The fix

Create a Gateway VPC Endpoint for S3 and DynamoDB. Traffic routes through AWS's private network, bypassing NAT Gateway entirely. Cost: free. Implementation: 15-minute Terraform change.

How to reduce NAT Gateway costs by 70–80%
03

Unattached EBS volumes and old snapshots

Saves $100–500/month

That's $600–$3,000 sitting in deleted infrastructure every 6 months.

Every time an EC2 instance is terminated, the EBS volume is often left behind unless `DeleteOnTermination` is set. Snapshots accumulate from automated backups with no lifecycle policy. This is invisible until Cost Explorer is filtered by EBS.

The fix

Run `aws ec2 describe-volumes --filters Name=status,Values=available` to find unattached volumes. Audit snapshots older than 30 days. Migrate gp2 volumes to gp3 for 20% savings with no performance impact.

EBS cost optimization guide
04

No Savings Plans or Reserved Instances

Saves $1,000–8,000/month

That's $6,000–$48,000 paid to On-Demand pricing every 6 months instead of committing.

On-Demand pricing is 30–66% more expensive than 1-year Savings Plans. Startups avoid commitments because they worry about locking in the wrong instance type - but Compute Savings Plans are fully flexible across instance families, regions, and OS.

The fix

Calculate your steady-state baseline from 3 months of Cost Explorer data. Buy a Compute Savings Plan for ~70% of your baseline compute spend. Do this only after rightsizing - never commit to waste.

Savings Plans vs Reserved Instances guide
05

Idle load balancers

Saves $50–200/month

That's $300–$1,200 in charges on resources actively serving zero traffic.

Application Load Balancers cost $16–30/month each in baseline charges, regardless of traffic. Staging environments, test deployments, and decommissioned services often have ALBs still running with zero or near-zero traffic.

The fix

List all load balancers and check `RequestCount` in CloudWatch for the past 30 days. Delete any with fewer than 100 requests/day that aren't attached to active services.

06

Over-provisioned RDS instances

Saves $300–1,500/month

That's $1,800–$9,000 in database overprovisioning every 6 months.

RDS is consistently the second-biggest AWS line item. Instances are sized conservatively at launch and grow with the team's anxiety about database performance - not with actual utilization. Multi-AZ deployments double the cost.

The fix

Check RDS `CPUUtilization`, `DatabaseConnections`, and `FreeStorageSpace` over 2 weeks. Downsize instances with consistent sub-30% CPU. Consider Aurora Serverless v2 for variable workloads.

How to reduce RDS costs
07

Forgotten dev and staging environments

Saves $200–2,000/month

That's $1,200–$12,000 paid for environments your team stopped using months ago.

Dev and staging environments are created for a sprint and never torn down. They run 24/7 at full production size. A single forgotten staging environment with an RDS db.r5.xlarge and a few EC2 instances can cost $800+/month.

The fix

Tag all resources with `Environment: dev/staging/prod`. Set up AWS Cost Explorer tag-based filtering. Create a scheduled Lambda to stop non-production resources outside business hours using Instance Scheduler.

The Right Order to Fix These

Sequence matters. Committing to Reserved Instances before rightsizing locks in waste.

1

Rightsize first

Delete waste. Downsize over-provisioned instances. Fix NAT Gateway. These require no commitment and save money immediately.

2

Architect better

Add VPC endpoints, move dev/staging to scheduled start/stop, clean up unattached EBS and snapshots.

3

Then commit

Once you know your true baseline, buy Savings Plans and Reserved Instances. Every dollar committed should be to resources you'll actually use.

Now You Know Where the Money Goes. The Question Is: How Long Will You Wait?

You’ve just read the 7 most common causes. You probably recognized 3–5 of them in your own account.

Here’s what happens next for most startups: they bookmark this page, tell themselves “we’ll get to it,” and then don’t. Six months later, the bill is even higher and the waste has compounded.

Option A: DIY the quick wins

They’re real and they work. Start with VPC endpoints and gp2→gp3 migration - you can do both today. Free, quick, and no risk.

Option B: Get the full picture in 7 days

Every resource, every dollar, every quick win AND the architectural changes your team won’t find on their own - the AWS Cost Audit does that for €5K. If it doesn’t find at least €15K in savings, it’s free.

See the AWS Cost Audit →

The one option that’s guaranteed to cost you money is doing nothing.

Fixed-price · Risk-free · 3× ROI guarantee

Want these fixed without doing it yourself?

The audit identifies which of these 7 issues are costing you the most - and delivers a prioritized fix list in 1 week. No call needed to start.

Start the Audit →

No call needed · Accept agreements · Run one script · Done

Prefer to talk first? Free 30-min call available →