# Workflow and EventStorming board Map what actually happens before you draw components. Nouns in a brief become tables and services; a workflow tells you where the rules, the waiting, the language collisions, and the real owners are. Source: lesson 0041 · Map the Workflow Before the Components. --- ## Blank ### 1. Current-state spine — facts in time order `[event] → [event] → [event] → …` — past tense, one real recent case, left to right. Do the current state before the target state. Skip it and the team will faithfully automate invented steps and miss real constraints. ### 2. Layers to add over the spine | Layer | Notation | One-line guidance | | --- | --- | --- | | Commands | `[actor] does [command]` | What caused each event, and who issued it. | | Actors | role, not name | Include the people whose work is invisible in the system. | | Policies | "when `[event]`, `[decide/do]` if `[condition]`" | These are the domain rules; most are unwritten. | | External systems | box with an owner | Name the owning team or vendor, not just the product. | | Waiting | duration + cause | Time is where outcomes are lost. | | Manual work | tool + who | Spreadsheets and copied identifiers are unserved state. | | Failures | what breaks, how often | Ask "when does this go wrong?" not "does this go wrong?". | | Hotspots | 🔥 | Where language, rules, responsibility, or confidence changes. | ### 3. Hotspot record — one per hotspot | Field | What goes here | | --- | --- | | Hotspot | The moment in the flow where the group stopped agreeing. | | Example / counterexample | A real case that goes one way and a real case that goes the other. | | Who knows | The person who can answer, by name. | | Open question | Written as a question, not a task. | | Next evidence | What would answer it, and by when. | ### 4. Glossary — one row per contested word | Term | Meaning here | Context that owns it | Do not say | | --- | --- | --- | --- | | `[word]` | `[precise local meaning]` | `[which part of the business]` | `[the phrase that hides the ambiguity]` | ### 5. Candidate boundaries For each: the name, the evidence for it (language, invariant, change cadence, or ownership — not "it is a noun"), and what it would own. Boundaries are model boundaries. Do not draw deployables here. ### 6. Target workflow Rewrite the spine with waiting removed, duplicate entry removed, and decisions the system can safely make automated. Do **not** automate every current step — some exist only because an earlier system was missing. --- ## Completed — returns resolution ### Current-state spine — one real case, mapped with the people who do the work `return requested → order verified → evidence requested → evidence received → policy interpreted → eligibility decided → label created → customer notified → parcel received → refund authorized → refund settled` **Actors:** customer, support agent, policy owner, warehouse clerk, finance clerk. **External:** order platform (order team), carrier (vendor), payments (payments team), warehouse system. Two facts fell out of the timings immediately. **68 of the 72 baseline hours sit in two queue waits** — order verification and policy interpretation — and neither is work; both are the request waiting for a human to reach it. And the evidence round-trip (about 19 hours) only happens for opened items, which the pilot scope excludes. That is why the pilot's narrow scope is not timidity: it removes the second-largest wait by construction. ### Hotspots | Hotspot | Example / counterexample | Who knows | Next evidence | | --- | --- | --- | --- | | "Approved" means three different things | Support: policy eligibility passed. Warehouse: inspection passed. Finance: money settled. A single global status would collapse all three. | Anya, Nils, the finance clerk | Modeled as three owners with separate facts — see `state-and-contract-review.md` | | Policy interpretation varies by agent | Three agents given the same 31-day case: two refused, one approved "because the customer was polite about it". | Anya | The A1 sample: 63% codifiable, 22% need a photo rule, 15% judgment | | Gift orders have no rule and no owner | The purchaser is not the recipient, so a refund to the original payment method surprises the recipient. | Nils | Owner assigned (Anya); the rule deferred to slice 3 rather than smuggled into the pilot | | Warehouse-to-refund handoff is a spreadsheet | The clerk copies order ids into a shared sheet; finance reads it twice a day. One id was transposed in the sampled month. | the warehouse clerk | The A4 replay: reliable, 0.4% late | | Nobody owns "the request that went quiet" | A request with no reply after the evidence email simply ages. No queue, no alert, no age limit. | nobody — that is the finding | Became the 21-day expiry transition and a daily reconciliation sweep | | Retried carrier timeouts | An agent retrying a timed-out label purchase sometimes produced a second label, which the warehouse then received. Nobody counted how often. | the warehouse supervisor | The four-hour carrier spike | ### Glossary — one meaning per term, per model | Term | Precise local meaning | Owned by | Do not say | | --- | --- | --- | --- | | Eligibility decision | Accepted, refused with a reason code, or referred to an agent. Exactly one per return | Eligibility | "approved", "status 2" | | Referral | A decision that a human must make this call, made inside the same latency budget as an acceptance | Eligibility | "pending", "stuck", "rejected" | | Label intent | A recorded promise to obtain exactly one carrier label for one accepted return. Exists before the carrier is called | Return journey | "the label", before it exists | | Receipt | The warehouse's fact that the parcel matching this return arrived. Not an inspection result | Warehouse (external) | "approved", "received OK" | | Settlement | Money has left us, as asserted by Payments. Only Payments may assert it | Payments (external) | "refunded", used loosely | Three groups had been saying "approved" and meaning policy eligibility, physical inspection, and settled money. One global status field would have collapsed three models into one lie. ### Candidate boundaries — and the evidence for each | Boundary | Language | Change cadence | Invariant | Ownership | | --- | --- | --- | --- | --- | | Eligibility | "Decision", "reason", "override" exist nowhere else | 9 policy changes a year, 4 mid-quarter | Exactly one open decision per return | Anya is the single named policy owner | | Return journey | "Intent", "progress", "notification" | Changes with wording and channel, on design's beat | One label intent per accepted return | Marco owns the customer-visible steps | | Carrier (external) | Vendor vocabulary: shipments, references | The vendor's release cadence, not ours | One carrier label per intent | Contractual; not ours to change | | Payments (external) | "Settled", "captured" | Payment-rail cadence | Refund never exceeds the captured amount | The payments team; financial truth | All four kinds of evidence point the same way, which is the only kind of boundary evidence worth acting on. These are model boundaries, not deployables: one seven-person team owns the first two, so they live as modules inside the existing deployable. ### Target workflow The target is not the current flow with automation bolted on. **Two waits are deleted, one manual step is deliberately kept, and one new state is added.** | Event | Actor | Change from current | | --- | --- | --- | | Return requested | customer | Structured submission, not email | | Order verified | returns module | Wait removed (was about 2 hours) | | Eligibility decided — accepted / referred / refused | policy engine | Wait removed (was about 49 hours). **Referral is new**: the A1 sample said 15% of cases need a human, and pretending otherwise would have produced bad automatic refusals | | Label created | label worker → carrier | Off the request path entirely | | Customer notified | return journey | Proactive on every state change, not on request | | Parcel received | warehouse clerk | **Kept manual on purpose** | | Refund requested | return journey | The spreadsheet is removed | | Refund settled | Payments | Unchanged, and deliberately so | **The manual seam, stated with its removal trigger.** Warehouse receipt stays a human confirmation for the whole pilot, even though the A4 replay says the event stream is reliable. The reason: A4's replay is retrospective, and a wrong automatic refund is money we cannot claw back cheaply. Removal trigger: 14 consecutive days with fewer than 0.1% late receipt events and zero mismatches. Capacity about 40 confirmations a day, inside the clerk's existing workload. Owner: Lea. **Traces to:** the two deleted waits *are* the outcome (68 of the 72 hours); the "approved" hotspot becomes the state machine in `state-and-contract-review.md`; the boundary evidence is the module view in `c4-review-checklist.md`; the referral state becomes ADR 0004 and a row in `rollout-contract.md`'s telemetry map.