# Cloud Costs Are Destroying Startup Margins

AWS bills that exceed engineering salaries are normal now. Startups with 100,000 users paying $50,000/month for infrastructure that could run on a $200/month dedicated server.

Cloud infrastructure is convenient. It's also absurdly expensive once you move beyond toy projects. And the costs compound in ways that aren't obvious until you're locked in.

# The Real Cost Comparison

**Scenario**: A typical SaaS startup with 100k users, ~500GB database, moderate traffic

**AWS**:

* RDS (db.r5.xlarge): $500/month
    
* EC2 instances (3x m5.large for redundancy): $450/month
    
* Load balancer: $25/month
    
* Data transfer out: $500-2,000/month (depending on traffic)
    
* S3 storage and requests: $200/month
    
* CloudFront: $100/month
    
* Backups, snapshots, logs: $150/month
    
* Monitoring, alerts: $50/month
    

**Monthly total**: $2,000-3,500/month

**Hetzner dedicated server** (AX102):

* CPU: AMD Ryzen 9 7950X (16 cores)
    
* RAM: 128GB
    
* Storage: 2x 3.84TB NVMe SSD
    
* Bandwidth: Unlimited at 1Gbit/s
    

**Monthly total**: €200 (~$220/month)

The AWS bill is **10-15x higher** for comparable resources. And that's before costs balloon with scale.

# Hidden Costs

Cloud vendors bury costs in fees most startups don't anticipate.

**Data transfer (egress) fees**

AWS charges $0.09/GB for data transfer out. Seems small until you do the math:

* 100k daily active users
    
* Average 5MB per session
    
* 500GB/day = 15TB/month
    
* 15TB × $0.09 = **$1,350/month just for bandwidth**
    

Hetzner: Included. No egress fees.

**Cross-region transfer**

Moving data between AWS regions costs $0.02/GB. If your database is in us-east-1 and your app servers are in us-west-2, every query costs money.

**NAT Gateway**

Need private subnets to access the internet? $0.045/GB processed + $0.045/hour. Easily $50-100/month for basic usage.

**Load balancer fees**

Application Load Balancer: $0.0225/hour + $0.008/LCU. Minimum ~$16/month, realistically $25-50/month.

**Reserved instances trap**

"Save 30-60% by committing to reserved instances!"

You commit to 1-3 year contracts. Your usage patterns change. You're stuck paying for resources you don't need while also paying for the resources you actually use.

**Support fees**

Basic support: Free (but useless, 24-hour response time for production issues) Developer: $29/month minimum or 3% of AWS bill Business: $100/month or 10% of AWS bill (minimum for 1-hour response)

If your monthly bill is $10,000, business support costs $1,000/month on top of that.

# Compounding Cost

Cloud costs don't scale linearly. They compound.

**Example progression**:

**Month 1-6 (MVP)**: $200/month - single small instance, small database **Month 7-12 (early traction)**: $800/month - added load balancer, bigger database, redundancy **Month 13-18 (growing)**: $3,500/month - multi-region, CDN, caching layer, monitoring **Month 19-24 (scaling)**: $15,000/month - auto-scaling, managed services, increased traffic **Month 25+ (mature)**: $50,000+/month - everything costs more at scale

Revenue might grow 10x. Infrastructure costs grow 250x.

# Why Startups Use Cloud Anyway

If cloud is so expensive, why does everyone use it?

**Speed to market**

Provisioning a server takes minutes on AWS. Buying hardware takes weeks. Early-stage startups optimize for speed, not cost.

**No upfront capital**

Buying servers requires cash. AWS is OpEx, not CapEx. Startups short on cash choose monthly bills over hardware purchases.

**Scaling flexibility**

Need 10x capacity for a product launch? Spin up instances. Traffic drops after? Scale down. With owned hardware, you're stuck with excess capacity.

**Managed services**

RDS handles database backups and failover. S3 handles file storage. Lambda handles compute. No DevOps engineer needed (initially).

**Investor expectations**

VCs expect startups to use cloud infrastructure. Saying "we run on bare metal" raises questions about scalability.

**Developer preference**

Engineers want AWS/GCP/Azure on their resume. Managing physical servers feels outdated.

# When Cloud Costs Break Startups

The breaking point comes when infrastructure costs exceed engineering salaries.

**Real example** (anonymised):

SaaS company, $2M ARR, 15 employees

* Engineering team (5 people): $750k/year
    
* AWS bill: $960k/year
    

Infrastructure costs more than the team building the product.

Gross margin: 52% (should be 80%+ for SaaS) Path to profitability: Unclear because AWS costs grow faster than revenue

# The Margin Destruction

Typical SaaS metrics:

* Target gross margin: 80%+
    
* Customer acquisition cost: $500-2,000
    
* Lifetime value: $5,000-20,000
    

When cloud costs consume 40-50% of revenue:

* Gross margin: 50-60%
    
* Less capital for growth
    
* Longer path to profitability
    
* Less attractive to investors/acquirers
    

Cloud vendors effectively tax your revenue at 30-50%. And the tax rate increases with scale.

# Repatriation

Companies are moving off cloud to save money.

**37signals (Basecamp, Hey)**:

Moved off cloud, saved $7 million over 5 years. Bought hardware, colocated in data centers. Margins improved dramatically.

**Dropbox**:

Moved storage off AWS to owned infrastructure. Saved $75 million over 2 years.

**Discord**:

Moved from MongoDB Atlas to ScyllaDB on owned hardware. Saved millions annually while improving performance.

The pattern is that companies hit scale, realise cloud costs are destroying margins, migrate to owned infrastructure.

# Migration

"Just move off cloud" sounds simple. It's not.

**Vendor lock-in**

Built with AWS Lambda, API Gateway, DynamoDB, and SQS? That's AWS-specific. Migration requires rewriting.

**Operational complexity**

Moving to owned infrastructure means:

* Managing hardware failures
    
* Handling network issues
    
* Maintaining security
    
* Scaling manually
    
* Hiring DevOps/SRE team
    

**Upfront costs**

Buying servers and colocation contracts requires capital. Startups operating on VC runway don't have it.

**Risk**

Cloud providers have SLAs. Owned infrastructure means you're responsible for uptime. One mistake costs customers.

**Time**

Migration takes months. Engineering time spent migrating isn't spent building features. Opportunity cost is massive.

# What I Do

For early-stage projects: I use cloud. Speed matters.

For projects with revenue: I run numbers monthly. When cloud costs hit 15-20% of revenue, I start planning migration.

For established projects: Hybrid approach. Owned infrastructure for predictable workloads, cloud for spikes and backups.

I don't pay AWS for bandwidth that's free elsewhere. I don't pay for managed services I can run myself. I don't commit to reserved instances.

# Final Thoughts

Cloud infrastructure is a tool. It's not a requirement.

Early on, cloud makes sense: fast provisioning, no upfront costs, managed services. The cost is worth the speed.

At scale, cloud is a tax on your revenue. Companies with mature products running on AWS are often paying 10-15x what the same infrastructure costs elsewhere.

The migration path exists. It's just painful, which is exactly why cloud vendors designed it that way.

If your AWS bill exceeds your engineering salaries, you have a problem. If your gross margins are below 70% because of infrastructure costs, you're building a less profitable business than necessary.

Cloud vendors have successfully convinced the industry that expensive infrastructure is inevitable. It's not. It's a choice.

Choose deliberately.
