How 37signals spent $3.2 million on AWS in one year and why they decided to leave the cloud entirely—and what this means for your SaaS.

9 min read

The $3.2 Million Question

The Day 37signals Shared Their AWS Bill

On January 13, 2023, David Heinemeier Hansson (DHH), CTO of 37signals, published a blog post that shook the SaaS industry. He revealed something most companies keep secret: exactly how much they spent on Amazon Web Services in 2022.

The number was staggering: $3,201,564.

That is $266,797 every month. For context, that is more than most SaaS companies spend on their entire engineering team. And 37signals was already considered efficient at cloud usage.

The Breakdown

DHH shared the full breakdown of their AWS spend:

Service Annual Cost What It Does
S3 $907,838 File storage for user uploads
EC2/EKS $759,983 Virtual servers and Kubernetes
OpenSearch $519,959 Search functionality
RDS $473,196 Managed databases
ElastiCache $123,852 Managed Redis
CloudFront $66,742 Content delivery network

Their email service HEY alone—one product—consumed $1,066,150 per year. Just HEY's RDS database cost $355,950. Its compute resources (EC2/EKS) cost another $272,359.

The Decision

37signals did not publish these numbers to complain. They published them to explain a decision they had already made: they were leaving AWS entirely.

"We have made the decision to leave the cloud," DHH wrote. Not just reduce usage. Not optimize costs. Leave.

Over six months, they:

  • Leased rack space at two Deft data centers (Ashburn, VA and Chicago, IL)
  • Purchased Dell servers for four 48U cabinets
  • Migrated Basecamp, HEY, and their legacy applications
  • Achieved zero customer downtime during the migration

The Result

Six months later, 37signals shared the outcome:

Cost: Their infrastructure now costs "far, far less" than their AWS bill. While they have not published exact post-migration numbers, DHH stated the savings were over $1 million annually.

Performance: "Our apps are faster than ever."

Control: No more surprise bills. No more service limits. No more complexity tax.

Infrastructure: Approximately 90 servers across two data centers, running their own hardware, managed by their own team of four people.

Why This Story Matters for Your SaaS

You are probably not spending $3.2 million on AWS. But the principles that drove 37signals' decision apply at any scale:

The Cloud Tax at $10K MRR

Meet a typical bootstrapped SaaS founder running on AWS:

Service Monthly Cost Annual Cost
EC2 instances (2) $140 $1,680
RDS database $200 $2,400
ElastiCache $50 $600
S3 storage $30 $360
Data transfer $80 $960
CloudWatch $40 $480
Total $540 $6,480

This founder has 500 paying customers at $20/month—$10,000 MRR. They are spending 5.4% of revenue on infrastructure alone. Add in the complexity of managing seven different AWS services, and the real cost is higher.

The Alternative

The same application on a single VPS:

Setup Monthly Cost Annual Cost
Hetzner CPX31 (4 vCPU, 8GB RAM) €13.60 (~$15) ~$180
Backups Included -
Bandwidth 20TB included -
Total ~$15 ~$180

Annual savings: $6,300

That is real money for a bootstrapped founder. More importantly, it is one server to manage instead of seven services.

The Dropbox Precedent: Escaping S3

37signals was not the first major company to leave the cloud. Dropbox made an even bigger bet years earlier.

In 2016, Dropbox announced they had built their own storage system called Magic Pocket. They moved 500 petabytes of data (that is 500,000 terabytes) off Amazon S3 and onto their own custom-built infrastructure.

The Economics of Exabyte Scale

Dropbox explained their decision in a 2016 blog post:

"We realized that we were leaving a lot of money on the table. At our scale, it made sense to build our own storage infrastructure."

The math was simple: at their scale, the "cloud premium"—the extra cost of using managed services—was tens of millions of dollars per year.

Building Magic Pocket required:

  • Custom server hardware designed for storage density
  • A proprietary software system to manage data across those servers
  • A team of engineers to build and maintain it all

But the savings were massive. Dropbox estimated they saved over $75 million in the first two years after the migration.

What Small SaaS Can Learn

You are not Dropbox. You are not storing exabytes of data. But the principle applies:

When your infrastructure becomes predictable, renting becomes expensive.

Cloud services charge a premium for flexibility. If your SaaS runs 24/7 with steady traffic (which most do after the early days), you are paying for flexibility you do not use.

Why Companies Leave the Cloud

Both 37signals and Dropbox left the cloud for the same reasons that apply to SaaS companies at any scale:

1. Predictable Workloads

Cloud pricing assumes variable demand—spikes, drops, unpredictability. But most SaaS has steady-state usage:

  • Users log in every day
  • Background jobs run on schedules
  • Storage grows predictably

When demand is predictable, renting by the hour or request is expensive.

2. The Complexity Tax

37signals' AWS bill had line items for 47 different services. Each service has:

  • Its own configuration
  • Its own monitoring needs
  • Its own failure modes
  • Its own learning curve

As DHH put it: "The cloud is a complexity trap."

3. Vendor Lock-in

