How 37signals Saved $10M by Leaving AWS for Owned Hardware
37signals moved HEY and Basecamp off AWS to owned servers, projecting over $10M in savings over five years. The lesson: cloud economics invert at scale.
Infrastructure · intermediate · 12 min read · 2065 words · By Sandip Das · Published
Public postmortem: based on what the organisation published. Sources are listed below.
What this covers
- Background
- What Happened
- Root Cause
- Detection and Response
- Impact
- The Fix
- Lessons for Your Team
- Apply It Yourself
Key numbers
| Metric | Before | After |
|---|---|---|
| Annual AWS spend (HEY and Basecamp combined) | ~$3.2M per year | Projected well below $2M/yr equivalent on owned hardware |
| Projected 5-year savings | $0 (no exit) | Over $10M over five years |
Key components
- EC2 / RDS / ElastiCache — The AWS managed services that provided compute, database, and caching — replaced by owned equivalents running directly on bare metal.
- Co-location data center — Physical facility providing power, cooling, and network connectivity for 37signals' owned servers, removing the need to operate a private data center.
- Five-year TCO model — The financial analysis comparing amortized hardware capex plus co-lo opex against ongoing cloud spend — the analytical tool that justified the migration.
- Systems administrator hire — The organizational prerequisite for the migration: a person with the skills to operate MySQL, Redis, and Linux directly on bare metal without managed-service abstractions.
- HAProxy — Open-source load balancer used to replace AWS ALB in the owned-hardware architecture.
Background
37signals is the company behind Basecamp and HEY, a project management tool and an email service respectively. Both products run on Ruby on Rails and serve hundreds of thousands of paying customers. The company is privately held, bootstrapped, and famously opinionated about software and business.
For most of their modern infrastructure history, 37signals ran on AWS — EC2 for compute, RDS for MySQL, ElastiCache for Redis, S3 for object storage, CloudFront for CDN. This is a completely conventional, well-understood stack. The decision to leave it was not driven by technical failure but by a financial reckoning that DHH documented publicly in late 2022 and updated in 2023.
This case is unusual in the postmortem genre: nothing broke catastrophically. The "incident" was a slow-motion cost accumulation that only became visible when someone did the arithmetic carefully. That makes it more instructive, not less — most infrastructure decisions that cost companies money never produce an outage ticket.
The rest of this case study — the trade-offs, the scaling numbers and the build prompt — is available to LearnXops members. Create an account or see membership.
Sources
- DHH: Why we're leaving the cloud
- DHH: Our cloud-exit savings will now top ten million over five years
Topics: infrastructure, cost-optimization, cloud-exit, bare-metal, capacity-planning
Related case studies
- How a 120-Engineer SaaS Company Migrated from One AWS Account to a Multi-Account Landing Zone
- How a B2B SaaS Team Cut CI and Batch Costs by 70% Using Spot Instances Without Losing Jobs
- How a B2B SaaS Team Cut Their AWS Bill by 40% with Rightsizing, Graviton, Savings Plans and S3 Lifecycle Policies
- How a B2B SaaS Team Split a 4,000-Resource Terraform Monolith Into Modules Without Downtime
- Lift-and-Shift to AWS First, Then Modernise: How a B2B SaaS Company Escaped the Data Centre
- The 2017 Amazon S3 Outage: One Mistyped Command and the Cost of a Slow Restart