Use the first pattern that yields stories which each deliver an observable outcome. Never split by architectural layer.
| Pattern | Split when | Before → After |
|---|---|---|
| Workflow steps | The story is an end-to-end process | "Place an order" → "Add items to basket", "Enter delivery address", "Pay by card", "Receive confirmation e-mail" |
| Business-rule variations | Several rules apply to one action | "Apply discounts" → "Apply percentage voucher", "Apply free-shipping threshold", "Reject expired voucher with message" |
| Happy path first, then edge cases | Error handling doubles the size | "Import CSV" → "Import a valid CSV", "Report rows with invalid dates and skip them", "Reject files over 10 MB" |
| Data variations | Different data shapes need different handling | "Show customer address" → "Domestic addresses", "International addresses with region", "Addresses without postcode" |
| Interfaces and platforms | Several channels | "Notify on shipment" → "In-app notification", "E-mail notification", "SMS notification" |
| CRUD operations | A whole entity lifecycle | "Manage delivery slots" → "Create a slot", "Edit a slot", "Deactivate a slot", "List slots by day" |
| Simple first, performant later | Non-functional demands dominate | "Search orders" → "Search by order number", "Search with filters returning within 2 seconds for 1M orders" |
| Spike for the unknown | The team cannot estimate | "Integrate carrier API" → "Spike: confirm carrier sandbox auth and rate limits (time-boxed 1 day)", then the real stories |
Checks after splitting
- Each story still has a role, a capability and a benefit.
- The first story is a thin, demonstrable slice through all layers.
- The order of stories is a dependency order the team can start on day one.
- No story is "the rest"; if one is, split it again.
Splitting tasks under a story
Tasks describe technical steps (migration, config change, test data) and carry no acceptance criteria of their own. Add them only when the step is non-obvious or needs a different person; otherwise let the team create tasks at sprint planning.