Cloud Exit: 37Signals and the "Unclouding" Trend

devops infrastructure cloud

37Signals (Basecamp, Hey) left AWS in 2023-2024, claiming $7M in annual savings. Others followed. Is “cloud exit” a trend, or are these outliers? Let’s analyze.

The 37Signals Case

The Numbers

What They Did

  1. Bought servers and colocation space
  2. Built their own Kubernetes-like platform (MRSK/Kamal)
  3. Migrated incrementally
  4. Kept some cloud services (S3, CDN)

Why It Worked for Them

Who’s Following

Confirmed Exits

Partial Exits

Companies moving specific workloads:

The Economics

When Cloud is Expensive

High bandwidth + stable load + long-term = Cloud premium
FactorCloud CostOn-Prem Cost
Compute (stable)$$$$
Bandwidth/Egress$$$$$
Storage (large)$$$$
Variable workload$$$$
Burst capacity$$$$

When Cloud Makes Sense

Variable load + burst needs + operational simplicity = Cloud wins

The Hidden Costs of Exit

Hardware Management

Servers: $500K
Networking: $100K
Storage: $150K
+ Colocation: $15K/month
+ Spares: 20% overhead
+ Refresh cycle: 4 years
= Much more than purchase price

Operational Burden

TaskCloudOn-Prem
Hardware failureProvider problemYour problem
Capacity planningElasticYou plan
Security patchingManaged optionsAll you
Disaster recoveryBuilt-in optionsYou build
Compliance certsProvider providesYou prove

Talent Requirements

Cloud: Developers who know AWS On-Prem: System admins, network engineers, security specialists

Can you hire and retain this talent?

Hybrid Approaches

What Most Companies Actually Do

├── Core workloads: On-prem/colo
├── Burst capacity: Cloud
├── CDN/Edge: Cloud providers  
├── Managed databases: Cloud
└── Blob storage: Cloud (S3 compatible)

The “Best of Both” Stack

# On-prem
- Application servers
- Primary databases
- Processing pipelines

# Cloud
- CDN (Cloudflare)
- Object storage (S3/compatible)
- Disaster recovery
- Traffic spikes
- Global edge locations

Tools for the Exit

Kamal (from 37Signals)

# config/deploy.yml
service: myapp
image: myapp

servers:
  web:
    hosts:
      - 192.168.0.1
      - 192.168.0.2
  workers:
    hosts:
      - 192.168.0.3

traefik:
  options:
    publish:
      - "443:443"
    volume:
      - "/letsencrypt:/letsencrypt"

Deploy Docker containers without Kubernetes complexity.

Talos Linux

Kubernetes-focused OS:

Colocation Providers

Should You Exit?

Exit Makes Sense If

Stay in Cloud If

The Decision Framework

def should_exit_cloud(company):
    factors = {
        'workload_stability': stability_score(),  # 0-1
        'cloud_spend': monthly_spend() > 50000,
        'ops_capability': ops_team_strength(),  # 0-1
        'growth_predictability': predictability_score(),  # 0-1
        'egress_heavy': egress_percentage() > 0.3,
    }
    
    score = sum(factors.values()) / len(factors)
    
    if score > 0.7:
        return "Consider exit"
    elif score > 0.5:
        return "Hybrid approach"
    else:
        return "Stay in cloud"

The Real Trend

Cloud isn’t dying. But the “cloud-only” era is ending.

2015-2020: “Everything to the cloud” 2020-2025: “Actually, let’s calculate” 2025+: Rational hybrid decisions

Final Thoughts

37Signals’ exit worked because of their specific situation. It’s not a template—it’s a data point.

Run the numbers for your workload. Consider operational costs, not just infrastructure. Make decisions based on your company, not trends.

The cloud is a tool, not a religion. Use it where it makes sense.


The best infrastructure is the one you can actually operate.

All posts