Break prod on purpose.
Fix it under pressure.
Debug real broken services in throwaway sandboxes. Vague tickets, misleading signals, programmatic verification, and senior-perspective postmortems — the kind of practice you usually only get from an actual 2 a.m. incident.
New to DevOps? Start with the field guide.
$ sim start 001 ▸ provisioning sandbox........ ok ▸ seeding broken state........ ok # ticket #001 checkout returns 500 in prod. "it was fine an hour ago." $ sim verify 001 ✗ still broken (exit 1) — your move. $
Scenarios
11 ready · 3 in progress| ID | Type | Pillar | Est | Scenario | State |
|---|---|---|---|---|---|
| 001 | docker-compose | lifecycle | 10m | [SUP-4471] New signups failing — multiple customer reports | ready |
| 002 | docker-compose | networking | 15m | [SUP-4502] Users report being logged out constantly | ready |
| 101 | k8s | lifecycle | 15m | [PLAT-220] new web deploy isn't going Ready in staging | ready |
| 102 | k8s | networking | 15m | [OPS-1340] `web` service returns connection refused — pods are fine | ready |
| 103 | k8s | efficiency | 20m | [PLAT-241] `cache-api` restarts every few seconds in staging | ready |
| 104 | k8s | lifecycle | 20m | [PLAT-256] `web` deploy stuck — pod never reaches the app container | ready |
| 105 | k8s | lifecycle | 25m | [PLAT-263] `search` service won't stay up after deploy — but the code is fine | ready |
| 106 | k8s | lifecycle | 25m | [PLAT-271] did the `web` v2.3 deploy actually ship? dashboard still says "in progress" | ready |
| 107 | k8s | lifecycle | 20m | [PLAT-288] `reports` deployment stuck at 0/1 — pod exists but never runs | ready |
| 108 | k8s | state | 30m | [OPS-1402] new `ledger` service won't start — pod Pending, storage never attaches | ready |
| 201 | k8s | efficiency | 25m | [COST-204] `report-generator` runs 24/7 but only does ~1 minute of work a day | ready |
| 003 | docker-compose | state | 15m | [OPS-1188] Orders entered yesterday are gone this morning | stub |
| 004 | docker-compose | efficiency | 30m | [DX-882] Every deploy takes 2+ minutes — devs are frustrated | stub |
| 109 | k8s | lifecycle | 35m | [OPS-1419] `api` fails intermittently — maybe 1 request in 3 — can't pin it down | stub |
How it works
Request access
Tell us who you are. Accounts are vetted by hand — you get a sign-in link once approved.
Add your SSH key
Paste a public key on your profile. That key unlocks git clone of the simulator over SSH.
Run a scenario
sim start NNN spins up a self-contained broken sandbox. Read the ticket, form a theory, dig in.
Verify & learn
sim verify NNN checks state, not steps. Solve it, then read how a senior would have approached it.
$ git clone git@sim.metisops.com:devops-simulator.git $ cd devops-simulator $ bin/sim list # what's available $ bin/sim start 001 # spin up a broken sandbox $ bin/sim ticket 001 # read the ticket $ bin/sim verify 001 # exit 0 = solved
Verify checks state, not steps. Multiple fix paths pass — just like real systems where a junior's fix and a senior's fix both ship.
Tickets are vague the way real tickets are vague. Hints unlock on demand. Postmortems stay hidden until you solve it.
Every scenario ends with how an experienced engineer would have debugged it — and the followups they'd file to kill the bug class.