Wireflow
A wireflow is the deliverable that sits between user journeys and wireframes. It maps
whole journeys into flows with high-level navigation (pages/screens, decisions, system steps,
external stubs, agent nodes) without deep UI, keeping the JTBDs at the core. The term
is NN/g's (Page Laubheimer, 2016): a wireflow combines wireframe-style page nodes with a
simplified flowchart. It is the right tool for apps with few pages that change dynamically
(agent-first SPAs, task-heavy tools) and the wrong tool for many static pages — if the product
is mostly static content, say so and suggest a sitemap or plain user-flow instead.
This skill is context-agnostic: it carries the method and the build engine, and learns
the project specifics per run — by grilling the human (standalone) or by deriving them from the
context layer (pipeline).
Place in the A-Team pipeline
Definition-phase skill. Output home: <target>/docs/features/<slug>/briefs/wireflow/ —
board.json (the spec — source of truth and breadcrumb; the render is regenerable from it),
wireflow.html + SVG(s) (the deliverable), PNGs (verification copies, kept so gate reviewers
see what you saw). Per-feature artifact: overwrite cleanly on revision. Commit per run:
docs(<slug>): wireflow.
- Jobs by id. JTBDs come from
docs/product/jtbd/ — cite [[NN-<slug>]] with verbatim
headlines in journey headers and the JTBD × Journey matrix. Never mint or reword a job; a
journey that serves no existing job is evidence a job is missing → TBD, route to
jobs-to-be-done.
- Two interaction modes, one method:
- Standalone (human present) — run the full Movement-1 grill below, one decision at a time.
- Pipeline (definition phase — draft + review, no interrogation) — lock the method
decisions yourself from
prd.md, the jobs, and context.md, using the recommended defaults
in references/method-decisions.md. Then make the gate do the grill's work: the delivery
explicitly surfaces the two riskiest calls — journey set and spine — as headlined
items for correction via the revise loop. Never block waiting for answers mid-phase.
- Consumes
prd.md (scope, stories by job) when definition ran first; can also run
journeys-first from jobs + context alone.
Mode 0 — Create or Review? (decide first)
- CREATE (default) — build a new wireflow from journeys / JTBDs / a spec / a live prototype.
- REVIEW — critique an existing wireflow (an image, a FigJam board, a description, or a
spec) against the method, and hand back a verdict + concrete fixes.
If the user's intent is ambiguous ("look at my wireflow"), ask which they want. Artifact + "what's
wrong" = REVIEW; raw material + "make flows" = CREATE.
Creating a wireflow
Work in two movements: (1) lock context + method decisions — grilled or derived per the mode
above; (2) run the generate → rasterize → Read → iterate pipeline until every journey renders
cleanly, then deliver.
Movement 0 — Ground yourself first
Skim whatever sources exist so your decisions (or grill questions) are sharp: the context layer
(context.md, jobs, ateam-plan.md/research-plan.md), prd.md + stories, a live prototype and
its real routes, existing user journeys. Reading real screens/routes is what lets own-screen
nodes link to live routes instead of screenshots (which go stale).
Movement 1 — The decisions (grilled standalone; derived in pipeline)
The full checklist with the reasoning behind each locked decision is in
references/method-decisions.md — read it before starting and follow its order. Briefly:
- Journey set — the unit is a cross-cutting, actor-anchored journey (not
one-flow-per-epic). JTBDs are many-to-many with journeys. Propose a small set that covers
the whole product (every job and every scoped item embodied somewhere).
- The spine — which single journey carries the core JTBD and goes deeper than the rest.
- Node taxonomy — own screen · external-site stub · external-product stub · system/engine
(no UI) · decision · agent · start/outcome · stop. Granularity: one node = one page, one
page-state, or one system step — never below page-block level.
- Lanes — swimlanes where lane = owner; shape/colour = node type. Cross-lane arrows tint
with the landing lane's colour; lane labels carry a matching tick.
- Branches — only branches that change the page path or encode a locked decision/edge case.
Locked cuts become visible Stop nodes. Omit cosmetic/deferred branches.
- Coverage without labels — every requirement embodied by a node/branch; initiatives never
labelled on the board; no MoSCoW/roadmap metadata. Coverage, not clutter.
- JTBD anchoring — per-journey header (actor + job id served) with Start = the struggle
and Outcome = the job done, plus a board-level JTBD × Journey matrix (ids + headlines).
- Deepen inline, never split — fold detail into the same journey band; no separate "L2".
- Orientation (see
references/orientation.md) — horizontal (default; the working
deliverable, room for a deep spine) vs matrix (stakeholder overview; owner rows × journey
columns). Recommended: build horizontal, offer matrix as a companion.
- Output target — SVG + combined HTML always; offer the native editable FigJam
rebuild as an add-on (
references/figjam-rebuild.md).
Keep a running written summary of the locked decisions; in pipeline mode this summary ships with
the gate presentation (the breadcrumb of what was derived and why).
Movement 2 — The build pipeline (the reliability core)
Do not build straight onto a FigJam board via the API first — a real board is too large for
the design tool to render back, so you'd be building blind. Instead:
- Write a compact board spec (
board.json) from the locked decisions — schema and worked
examples: references/spec-schema.md.
- Generate with the bundled engine:
python scripts/wireflow.py board.json --out docs/features/<slug>/briefs/wireflow --layout horizontal --rasterize
(or --layout matrix). It emits the SVG(s), a combined wireflow.html (deliverable + legend +
JTBD × Journey matrix), and PNGs.
- Read the PNGs. You see your own output and catch overlaps, out-of-lane nodes, and glyph
problems before anyone else does. Verify every journey — never skip; this loop is what
makes wireflows reliable.
- Iterate on the spec (rarely the engine) until clean —
references/layout-engine.md.
- Deliver the combined HTML + SVG(s). Own-screen nodes carry
href to live routes.
- If requested, rebuild natively in FigJam (
references/figjam-rebuild.md).
- Hand off to
page-brief. The wireflow owns the page set, the journey↔page linkage, and
where each job enters a screen — that entry-point detail is flow-level, so it lives here
and the page-brief no longer carries it. Make sure journey steps actually say where a job
picks up, not just that the page is traversed. Offer: "Wireflow's done — want to spec each
page's requirements next?"
Reviewing a wireflow
Critique against the method — don't redraw unless asked. Be a sharp, specific reviewer.
- Take in the artifact. Image/rasterized board → Read it; FigJam → screenshot/export;
description or spec → read it. Note what you can and can't see.
- Score against
references/review-criteria.md: is it actually a wireflow (vs a flowchart
or wireframes)? Journeys actor-anchored and cross-cutting? Clear spine? Node taxonomy
consistent, system boundary legible? Lanes = owners? Locked cuts as Stop nodes? Coverage
embodied without labels? JTBDs anchored (struggle → job done)? Depth inline? Orientation fits?
- Return a structured verdict: Verdict (one line + the single biggest issue) ·
Strengths · Findings (each tied to a method point, ordered by impact, with the fix) ·
Fastest wins (2–3).
- Offer to apply the fixes by switching to CREATE and regenerating (grill only the gaps).
Guardrails to hold throughout
- Never label initiatives; embody them.
- Deepen inline, never split into a separate L2 diagram.
- Always verify by rasterize → Read before showing anyone. No blind delivery.
- Draw locked cuts as Stop nodes — the deliberate non-path is documentation.
- Own-screen nodes link to live routes, not screenshots.
- Keep the spine the human screen-journey. Backend enters as system nodes and decision
diamonds between screens — full coverage without becoming a data-flow diagram.
- Jobs are consumed, never minted — ids + verbatim headlines from
docs/product/jtbd/.
What ships in this skill
scripts/wireflow.py — the spec-driven layout engine (horizontal + matrix, auto-sized lanes,
geometry routers, wrapping edge labels, glyph sanitising, combined-HTML + JTBD×Journey matrix,
optional PNG).
references/method-decisions.md — the decision checklist: each decision + why it's locked.
references/orientation.md — horizontal vs matrix: when each wins.
references/spec-schema.md — the board JSON schema + worked examples.
references/layout-engine.md — layout rules and how to debug a bad render.
references/pipeline.md — the end-to-end build pipeline checklist.
references/review-criteria.md — the REVIEW rubric.
references/figjam-rebuild.md — native FigJam mechanics (load only for an editable board).
1---2name: wireflow3description: Create OR review a wireflow — the artifact BETWEEN user journeys and wireframes. It maps whole journeys into swimlane flows with high-level navigation (screens, decisions, system/agent steps) while keeping Jobs-To-Be-Done at the core, WITHOUT deep UI. Use whenever the user wants to "map the flows", "make/build a wireflow", turn journeys / JTBDs / a spec / a live prototype into flows, or put every journey on one board against shared owner lanes — even if they never say "wireflow". ALSO use it to REVIEW or critique an existing wireflow (image, FigJam, or description). In the A-Team pipeline this is a definition-phase skill: output lands in docs/features/<slug>/briefs/wireflow/ with jobs consumed by id from docs/product/jtbd/; pipeline mode derives the method decisions and highlights the riskiest at the gate, standalone mode runs the full grill. CREATE generates verified SVG/HTML (self-checked by rendering and Reading its output) in a horizontal per-journey OR shared-matrix layout, and can rebuild in FigJam. Do 4---56# Wireflow78A **wireflow** is the deliverable that sits *between* user journeys and wireframes. It maps9whole journeys into flows with high-level navigation (pages/screens, decisions, system steps,10external stubs, agent nodes) **without** deep UI, keeping the **JTBDs at the core**. The term11is NN/g's (Page Laubheimer, 2016): a wireflow combines wireframe-style page nodes with a12simplified flowchart. It is the *right* tool for apps with **few pages that change dynamically**13(agent-first SPAs, task-heavy tools) and the *wrong* tool for many static pages — if the product14is mostly static content, say so and suggest a sitemap or plain user-flow instead.1516This skill is **context-agnostic**: it carries the *method* and the *build engine*, and learns17the project specifics per run — by grilling the human (standalone) or by deriving them from the18context layer (pipeline).1920## Place in the A-Team pipeline2122Definition-phase skill. Output home: **`<target>/docs/features/<slug>/briefs/wireflow/`** —23`board.json` (the spec — source of truth and breadcrumb; the render is regenerable from it),24`wireflow.html` + SVG(s) (the deliverable), PNGs (verification copies, kept so gate reviewers25see what you saw). Per-feature artifact: overwrite cleanly on revision. Commit per run:26`docs(<slug>): wireflow`.2728- **Jobs by id.** JTBDs come from `docs/product/jtbd/` — cite `[[NN-<slug>]]` with verbatim29 headlines in journey headers and the JTBD × Journey matrix. Never mint or reword a job; a30 journey that serves no existing job is evidence a job is missing → `TBD`, route to31 `jobs-to-be-done`.32- **Two interaction modes, one method:**33 - **Standalone (human present)** — run the full Movement-1 grill below, one decision at a time.34 - **Pipeline (definition phase — draft + review, no interrogation)** — lock the method35 decisions yourself from `prd.md`, the jobs, and `context.md`, using the recommended defaults36 in `references/method-decisions.md`. Then make the gate do the grill's work: the delivery37 explicitly surfaces the two riskiest calls — **journey set** and **spine** — as headlined38 items for correction via the revise loop. Never block waiting for answers mid-phase.39- Consumes `prd.md` (scope, stories by job) when definition ran first; can also run40 journeys-first from jobs + context alone.4142## Mode 0 — Create or Review? (decide first)4344- **CREATE** (default) — build a new wireflow from journeys / JTBDs / a spec / a live prototype.45- **REVIEW** — critique an *existing* wireflow (an image, a FigJam board, a description, or a46 spec) against the method, and hand back a verdict + concrete fixes.4748If the user's intent is ambiguous ("look at my wireflow"), ask which they want. Artifact + "what's49wrong" = REVIEW; raw material + "make flows" = CREATE.5051---5253## Creating a wireflow5455Work in two movements: **(1) lock context + method decisions — grilled or derived per the mode56above; (2) run the generate → rasterize → Read → iterate pipeline** until every journey renders57cleanly, then deliver.5859### Movement 0 — Ground yourself first60Skim whatever sources exist so your decisions (or grill questions) are sharp: the context layer61(`context.md`, jobs, `ateam-plan.md`/`research-plan.md`), `prd.md` + stories, a **live prototype** and62its real routes, existing user journeys. Reading real screens/routes is what lets own-screen63nodes link to live routes instead of screenshots (which go stale).6465### Movement 1 — The decisions (grilled standalone; derived in pipeline)66The full checklist with the reasoning behind each locked decision is in67**`references/method-decisions.md`** — read it before starting and follow its order. Briefly:68691. **Journey set** — the unit is a *cross-cutting, actor-anchored journey* (not70 one-flow-per-epic). JTBDs are **many-to-many** with journeys. Propose a small set that covers71 the whole product (every job and every scoped item embodied somewhere).722. **The spine** — which single journey carries the core JTBD and goes *deeper* than the rest.733. **Node taxonomy** — own screen · external-site stub · external-product stub · system/engine74 (no UI) · decision · agent · start/outcome · stop. Granularity: **one node = one page, one75 page-state, or one system step** — never below page-block level.764. **Lanes** — swimlanes where **lane = owner**; shape/colour = node type. Cross-lane arrows tint77 with the landing lane's colour; lane labels carry a matching tick.785. **Branches** — only branches that change the page path or encode a locked decision/edge case.79 **Locked cuts become visible Stop nodes.** Omit cosmetic/deferred branches.806. **Coverage without labels** — every requirement embodied by a node/branch; initiatives never81 labelled on the board; no MoSCoW/roadmap metadata. Coverage, not clutter.827. **JTBD anchoring** — per-journey header (actor + job id served) with **Start = the struggle**83 and **Outcome = the job done**, plus a board-level JTBD × Journey matrix (ids + headlines).848. **Deepen inline, never split** — fold detail into the *same* journey band; no separate "L2".859. **Orientation** (see `references/orientation.md`) — **horizontal** (default; the working86 deliverable, room for a deep spine) vs **matrix** (stakeholder overview; owner rows × journey87 columns). Recommended: build horizontal, offer matrix as a companion.8810. **Output target** — SVG + combined HTML always; **offer** the native editable **FigJam**89 rebuild as an add-on (`references/figjam-rebuild.md`).9091Keep a running written summary of the locked decisions; in pipeline mode this summary ships with92the gate presentation (the breadcrumb of what was derived and why).9394### Movement 2 — The build pipeline (the reliability core)95Do **not** build straight onto a FigJam board via the API first — a real board is too large for96the design tool to render back, so you'd be building blind. Instead:97981. **Write a compact board spec** (`board.json`) from the locked decisions — schema and worked99 examples: **`references/spec-schema.md`**.1002. **Generate** with the bundled engine:101 `python scripts/wireflow.py board.json --out docs/features/<slug>/briefs/wireflow --layout horizontal --rasterize`102 (or `--layout matrix`). It emits the SVG(s), a combined `wireflow.html` (deliverable + legend +103 JTBD × Journey matrix), and PNGs.1043. **Read the PNGs.** You *see your own output* and catch overlaps, out-of-lane nodes, and glyph105 problems **before anyone else does**. Verify **every** journey — never skip; this loop is what106 makes wireflows reliable.1074. **Iterate** on the spec (rarely the engine) until clean — `references/layout-engine.md`.1085. **Deliver** the combined HTML + SVG(s). Own-screen nodes carry `href` to live routes.1096. **If requested, rebuild natively in FigJam** (`references/figjam-rebuild.md`).1107. **Hand off to `page-brief`.** The wireflow owns the page set, the journey↔page linkage, and111 **where each job enters a screen** — that entry-point detail is flow-level, so it lives here112 and the page-brief no longer carries it. Make sure journey steps actually say where a job113 picks up, not just that the page is traversed. Offer: *"Wireflow's done — want to spec each114 page's requirements next?"*115116---117118## Reviewing a wireflow119120Critique against the method — don't redraw unless asked. Be a sharp, specific reviewer.1211221. **Take in the artifact.** Image/rasterized board → Read it; FigJam → screenshot/export;123 description or spec → read it. Note what you can and can't see.1242. **Score against `references/review-criteria.md`**: is it actually a wireflow (vs a flowchart125 or wireframes)? Journeys actor-anchored and cross-cutting? Clear spine? Node taxonomy126 consistent, system boundary legible? Lanes = owners? Locked cuts as Stop nodes? Coverage127 embodied without labels? JTBDs anchored (struggle → job done)? Depth inline? Orientation fits?1283. **Return a structured verdict**: **Verdict** (one line + the single biggest issue) ·129 **Strengths** · **Findings** (each tied to a method point, ordered by impact, with the fix) ·130 **Fastest wins** (2–3).1314. **Offer to apply the fixes** by switching to CREATE and regenerating (grill only the gaps).132133---134135## Guardrails to hold throughout136- **Never label initiatives; embody them.**137- **Deepen inline, never split** into a separate L2 diagram.138- **Always verify by rasterize → Read before showing anyone.** No blind delivery.139- **Draw locked cuts as Stop nodes** — the deliberate non-path is documentation.140- **Own-screen nodes link to live routes**, not screenshots.141- **Keep the spine the human screen-journey.** Backend enters as system nodes and decision142 diamonds between screens — full coverage without becoming a data-flow diagram.143- **Jobs are consumed, never minted** — ids + verbatim headlines from `docs/product/jtbd/`.144145## What ships in this skill146- `scripts/wireflow.py` — the spec-driven layout engine (horizontal + matrix, auto-sized lanes,147 geometry routers, wrapping edge labels, glyph sanitising, combined-HTML + JTBD×Journey matrix,148 optional PNG).149- `references/method-decisions.md` — the decision checklist: each decision + *why* it's locked.150- `references/orientation.md` — horizontal vs matrix: when each wins.151- `references/spec-schema.md` — the board JSON schema + worked examples.152- `references/layout-engine.md` — layout rules and how to debug a bad render.153- `references/pipeline.md` — the end-to-end build pipeline checklist.154- `references/review-criteria.md` — the REVIEW rubric.155- `references/figjam-rebuild.md` — native FigJam mechanics (load only for an editable board).