How a Series B Startup Cut $180K/Year in 3 Weeks

Post Cover

A Series B startup came to us with a problem: AWS costs were growing faster than revenue.

They were spending $87,000/month on AWS. Engineering leadership had tried to optimize but wasn't sure where to focus. The board was asking questions.

Three weeks later, we'd identified $180,000 in annual savings. Here's exactly what we did.

Week 1: Discovery

The Initial Audit

First pass at the bill showed the usual suspects:

  • EC2: $41,000/month (47%)
  • RDS: $18,000/month (21%)
  • Data Transfer: $9,000/month (10%)
  • Everything else: $19,000/month (22%)

Nothing obviously broken. But the devil's in the details.

Finding #1: Zero Commitment Coverage

They were running 100% on-demand. No Savings Plans. No Reserved Instances.

This is startup default mode — move fast, don't lock in — but they were two years old with predictable workloads.

Immediate opportunity: Compute Savings Plans could save 30% on EC2.

Finding #2: Oversized RDS Instances

Production database: db.r5.4xlarge. 16 vCPUs, 128 GB RAM.

Average CPU utilization: 12%. Peak CPU utilization: 34%.

This is a classic over-provisioned database. They'd sized for expected growth that hadn't materialized.

Immediate opportunity: Downsize to db.r5.2xlarge (50% cost reduction).

Finding #3: Dev/Staging Running 24/7

Two full environments — staging and dev — running production-equivalent infrastructure. 24 hours a day. 7 days a week.

Developer activity: primarily 9 AM - 7 PM, Monday-Friday.

That's 50 hours of usage out of 168 hours per week. 70% waste.

Immediate opportunity: Auto-shutdown non-production during off-hours.

Finding #4: Forgotten Resources

The zombie hunt found:

  • 23 stopped EC2 instances with attached EBS volumes
  • 47 unattached EBS volumes
  • 8 unused Elastic IPs
  • 340 GB of old EBS snapshots
  • 2 NAT Gateways in VPCs with no running resources

Total waste: ~$1,200/month

Small in the scheme of things, but pure waste is pure waste.

Finding #5: Log Explosion

CloudWatch Logs costs: $2,800/month.

Log retention: "Never expire" (default). Oldest logs: 26 months. Logs accessed older than 30 days: 0.

Immediate opportunity: Set 30-day retention, archive security logs to S3.

Week 2: Implementation

Now the work begins. We prioritized by effort-to-savings ratio.

Quick Wins (Day 1-3)

Deleted zombie resources: 30 minutes of clicking, $1,200/month saved. Set log retention: CloudWatch Logs → Log Groups → Set retention to 30 days across non-security logs. $1,900/month saved. Stopped unused NAT Gateways: $240/month saved.

Total quick wins: $3,340/month.

Medium Effort (Day 4-7)

Implemented auto-shutdown for dev/staging:

Used AWS Instance Scheduler to:

  • Stop non-production EC2 at 8 PM local time
  • Start non-production EC2 at 7 AM local time
  • Keep weekends off

Some wrinkles:

  • Had to ensure RDS instances could restart cleanly
  • Updated CI/CD to check environment status before deploying
  • Created override mechanism for weekend work

Results: ~$8,500/month saved on dev/staging infrastructure.

Purchased Compute Savings Plans:

Analyzed 30-day usage patterns. Calculated stable baseline. Purchased 1-year Compute Savings Plans covering 70% of baseline.

Results: ~$4,800/month saved on committed compute.

Bigger Changes (Day 8-14)

RDS Right-Sizing:

This required more care. Production database.

Process: 1. Took a snapshot 2. Created a smaller replica 3. Tested application against replica 4. Scheduled maintenance window 5. Performed failover to smaller instance 6. Monitored for 48 hours

Results: $4,200/month saved.

Graviton Migration (Partial):

Identified 12 services that could move to Graviton:

  • All used containerized workloads
  • All used supported languages (Node, Python, Java)
  • None had binary dependencies

Migrated 8 services in week 2. Remaining 4 needed more testing.

Results: $1,600/month saved (8 services), more coming.

Week 3: Validation & Documentation

Verify Savings

  • Cross-checked Cost Explorer before/after
  • Validated no performance degradation
  • Confirmed Savings Plan coverage was accurate
  • Monitored for any issues from changes

Document Everything

Created runbooks for:

  • Monthly zombie resource audit
  • Quarterly commitment review
  • Auto-shutdown exception process
  • Cost anomaly investigation

Set Up Ongoing Monitoring

  • Daily cost anomaly alerts (>10% day-over-day)
  • Weekly cost review meetings (15 minutes)
  • Monthly commitment coverage check
  • Quarterly optimization review

The Results

| Category | Monthly Savings | Annual Savings | |----------|-----------------|----------------| | Zombie Resources | $1,200 | $14,400 | | Log Retention | $1,900 | $22,800 | | Dev/Staging Shutdown | $8,500 | $102,000 | | Savings Plans | $4,800 | $57,600 | | RDS Right-Sizing | $4,200 | $50,400 | | Graviton (Partial) | $1,600 | $19,200 | | Total | $22,200 | $266,400 |

Wait, that's more than $180K.

The blog title says $180K because that's what we committed to. We over-delivered.

More importantly: no performance impact. No engineering burden beyond the initial migration. Sustainable savings.

Lessons for Your Organization

1. The Easy Stuff Is Often Ignored

Zombie resources. Log retention. Dev environment schedules.

None of this is technically sophisticated. It just requires someone to look.

2. Savings Plans Are (Usually) No-Brainers

If you've been running stable workloads for 6+ months without commitments, you're overpaying. Period.

3. Right-Sizing Requires Courage

Nobody wants to downsize production infrastructure. "What if we need it?"

You almost certainly don't. Monitor, test, and be willing to reverse if needed.

4. Quick Wins Fund Bigger Changes

We generated $5,000/month in savings on Day 1 with 2 hours of work.

That bought credibility and breathing room for the harder changes later.

5. Monitoring > One-Time Fixes

The savings only stick if you maintain them. Zombie resources will return. Logs will grow. New waste will appear.

Ongoing vigilance matters more than one-time optimization.

LET US HELP YOU
CUSTOMER
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

Prefer to email us directly? support@finfan.cloud

We typically respond within 24 hours during business days.