A team picks up "user can reset their password" in refinement. Too big for one sprint, everyone agrees. So they split it the way the codebase is shaped: one story for the API endpoint, one for the email service, one for the frontend form. Three tidy tickets, three neat estimates, and precisely nothing a user can touch until all three are done. Sprint one ends with a demo of a JSON response in Postman. The product owner claps politely.

That's the layer split, and it's the most common splitting mistake in the industry because it feels so natural. The work really is frontend work plus backend work plus database work. But a story isn't a unit of work, it's a unit of value, and a database migration delivers no value on its own. Nobody can ship it, nobody can test it against real behaviour, nobody can demo it to a human. You haven't split the story. You've dismembered it.

The test for any split is simple: could each piece go to production alone and change something a user or stakeholder can observe? Not "would we release it alone", that's a business decision. Could we. If the answer is no for any piece, you've cut horizontally through the layers instead of vertically through the value, and you should try a different seam. Here are seven that reliably produce vertical slices.

Pattern Best when
Workflow step The story spans a multi-step user journey
Happy path first Edge cases and error handling dominate the estimate
Acceptance criterion The criteria list reads like several stories stapled together
Business rule variation One capability, several rule sets (payment methods, tariffs)
Data variation One behaviour across countries, languages, or formats
Interface simplicity A manual or crude interface delivers the value early
CRUD operation "Manage X" hides create, read, update, and delete

Slice along the journey

Split by workflow step when the story describes a journey rather than a moment. "Customer books an appointment" contains at least three steps: see available slots, pick one, get a confirmation. Each step produces something observable, so each can be a story. First slice: customers can view available slots (booking still happens by phone). Second: they can reserve a slot. Third: they get a confirmation email with a cancellation link. The first slice alone might cut your reception team's call time in half, which means you're delivering value two sprints before the "full" feature would have landed.

Split by happy path when the edge cases are what's making the story big. Take that password reset. The happy path is small: user enters their email, receives a link, sets a new password. The bulk hides in the margins: expired tokens, rate limiting, what to show when the email address doesn't exist, the user who clicks the link twice. So ship the happy path as story one and write the edge cases as follow-ups. Yes, this means the first version handles an expired token gracelessly. That's fine for a week. What's not fine is spending three sprints polishing failure modes for a flow nobody has successfully completed yet. One caveat: some edge cases are actually security or compliance requirements wearing an edge case costume. Those aren't deferrable, and pretending otherwise will earn you a memorable conversation with your security team.

Slice along the rules

Split by acceptance criterion when the criteria list has quietly become a table of contents. A "search results page" story with six criteria (relevance ordering, pagination, category filters, empty state, typo tolerance, recent-searches suggestions) is six stories in a trench coat. The first two criteria are a shippable search page. Filters are a second story, typo tolerance a third. If a single criterion can't stand alone, cluster it with its nearest neighbour, but the instinct should be that every criterion earns its place in this story or gets promoted to its own.

Split by business rule variation when one capability has to support several rule sets. Checkout with card, PayPal, and invoice payment is the classic. Ship card first, because it covers the most customers, and add the others as separate stories. The same seam runs through shipping tariffs, discount schemes, and approval workflows. Which variation goes first is a product call, not a technical one: highest volume usually wins, but sometimes a strategically important niche jumps the queue. Either way you'll learn things from the first rule set that improve every later one, which is the quiet second benefit of this pattern.

Split by data variation when the behaviour is identical but the data isn't. Invoicing "for Europe" really means invoicing under a dozen VAT regimes. Build it for one country, ship it, then add the rest as stories. Same with localisation (one language first), file imports (one format first), and address handling (one postal system first). Teams resist this one because the follow-up stories feel like copies of the first. They aren't. Danish VAT will surprise you in ways German VAT didn't, and it's better to meet those surprises one story at a time.

Slice along the interface

Split by interface simplicity when a cruder interface delivers the same underlying value sooner. "Sync customer data from the CRM" doesn't need an automated API integration on day one. Story one: an admin uploads a CSV export and the system ingests it. Ugly, manual, works this sprint. Story two, later: the scheduled API sync that removes the manual step. The CSV version isn't throwaway scaffolding either; it validates your data mapping, your dedupe logic, and your error reporting before you've touched the CRM's API, and it becomes your fallback when that API has a bad day.

Split by CRUD operation when the story says "manage". "Users manage their saved addresses" unpacks into create, view, edit, and delete. Create plus view is the first story, and it's genuinely useful alone. Delete comes next; edit can wait, because delete-and-recreate is a tolerable workaround for a sprint or two. Not glamorous, but real users cope with worse every day, and "manage X" stories shrink from an 8 to a pair of 3s almost every time you apply this.

The walking skeleton

There's a strategy sitting above all seven patterns: build the walking skeleton first. Take the thinnest possible end-to-end slice, one that exercises every layer of the system but does almost nothing, and ship it before you flesh anything out. For a reporting feature, that's a report with one hardcoded metric, rendered in the real UI, from the real database, behind real authentication. It looks laughably thin in the demo. It has also just proven your architecture, your deployment pipeline, and your permissions model, which is where the genuinely nasty surprises live. Fleshing out a skeleton is predictable work. Discovering in sprint four that two systems can't talk to each other is not. Do the risky, thin thing first and let every later story make the skeleton stronger.

When to stop cutting

Splitting has a floor. Once a story drops below roughly a day of work, the fixed costs start to dominate: it still needs writing, estimating, prioritising, a code review, a pipeline run, and a mention at standup. Ten half-day stories carry ten sets of that overhead where three two-day stories carry three. You'll also flood your board with tickets that individually mean nothing, which makes the sprint harder to reason about, not easier. Small enough to finish comfortably within a sprint is the goal. Small enough to finish before lunch is a process fetish.

The other time not to split is when the story only feels big because it's vague. Splitting a vague story gives you several vague fragments, and now the confusion has multiplied. Clarify first, then cut. If your stories are chronically hard to pin down, the fix is upstream in how they're written; we've covered that in writing user stories your team can actually estimate.

Let the estimates point at the seam

The best splitting trigger isn't a size threshold. It's disagreement. When your team estimates a story and the votes land on 2, 3, 8, and 13, don't average it and don't argue the number. Ask what each person was actually estimating. Nine times out of ten the 2 was picturing the happy path and the 13 was picturing the edge cases, or the 3 assumed one payment method and the 8 remembered there are four. The spread isn't noise. It's the story's natural seam showing through, and the two mental models in the room are usually the two stories it should become.

This is a real argument for estimating as a group at all, whatever you think of story points. A wide spread in planning poker is a splitting instrument: it locates the cut more precisely than any size rule, because it shows you exactly where the shared understanding breaks. When we see a room split like that in ScrumMastr, the fix is almost never more debate about the number. It's two smaller stories and two boringly unanimous votes.

Split late, split shallow

Last piece of advice: don't split your whole backlog in advance. A split encodes assumptions, and assumptions rot; the six sub-stories you carve out today reflect what you know today, and by the time story four comes up, stories five and six may describe work that no longer makes sense. Split a story when it's one or two sprints from being built, in refinement, with the people who'll build it in the room. (How far ahead to refine at all is its own judgement call, and we've written about that in Backlog refinement: how much is enough?.) Cut the next seam, ship the slice, and let what you learn decide where the knife goes next.