Design

17. Scope and roadmap

What the game contains, the milestones, and open questions.

What the game contains#

The game runs all eight Eras, Garage to Public, in the browser. Paths that start with simulation/ are under packages/simulation/src/ (ADR 0004). Paths that start with packages/ or apps/ are from the repository root. All other paths are under apps/web/src/.

Board#

Code: packages/ui/src/board/board.ts

  • PixiJS board

  • Node cards that collapse to a chip with a load ring at low zoom

  • Links that show a cross-region round trip

  • Particles

  • The Bottleneck marker

  • Pan and zoom

Simulation#

Code: simulation/solve.ts, rules.ts, capacity.ts, distribution.ts, step.ts, director.ts, slo.ts, regions.ts, ipo.ts, valuation.ts, quarters.ts, preview.ts

Core model:

  • Pure flow solve, one rule per Component (simulation/rules.ts)

  • Capacity model and latency coupling

  • Connections and link timeouts

  • Apdex revenue

  • The Bottleneck search

Resilience:

  • Naive and backed-off retries

  • Circuit breakers and load shedding

  • Bulkheads and hedged Links

  • Graceful degradation

  • Chaos experiments

Traffic:

  • Load Balancer policies and health checks, and the Load Balancer's L4 variant

  • DNS TTL and GeoDNS

  • The CDN and WAF, Edge-side includes, and Bot management

  • The Gateway's token bucket

  • Keep-alive and gzip

  • Binary serialization between services

Data:

  • The Cache hit-ratio model and stampedes, and the Cache's four strategies

  • Replica lag

  • Partitions, hot keys, and quorum reads and writes

  • Distributed SQL

  • Backups with their restore roll and drill

  • The Database's engine, volume, shards, retention window and rows

  • Statement pooling

  • Denormalized reads and a Database's materialized view

  • The CDC Connector's change stream

  • The outbox and expand-and-contract

  • The Search Engine's refresh interval

  • Object Storage's class and lifecycle rules

Compute:

  • Queues and Workers with saved queue depth

  • Zones with cross-zone latency and egress

  • Standbys, copies, and the Autoscaler

  • Scheduled scaling and the ARM family

  • The Kubernetes Cluster

  • JVM and .NET warmup, and GC pauses

  • PHP-FPM process managers

  • Realtime connections and push fan-out

  • The GPU's precision and batch sizes

Money:

  • Egress and storage Burn

  • The Payment Provider and its fees

Regions:

  • Regions with regional demand and peaks

  • Cross-region latency and egress

Platform:

  • The Service Mesh's sidecars with their retries, breakers, Insight and Platform tax

  • Feature Flags' per-Feature rollouts

  • The certificate's calendar and its renewal

Time and incidents:

  • The 100 ms Step with logistic growth, OOM kills, warmup, alert fatigue, and first-kind Insight

  • The incident director with spike magnitude and escalation, a per-Era interval and severity cap, zone and region outages, and cascades from Series A

  • The SLO and its error budget

  • The valuation, the IPO checklist, the DR drill, and quarters

Team#

Code: simulation/team.ts, work.ts, migration.ts, features.ts, catalog/team.ts, catalog/work.ts, components/lab/team.ts

People:

  • The founder and hired engineers in up to 4 teams of five kinds (Product, Platform, SRE, Data and Security)

  • Policies, ramp-up, layoffs and morale

  • Coordination and tech debt

  • Salaries and signing costs

  • A per-engineer mood, page count and pay gap with three answers

  • Hiring in 11 languages

Work:

  • Dev Hours with upkeep on the live Features

  • The backlog with the autopilot and a block on each item

  • A runbook per incident kind

  • 29 Features with adoption and measured lift

  • 14 Engineering tasks

Shipping:

  • Deploys with Bad deploy rolls, rollback, and four deploy strategies

  • Stack migrations with the strangler steps

  • Pooler session, transaction and statement modes

Actions#

Code: simulation/actions.ts

  • Every player action, as a new Game or a refusal that says why

Catalog#

