Design

3. Game loops

The six nested loops, from a two-second glance to a hundred-hour mastery goal.

Quorum has six nested loops, and each feeds the one above it. A short loop must pay off before the player loses interest, and a long loop must give a reason to keep playing the short ones.

LoopNameWhat the player doesHow long it runs
L5MasteryChallenges, daily drills, histogramsUnbounded
L4CompanyFound → Eras → Exit → Legacy6–15 hours
L3EraRaise → new kinds → new failure mode30–120 minutes
L2GrowthUsers ↑ → demand ↑ → spend → research5–20 minutes
L1BottleneckObserve → diagnose → change → settle30 seconds–3 minutes
L0PulseGlance → collect → react1–10 seconds
InterruptIncidentAlert → triage → mitigate → resolve → postmortemWhenever one starts

L0: Pulse (1–10 seconds)#

The player glances at the board.

  1. Glance. Particles move. A card turns amber. The $/s number ticks.

  2. Collect. Revenue piles up in the Payments drawer. The player clicks to collect it. Research "Stripe Billing" automates this (Progression).

  3. React. The player clicks Upgrade on a red card, or ignores it.

The pulse gives an idle player a small, satisfying action at any moment. It becomes automatic by the end of the Garage Era, because a pulse that never changes turns into a chore (pillar 5).

L1: Bottleneck (30 seconds to 3 minutes)#

This is the core loop: Factorio's loop, applied to requests.

the bottleneck movesObserveDiagnoseChangeSettleMeasure
StepWhat the player doesWhat the game provides
ObserveReads the board: load bars, stranded requests, latency, errors.Node cards and the bottleneck marker (Interface).
DiagnoseAsks why. Is the box out of CPU, out of workers, out of memory, or waiting on the database?The diagnosis depends on how much the player can see (Observability).
ChangePicks one action: upgrade, place, rewire, change runtime, change a setting, or remove a Node.Each action has a cost and a Tradeoff card (Interface).
SettleWaits a few seconds while queues drain and caches warm.The HUD shows "Settling" and then "Stable" (Interface).
MeasureCompares $/s, p99, and error rate before and after.A delta toast, for example "+$1.40/s (+18%), p99 −120 ms".

Rules that keep this loop deep:

  • One tightest Node. The simulation is a flow network. At any time, one Node limits each request path (Simulation).

  • Several kinds of bottleneck. A Node can run out of CPU, workers, memory, connections, disk I/O, or network. Each needs a different fix, and more hardware fixes only some of them.

  • Fixes have side effects. A cache removes database load but adds staleness. A replica adds read capacity but adds replication lag. More app servers add database connections.

  • The bottleneck moves both ways. Faster app servers send more queries to the database, and a faster database lets app servers finish sooner, which frees workers.

L2: Growth (5 to 20 minutes)#

Apdex ≥ targetUsers ↑Demand ↑Load ↑L1 loopServedCashCapacity
ServedSampledInsightResearchMore demand per user,new mix, more revenueper requestDev hoursFeatures
  • Users grow while the design keeps Apdex above the Era target, and they leave when it drops (Simulation).

  • Cash buys capacity. Insight buys research. Dev Hours buy features, migrations, and fixes (Economy).

  • Features raise revenue and change the request mix. A successful feature creates load, so it feeds the L1 loop again (Team and velocity).

  • Growth follows an S-curve toward the Era's market size, so growth slows near the cap. The player needs a new Era, a new feature, or a new region to grow further (Balancing).

L3: Era (30 to 120 minutes)#

An Era is a stage of the company, from Garage to Public. When users reach the Era's milestone, the player can raise a funding round.

MilestoneRaise (or decline)Grant + new kinds + newconstraintRedesign

Each Era is a phase shift: it changes what the player optimizes.

EraThe question the player answers
GarageHow far does one box go?
Pre-seedWhat happens when the database is the bottleneck?
SeedHow do I handle work that is not alike: CPU-heavy, abusive, large?
Series AHow do I stay up when parts fail, and keep money correct?
Series BHow do I separate analytics from transactions, and scale the team?
Series CHow do I serve the whole planet and fan out to millions?
Pre-IPOCan I prove reliability and make a profit?
PublicCan I beat the quarter, every quarter?

Progression lists the milestones, grants, kinds, and unlocks.

L4: Company (6 to 15 hours)#

Found (pick a Venture,Mutators)ErasExitLegacyFound the next company
  • An Exit ends a company. Its payout depends on Equity and valuation (Exit and Legacy).

  • Legacy buys permanent perks, Playbooks, and new Ventures.

  • A Venture changes the rules of the next company: its request mix, its constraints, and its incidents. A fintech company and a game backend need different designs (Exit and Legacy).

The first company takes 9 to 12 hours. Later companies take 3 to 6 hours, because Legacy speeds the early Eras and Playbooks remove repeated setup.

L5: Mastery (unbounded)#

  • Challenges. Fixed puzzles inspired by real events. Each one scores cost, p99, and complexity on three histograms (Challenges).

  • Daily drill. A seeded incident that every player gets on the same day.

  • Sandbox. Guided Sandboxes teach one mechanic each, and the free Sandbox is a test bench. Neither feeds the Company (Sandbox).

  • Public Era quarters. An endless mode in which the player must beat growth and margin targets each quarter (Progression).

  • Achievements. Achievements reward knowledge and unusual builds, not hours played.

Interrupt: the incident loop#

Incidents break into any loop from the Pre-seed Era on.

SignalTriageMitigateResolvePostmortemAction items
StepDetail
SignalWithout alerting, the player notices red cards or a user drop. With alerting, a pager banner appears earlier (Observability).
TriageThe player finds the affected Node and the cause.
MitigateA fast, temporary action: roll back, shed load, block traffic, fail over, or scale up.
ResolveThe incident ends, or the cause is removed.
PostmortemThe postmortem opens an action item. Until its research is owned, the incident is twice as likely (Incidents).
Action itemsOptional Dev Hour tasks that prevent the same class of incident, such as idempotency keys or a runbook.

Pacing#

Pacing aims for a steady stream of goals, as Factorio does (Influences). The times below are for a person playing in real time. The Balanced bot in Balancing runs on sim minutes and moves faster, so its Era times do not match this table.

PhaseTime since startA new goal everyTypical goal
First minutes0–5 min30–60 sCollect, upgrade the box, split the database out
Garage5–20 min1–3 minFirst research, first load balancer
Pre-seed and Seed20 min–2 h2–5 minCache, pooler, queue, first hire, first incident
Series A and B2–6 h5–10 minZones, replicas, warehouse, GPU, service split
Series C and Pre-IPO6–10 h10–20 minRegions, quorum stores, compliance, cost work
Public and later companies10 h+10–30 minQuarter targets, Ventures, Challenges

The Balancing document holds the curves behind these targets and the scripted players that check them.

Session shapes#

SessionLengthWhat happens
Check-in2–5 minCollect offline earnings, buy research, queue a feature, leave.
Standard30–60 minSeveral bottleneck loops, one Era milestone or one large redesign.
Deep2–4 hA full Era, a migration, or a Challenge set.
IdleHoursThe design runs. Users grow only while the design holds the SLO. Incidents do not fire offline.

Offline rules are in Simulation.