← the walkthrough

What the devs get.

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/.

7 requirements · 0 unsourced 14 citations, machine-verified 1 epic + 7 user stories, one CSV 2 slices start today · 2 stay blocked, with owners

The handoff package — six files, each with a first reader.

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.

06-requirements.md ↗Every requirement: user story, source citation, testable statement, Given/When/Then, out-of-scope, dependencies, flags.first reader: the tech lead
jira-import.csv ↗1 epic + 7 user stories, generated by script from the plan — descriptions carry the source and provenance verbatim, labels encode discovery/delivery/blocked.first reader: the tracker
07-release-plan.md ↗Slices that ship alone, the dependency map, and the not-schedulable table with named owners.first reader: the eng manager
BLOCKERS.md ↗Five open questions with category, severity, and an owner role — none of them assigned to engineering.first reader: the named owners
01-press-release.md ↗The why, one page, numbered paragraphs — the thing every requirement cites. Context without a meeting.first reader: anyone who asks "why?"
report.html ↗The whole session compiled to one self-contained page: filterable requirements, blockers, the judge log, every artifact.first reader: everyone else

Open the real one: reports/surprise-charge.html — compiled by build_report.py at the end of the run.

The requirements — all seven, engineer-ready.

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.

Definition of Ready, enforced by pipeline. Every card above passed the same gate before reaching this page: its 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.

Into the tracker — no retyping, no drift.

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.

TypeSummarySliceLabelsPriority
EpicThe Surprise Charge — the trial that ends politelyallworking-backwardsMedium
StoryREQ-D1 · Build the surprise joinR1discovery slice-r1Medium
StoryREQ-DP2 · The in-app backstop bannerR2delivery slice-r2Medium
StoryREQ-DP4 · Receipts that prevent the next surpriseR2delivery slice-r2Medium
StoryREQ-DP1 · The T-48h reminderR3delivery slice-r3 blockedHigh
StoryREQ-D2 · The reminder holdback experimentR3discovery slice-r3 rests-on-assumption blockedHighest
StoryREQ-DP3 · One-tap cancelR4delivery slice-r4 shape-pending blockedHighest
StoryREQ-DP5 · The parity ruleR4delivery slice-r4 blockedMedium
Story · REQ-DP1 · The T-48h reminder how one ticket lands
Description (from the CSV, verbatim) As a trial user who forgot I signed up, I want to be told before I'm charged, so that the first I hear of it is never my bank statement.

One email, at least 48 hours before the first charge, stating price and date, with equal keep and one-tap-cancel actions.

Source: PR para 3 / EFAQ-03  ·  Provenance: [OBSERVED] × 1
Out of scope: reminders for later renewals  ·  Depends on: REQ-D1, BLK-05 Acceptance criteria (its own tracker field)
GIVEN a trial reaching day 12 WHEN the reminder sends THEN it precedes the charge by ≥48h (M1 records the ordering) AND a send failure is logged and visible — never silently absorbed (F5)

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.

What the team is deliberately not asked to build yet.

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.

R1 ──▶ R3 [BLOCKED BY BLK-01 · BLK-05] R2 ──▶ R4 [BLOCKED BY BLK-02]
SliceBlocked byOwnerWhat unblocks it
R3BLK-01 · commercialfinance leadCo-designing the holdback — one meeting
R3BLK-05 · dependencyplatform leadOwning the send-before-charge ordering
R4BLK-02 · regulatorycompliance leadThe per-market cancel-method memo
The engineering-manager reading of this table: your team never inherits an ambiguous or politically blocked ticket. The open questions stay attached to the finance, compliance, and platform owners who can actually answer them — and the sprint starts on R1 and R2, which are useful even if the email program never ships.

The whole point.

That's the standardization: the process ends where engineering begins, with nothing lost in translation on the way.

Open the compiled report → Raw 06-requirements.md Back to the run