A Working Backwards run doesn't end in a document that
needs a translation meeting — it ends in a package an engineering team can start from.
This page shows exactly what lands, from the featured run: every file, every requirement with its
acceptance criteria, the tracker import, and the work that is deliberately not handed over
yet. Everything below is the skill's real output from
examples/surprise-charge/.
The markdown is the system of record; the report is what you send. Nothing here is prose that needs interpreting — every file answers a question someone on the team will actually ask. Every chip opens the real file, rendered.
Open the real one:
reports/surprise-charge.html — compiled by
build_report.py at the end of the run.
Card anatomy, top to bottom: the user story (whose life changes), the
source (which paragraph demands this — machine-verified by
verify_sources.py), a testable statement, Given / When / Then observable
from outside the system, and the honest footer — out of scope (what readers would assume is
included and isn't) and dependencies by id. Flags travel with the card: an assumption from
intake is still an assumption here, four stages later.
Source: resolves
(checked by script, not by promise) · the statement is one testable sentence · the Then is
observable from outside the system · it lands in exactly one release slice · anything resting on
an assumption says so on its face. The team never receives a vague ask, and scope creep has a
working definition: a requirement that can't cite anything.export_jira.py turns the release plan into jira-import.csv
— the plan and the tracker can't disagree, because a script wrote both from the same source.
One epic — the initiative, named from the press release — and seven user stories under it, each
opening as a / I want / so that, with acceptance criteria in their own field. Labels carry
the slice, the kind of work, and whether it's blocked.
| Type | Summary | Slice | Labels | Priority |
|---|---|---|---|---|
| Epic | The Surprise Charge — the trial that ends politely | all | working-backwards | Medium |
| Story | REQ-D1 · Build the surprise join | R1 | discovery slice-r1 | Medium |
| Story | REQ-DP2 · The in-app backstop banner | R2 | delivery slice-r2 | Medium |
| Story | REQ-DP4 · Receipts that prevent the next surprise | R2 | delivery slice-r2 | Medium |
| Story | REQ-DP1 · The T-48h reminder | R3 | delivery slice-r3 blocked | High |
| Story | REQ-D2 · The reminder holdback experiment | R3 | discovery slice-r3 rests-on-assumption blocked | Highest |
| Story | REQ-DP3 · One-tap cancel | R4 | delivery slice-r4 shape-pending blocked | Highest |
| Story | REQ-DP5 · The parity rule | R4 | delivery slice-r4 blocked | Medium |
The raw file:
jira-import.csv ·
the check that keeps it honest: 7/7 requirements land in exactly one slice, dependency map has no
circular waits, no orphans, no duplicates.
Two slices start today with nobody's permission. Two stay NOT SCHEDULABLE — and each names the non-engineering owner and the exact meeting that unblocks it. No dates on blocked work: a date on a blocked slice commits engineers to a shape nobody agreed to.
| Slice | Blocked by | Owner | What unblocks it |
|---|---|---|---|
| R3 | BLK-01 · commercial | finance lead | Co-designing the holdback — one meeting |
| R3 | BLK-05 · dependency | platform lead | Owning the send-before-charge ordering |
| R4 | BLK-02 · regulatory | compliance lead | The per-market cancel-method memo |
That's the standardization: the process ends where engineering begins, with nothing lost in translation on the way.