The more AWS services you use (RDS, ElastiCache, Lambda, etc.), the harder it becomes to leave. Your code becomes dependent on proprietary APIs and behaviors.

37signals was able to leave because they used AWS as "dumb servers"—basic EC2 instances they could replace. Companies deep into AWS-specific services face a much harder migration.

4. Surprise Bills

AWS pricing has 947 different line items. Data transfer costs alone have dozens of variables. Even experienced teams get surprised by bills.

A $5/month VPS does not surprise you. You know exactly what you are paying.

The Elixir Advantage: Independence from Day One

Here is where Elixir becomes relevant to this story.

37signals could leave AWS because they run Ruby on Rails—a mature, efficient framework that does not require complex infrastructure. But Elixir takes this efficiency further.

What Makes Elixir Different

Elixir runs on the BEAM virtual machine (Erlang's runtime), which was built for telecommunications systems that must never go down. This gives Elixir applications three characteristics that matter for infrastructure costs:

  1. Massive concurrency: One server handles what takes 10 in other languages
  2. Fault isolation: One failure does not crash the whole system
  3. Built-in distribution: Adding servers is simple when you need them

The Math

A single Elixir server can typically handle:

  • 10,000+ concurrent WebSocket connections
  • Thousands of requests per second
  • Background job processing
  • In-memory caching
  • All on a $5-15/month VPS

To match this with a traditional stack:

  • Python: 5-10 servers + Redis + Celery
  • Node.js: 3-5 servers + clustering + Redis
  • Java: 2-3 large servers + Kubernetes

The infrastructure savings compound. You are not just saving on server costs. You are saving on:

  • Database costs (fewer connections needed)
  • Caching services (built into the language)
  • Job queues (built into the language)
  • Load balancers (not needed until massive scale)
  • Monitoring complexity (fewer services to watch)

The Real Cost Comparison

Let us look at what you actually pay at different stages:

Pre-Revenue (Building the MVP)

Stack Monthly Cost What You Manage
Elixir on VPS $5 One server
Python on AWS $150-300 EC2, RDS, ElastiCache, S3
Node.js on serverless $50-200 + surprises Lambda, API Gateway, DynamoDB

Early Traction ($10K MRR)

Stack Monthly Cost Team Required
Elixir on VPS $15-40 One full-stack developer
Python on AWS $500-800 Backend + DevOps
Node.js microservices $400-600 Backend + Frontend + DevOps

Growth Phase ($100K MRR)

Stack Monthly Cost Infrastructure Team
Elixir on dedicated $200-500 1 person
Python on AWS $3,000-5,000 2-3 people
Node.js on Kubernetes $2,500-4,000 3-4 people

These are not theoretical numbers. They are based on actual company reports and industry benchmarks.

When the Cloud Still Makes Sense

Leaving the cloud is not right for everyone. Both 37signals and Dropbox had specific conditions that made it work:

  1. Predictable, steady-state workloads
  2. Technical teams capable of managing hardware
  3. Scale where the savings justify the effort
  4. Simple architecture without complex service dependencies

The cloud is still the right choice for:

  • Variable workloads: If your traffic spikes 100x unpredictably
  • Global presence: If you need data centers on every continent
  • Early experimentation: When you do not know if the product will work
  • Complex managed services: When you genuinely need ML, big data analytics, etc.

But for most SaaS companies—steady growth, predictable usage, straightforward web applications—the cloud premium is money that could be spent on product or kept as profit.

What This Guidebook Will Show You

Over the next chapters, we will explore how Elixir enables infrastructure independence:

  1. Who Uses Elixir (And What They Saved) — Discord, Bleacher Report, and companies that cut infrastructure by 90%
  2. Why Your Programming Language Is a Business Decision — Lessons from Ford vs. Toyota and Southwest Airlines
  3. The Serverless Trap — Real pricing that explains why per-request billing adds up
  4. The One-Server SaaS — What you can actually run on minimal hardware
  5. Reliability as a Feature — How Elixir's fault tolerance translates to sleep and customer trust
  6. The Team Size Multiplier — Why WhatsApp served 450M users with 35 engineers

By the end, you will understand:

  • Whether infrastructure independence makes sense for your stage
  • How to evaluate your current infrastructure costs
  • What Elixir actually means for your budget and team
  • How to make technology decisions with concrete numbers

Key Takeaways

  1. 37signals spent $3.2M/year on AWS and left to save over $1M annually
  2. Dropbox saved $75M in two years by building their own storage infrastructure
  3. The cloud charges a premium for flexibility—if your workload is predictable, you pay for what you do not use
  4. Elixir enables efficiency from day one—one server does the work of 5-10 in other languages
  5. Infrastructure independence is possible at any scale—starting with a $5/month VPS

What is Next

In Chapter 2, we will look at companies that chose Elixir and what they saved. Discord runs 25 million concurrent users with under 50 engineers. Bleacher Report cut their servers from 150 to 5 while handling 8x more traffic. These are not technical achievements—they are business decisions with measurable outcomes.