Code: simulation/catalog/*.ts (catalog.ts re-exports them)

  • All 38 Components in 05's overview

  • 17 user kinds and 14 backend kinds

  • 11 languages, 28 runtime variants, and 20 frameworks

  • 9 instance sizes in 5 families

  • 188 research items in 10 tracks

  • 8 Eras, 56 incidents, and 4 regions

  • Six axes and glossary terms for every runtime and framework

Prestige#

Code: simulation/exit.ts, founder.ts, founding.ts, playbook.ts, offline.ts, catalog/legacy.ts, catalog/ventures.ts, components/lab/legacy.ts, game/title.ts

  • Exits (Acqui-hire, Acquisition, IPO, Step down) paying Legacy

  • The Founder record (quorum.founder.v1) with company history

  • The Legacy shop (12 perks)

  • Playbooks with board multi-select and QPB1: text

  • 12 Ventures and 10 Mutators chosen on the title screen

  • Offline progress with a return summary

Challenges#

Code: simulation/challenges.ts, replay.ts, components/lab/challenge.ts, and in apps/backend/src/: contexts/challenges, platform/d1-result-store.ts

  • All 32 Challenges and the daily drill

  • QRP1: replays re-run by the API Worker (challengeSubmit, challengeHistogramGet)

  • Bests and histograms in D1 Results

  • The cross-engine golden check pnpm test:engines

Save#

Code: game/saves.ts, game/logos.ts, simulation/state.ts

  • Effect Schema for the Game, saved to local storage

  • Company files: a named, logo'd Company in an index (quorum.saves.v1) with one Game per Company (quorum.save.v3.<id>)

  • The Companies page, and the founding screen's name and logo

  • The old single save, migrated as the first Company and left in place with a hidden Settings recovery action

  • Company deletion

  • Export and import as text: one QSV1: line from Settings

  • A decoding default on every field added since the first release

UI#

Code: components/lab/ (tradeoff.ts), game/update.ts, game/feedback.ts

Panels:

  • HUD, build dock, and inspector

  • Region tabs

  • Research panel and Team panel

  • The HUD's work strip

  • The quarter panel

Inspector settings:

  • Load Balancer and its L4 variant, DNS, Cache, CDN, Queue, WAF and Bot management

  • Zone, standby, Autoscaler and its schedule

  • Call with its bulkhead and hedge, compression, process-manager

  • Region, quorum, spread, backup with its Restore drill, fan-out, key-split

  • Gateway with its token bucket, deploy-strategy, database-engine, volume, shard, retention, storage-class, lifecycle and cache-strategy settings

  • The Database's materialized view, the GPU's precision and batch, the App Server's graceful degradation, and the Search Engine's refresh

  • The Feature Flags' rollouts and the certificate's state

Reliability and incidents:

  • The SLO, its error budget and the SLA credit in the HUD and the SLO row

  • The IPO checklist with the DR drill

  • The Certificate bar with Renew

  • The Team panel's Chaos switch

  • The Bad deploy bar with Roll back

  • Pager with Ignored rules, and postmortems with their MTTD, MTTA and MTTR

  • The Incident timeline's not-seen and awaiting-ack spans

  • The Drain action

Feedback:

  • Card sparklines and p99

  • The Settling ring, Stable, and the delta toast

  • Undo and Redo over 50 actions

  • Tradeoff cards with the radar and preview

Sandbox#

Code: simulation/sandbox.ts, components/lab/sandbox.ts

  • Garage, Pre-seed, Seed, Series A, Series B, and Series C Sandbox tracks (18 guided Sandboxes)

  • The free Sandbox

  • The Sandbox menu

Balance tools#

Code: simulation/pacing.ts, solve.bench.ts, and in packages/simulation/test/: balance.test.ts, dominance.test.ts, pacing.test.ts, bots.test.ts

  • Runtime balance targets

  • The Balanced, Greedy, Stubborn, Decliner, Polyglot, and Idle pacing bots (which hire and ship Features) with margins

  • A 200-Node and preview benchmark

Tests#

Code: packages/simulation/test/, packages/simulation/engines/

The suite is one end-to-end suite with no unit proofs. It covers:

  • The whole catalog, built and run

  • Every incident

  • The guided Sandboxes

  • Every Challenge

  • The Balanced bot's playthrough

  • Purity

  • The cross-engine check

The balancing document records the live tuning and what the checks cover.

Scope rules#

  • The Simulation is a pure module with no UI imports, so it runs in tests, in the offline simulation, in Challenge verification on the server, and in the Tradeoff card preview.

  • Sandboxes run only in the browser. They need no server, no account, and no histogram, so they ship with the milestone that adds their mechanics, not with Challenges in M8.

  • The browser owns the company simulation (ADR 0002). The API Worker owns only what needs a server: Challenge verification, histograms, and the daily drill. Those contracts go in packages/rpc and their handlers in apps/backend, as the repository guide requires.

  • Content is data. A new Component, runtime, kind, incident, or research item is a catalog entry plus, at most, one new rule in the solver.

Milestones#

Each milestone is playable on its own and ends with the pacing bots and the dominance rule holding for the content it includes.

#MilestoneContentsExit check
M0Design and vocabularyThese documents, CONTEXT.md, ADR 0002Reviewed
M1Real capacity modelInstance types, concurrency models, memory limits, the latency coupling, Apdex revenue, logistic growth, connection limits, the bottleneck markerRuntime balance targets pass (Balancing). The margin bot passes (Cost index).
M2Garage and Pre-seed completeKinds page to login; PHP, Ruby, Node.js, Python with their early variants; Cache, Pooler, Replica, DNS, Load Balancer; visibility steps 0–4; first incidents; the Garage and Pre-seed Sandbox tracksBalanced bot reaches Seed on every seed, at 26.8–35.7 sim minutes at the Challenge pace. Each guided Sandbox passes with its fix and fails with its wrong option.
M3Tradeoff cards and previewThe six-axis card, the ghost-simulation preview, Settling and Stable, delta toasts, undo; the free SandboxPlaytest: players predict the effect of a Stack change
M4Team and Dev HoursHiring, teams, backlog, features, tasks, migrations, tech debt, deploy frequencyStubborn and Polyglot bots within limits
M5Seed to Series BKinds to ai; Go, Java, C#, Elixir, Rust; Queue, Worker, Serverless Function, CDN, WAF, Search, Object Storage, zones, Autoscaler, Kubernetes, Warehouse, GPU; SLOs; incident director; the Seed, Series A, and Series B Sandbox tracksBalanced bot raises Series B at 91–106 sim minutes on seeds 1–5 (pacing.test.ts); it does not reach Series C in that run, and 03's 6–10 h is a human player's pace, not the bot's
M6Series C to PublicRegions as boards, quorum stores, distributed SQL, the IPO checklist, quarters; the Series C Sandbox trackBalanced bot reaches IPO in 9–12 hours
M7Exit and LegacyExits, the Legacy shop, Playbooks, Ventures, Mutators, company historySecond company 3–6 hours
M8ChallengesChallenge mode, server verification, histograms, the daily drillGolden-hash replays match in Chromium, Firefox, WebKit, and the API Worker runtime (Determinism)
M9PolishAccessibility, sound, achievements, the in-game glossaryAccessibility checklist passes

Vertical slice gate. The catalog is large, so no content for M5 or later is written until M2 is playable and a playtest shows that players meet a new bottleneck every few minutes (pillar 3). If the slice fails that test, fix the loop before adding Components.

Out of scope#

  • Multiplayer and shared companies.

  • Accounts beyond what Challenge histograms need.

  • Paid currency of any kind.

  • A simulated Kubernetes cluster (ADR 0002).

  • A mobile design target. Below 640 px wide or 500 px tall the screen switches to a compact layout (the Inbox panes stack, and the toolbar folds rarely used controls into More), but the board needs space, so the game is tuned for larger screens.

Open questions#

QuestionNotes
Does the Team system make the idle part too busy?The fallback is the autopilot (on by default). It queues the next Feature, refactors at 30% debt, and shifts built migration steps, so a player who ignores the Team still progresses. Whether the Team is too busy still needs a playtest.
Is 100 ms the right step for 200 Nodes with the latency coupling?Measured in M1 (solve.bench.ts, Node.js 26): one solve of a 200-Node board takes about 24 ms and the Bottleneck search about 24 ms, against budgets of 2 ms and 3 ms. Boards have 5 to 20 Nodes (the Pre-seed start solves in 0.23 ms), so the 100 ms Step stays. The solver needs about 12× before M5 boards.
Do players keep Mirrors in sync before GitOps?A Mirror stays linked to its source, drift is its failure mode, and gitops trades drift for blast radius (Keeping a Mirror in sync). Playtest: count how long Mirrors stay behind, and whether players who pick Pulumi or Alchemy forget to refresh before they Apply.
Is the Region outage weight fair to a player who has not built a second region?The director raises it from 0.5 to 3.0 when multi-region is researched (Incidents). With Users per region, the outage hits only home users, and a Mirror makes the fix cheap. Measure again once both exist.
Should regions be separate boards or one large board?ADR 0005 decides it: one Design, one tab per region. A tab shows its region's Nodes and the remote Nodes they call.
How visible should runtime stereotypes be in copy?Copy names behaviors ("holds a worker while waiting"), never judgments ("slow language").
Do Challenge histograms need an account?Prefer an anonymous device ID with optional sign-in.
How do we keep real outage references respectful?Name the event and the year, link the public postmortem, and never mock the company.
Does the free Sandbox spoil discovery?It unlocks everything from the start. Fallback: unlock each Component in the free Sandbox when the player meets it in a Company or a guided Sandbox.
Does the Dashboard pull players off the Board?The Dashboard shows only history (Observability). Playtest: count how often players find the bottleneck from the Dashboard instead of the Board. If it is more than one time in five, remove the per-Node Charts from the Overview row.
Should the Public Era have an end?No end, but the Step down Exit gives a natural stopping point with a score.