| # | Committed | Use case | L | C | M | Needs | Avail | P | Sprints | P/sprint |
|---|
| Deliverable | Sprints | Demand | Depends on |
|---|
| Deliverable | Sprints | Likely | Demand | Depends on |
|---|
| Use case | P | Marginal | P/sprint | Still missing |
|---|
| Deliverable | Demand | Sprints | ROI | Blocked by |
|---|
How good is each use case? One score, from three numbers you set and one slider.
What does it need, and what does that imply we build? Demand flows to deliverables.
What do we work on next? The cheapest thing to finish, not the most wanted part.
You set three numbers per use case. Everything else is derived.
Two things about this shape are deliberate, and worth understanding before arguing with a score:
A is availability — third-party risk, covered in section 4. With nothing at risk it is 1 and has no effect.
| Field | Range | Effect on the score |
|---|---|---|
| L Likelihood | 1–10 | Multiplies everything. 10 = signed contract. Halve L, halve the score. |
| C Commercial | 1–10 | 5 = breakeven. Above adds, below subtracts. C 1 is a heavy loss leader. |
| M Marketing | 1–10 | Exposure. Strategic value — regulatory positioning, ecosystem lock-in — folds in here. |
| Needs | — | No effect on P. Drives cost, demand, and the whole Focus tab. |
A negative P means likely, loses money, and buys no exposure. The page shows it rather than hiding it.
Demand is the summed priority of whatever wants a thing. Two consequences:
Zero demand is a finding, not a gap. If nothing needs a deliverable, either a use case is missing or the scope is speculative and should be deliberately killed. The Matrix tab calls these out rather than letting them sit quietly in the list.
Effort is sprints remaining — two-week sprints, halves allowed. It is the only state a deliverable carries, and it is remaining work, not total size. Half-built goes 2 → 1.
0 — it exists already, ours or off the shelf. Drops out of the build list but still
shows as a satisfied dependency.blank — not estimated yet. Totals including it are a floor, flagged +?.There is no status field. One number, updated as work lands.
A use case delivers nothing until every deliverable it needs exists. So the sharp question is not “which component is most wanted” but “which use case is cheapest to finish”.
Tick Committed on a use case and everything it needs becomes already-paid-for. Every other use case is then re-costed against only what is left over. Marginal ROI, not raw priority, is what belongs at the top of the Focus view.
Building work is within your control; its uncertainty is schedule, which sprints already carries. A partnership is not — it might simply never land. So eco-system items carry their own likelihood, and it multiplies exactly as a use case’s own L does.
Shared risk does not reorder anything — if two use cases lean on the same partners, both are discounted equally. Only differential exposure changes the ranking, which is exactly when it should.
Any-of groups. Mark a parent any when the children are alternatives rather
than a checklist. Cost becomes the cheapest option instead of the sum, and risk inverts: a second option
reduces risk. Two options at 60% give 84% as any-of, versus 36% as a checklist.
Both are genuinely arguable modelling choices, so they are switches to be settled against the live model rather than decisions buried in code. Neither changes a raw score; both change the ranking.
| Toggle | On | Off |
|---|---|---|
| Likelihood discounts shared demand | An unlikely use case pulls proportionally less on shared components. | Shared components get full weight — defensible if you would build it either way. |
| Eco risk compounds | Probabilities multiply. Two 50% dependencies → 25%. | Weakest link only. Two 50% dependencies → 50%. |
ROI = demand ÷ sprints at leaf
level ranks B2.1.1 joint-best on the whole board — full demand for a single sprint. Costing B2.1 as
one 4-sprint unit buries it in seventh. Both views are shown in Focus. Which granularity should drive the
build order is still an open decision.
Everything is stored server-side and saves automatically as you type. Export writes the whole matrix as JSON in the same shape as the seed file, so it can be committed to git and reviewed as a diff. Every write also snapshots the previous state with its author, so nothing is silently overwritten.