The method at operating altitude. Part A is the sheet you fill in; Part B is the reference you consult while filling it. Chapters 2–5 are the full treatment; nothing here is new, and everything here is enough.
One row per answer. Every answer needs a number and a scope — “scalability” is not an answer; “the search path serves 50k req/s peak” is.
| # | Question | Your answer (number + scope) |
|---|---|---|
| 1 | Time budget — per operation: percentiles, tails, soft maxima, completion windows | |
| 2 | Failure budget — per operation: error budget, criticality | |
| 3 | Loss budget — per data class: RPO, retention, what may never be lost | |
| 4 | Consistency contract — per data class or path: strict / bounded / eventual; read-your-writes where? | |
| 5 | Load — magnitude (steady and peak), shape per path, concentration, window | |
| 6 | External constraints — audit vs replay; residency; mandates that strike values | |
| 7 | Release structure — cadence divergence between parts; deploy safety | |
| 8 | Cost & capacity envelope — money; who operates | |
| 9 | Multi-X — regions, tenants, versions: what partitions naturally, what the law pins |
Below the table, list the domain-shape facts — one line per effectful operation:
And the change-driver facts — one line per rule set or data class: how often does the governing logic change, and under whose control? These rarely press alone; check them in combinations.
An UNKNOWN is a valid answer. Write it down as UNKNOWN — never guess.
single deployable / direct / unified / current-state / single shared
Recovery has no null — it is decided per effectful operation in Step 4.
Go through the answers one by one. For each, decide: inert (the null vector plus a containment rung handles it) or pressing (an axis must move). Record only the pressing ones:
| Answer (Q#, scope) | Mode | Shape | Axis pressed | Toward | Because (mechanism) |
|---|---|---|---|---|---|
Two rules to keep in view while you fill this:
Work through the pressing rows using the resolution rules in Part B, then write the result:
topology / substrate / read-write / state / persistence + recovery class per effectful operation
Every position must cite the answer(s) that forced it. A position no answer forces is debt — either inherited, or about to be built voluntarily.
One decision record per axis move:
Position · forced by (answer #s) · via (mechanism) · costs accepted · revisit when (the citing answer changes)
| Mode | Questions | What it does | Character |
|---|---|---|---|
| Prune | 3, 4, 6, 9 | Eliminates values that can’t honor it | Binary. Correctness — can’t buy back with hardware |
| Select | 1 | Chooses among survivors | Presses only near the physics floor |
| Split | 5 | Forces decomposition | Presses only on divergence — uniform load presses nothing |
| Isolate | 2 | Blast-radius containment | Starts biting past ~99.9 on a named path |
| Bound | 7, 8 | The economic envelope | Sets the frame everything optimizes inside |
Ask of every load answer: would a second copy help?
One more triage for time answers: does the deadline bind the requester’s clock (a statutory 14-day filing window — inert for architecture) or the system’s clock (a 200 ms response target — presses)?
hardware sizing → cache → coalescing → replicas → projections
Each rung contains a different pressure; the last one is the axis move, everything below it is not. Thin tiers — load balancers, caches, coalescers — own no business logic and no data of record: they never appear in the vector.