Skip to content
wannacode

Splitting a big story

In short: A big story is cut vertically: every piece goes through everything it needs and gives something someone can try. The patterns hint at where to cut: by steps, rules, data, complexity, quality or operations. A layer (frontend, backend, database) is not a story.

Problem

Three weeks and nothing to show

The story is "As a customer I want to return a product and get my money back." It is big, so the team divides it: one person builds the returns screen, another the database records, a third the refund.

After two weeks the screen is ready, but it does nothing. The database is ready, but nobody can see it. The owner asks "can I see a return?" and the answer is "not yet". In the third week everything is connected, and that is when QA finds that the 14 days are counted from the order, not from receiving the goods.

The pieces were small. But none of them could be tried on its own.

The idea

Vertical, not in layers

Think of the story as a layer cake: screen, processing, database. Splitting by layers cuts the cake horizontally. You get a whole layer of cream, and nobody can eat it as cake.

A good split cuts vertically: every piece has as much of every layer as it needs and gives something someone can try. For returns, the first vertical piece is "the customer requests a return within 14 days of receiving the goods". It is small. But the owner can see it in the first week, and QA can check the 14-day boundary straight away.

This is called story splitting: a big story is cut into smaller ones, each of which is still a story by INVEST.

More precisely, if you are curious

The cake metaphor is old: Bill Wake already uses it in his article on INVEST. Such a piece is called a vertical slice, and splitting is also called slicing.

The idea

Where to cut

There is no single right cut, but there are patterns that come up again and again. Here are six, with the shop:

Pattern When it fits In the shop
By workflow steps the story is a process with several steps returns: request, parcel back, warehouse, money
By business rules one action, many rules the final total: delivery, promo code, loyalty, which applies
By data variations the same path, different data a product in one size, then with size and colour
The main case first there is a main case and many complications search by name, then filters and suggestions
Make it work first, then the quality a requirement for speed or load payment, then payment with 2,000 customers at once
By operations "manage" hides several actions promo codes: create, view, change, stop

The first question is: why is the story big? Because of the steps, the rules, the data? The answer suggests the pattern.

More precisely, if you are curious

The patterns here follow the list most often cited in practice: Richard Lawrence's "Patterns for Splitting User Stories" (2009). Another well-known set is Mike Cohn's SPIDR: Spike, Paths, Interfaces, Data, Rules.

The last pattern is often called CRUD, from create, read, update, delete. In the shop "delete" becomes "stop", and you will see why in the exercise.

Try it

Which pattern?

1. "As a customer I want to buy clothes with sizes and colours." Today the shop only sells products in one size.
2. "As a customer I want to find products by searching." The owner is thinking of search by name, by price, by size, with suggestions as you type.
3. "As a customer I want payment to work in the sale too, when 2,000 customers buy at the same time." There is no payment at all yet.
4. "As a customer I want to cancel an order." Cancelling is allowed before shipping: a new order needs no money back, a paid one needs a refund too.

Try it

Split the return

Choose the pattern, then the pieces of the split in the order they are built.

Story

As a customer I want to return a product I do not like and get my money back.

Step 1: Which pattern splits it?

The idea

Why not by layers

Splitting by layers looks sensible, because that is how the team is organised: one person builds screens, another the processing. But it costs a lot:

  • Nobody can try it. The owner sees something only when every layer is ready. If the story is wrong, they find out last.
  • It cannot be checked. The criteria of the story ("within 14 days of receiving the goods") are about behaviour, not about a screen or a database. QA waits until the end.
  • The risk is at the end. The layers meet at the end, and that is where the mismatches show up.
  • It is not valuable by INVEST. No piece brings anything to anyone outside the team.

Layers are tasks inside the story. Developers build them, but the story counts as done when the whole vertical piece works.

The idea

How to tell a split is good

  • Every piece is a story. It has a role, a goal and a benefit, and passes INVEST.
  • The first piece brings the most. The most value or the most learning. If the first piece is "preparation", you are cutting wrong.
  • The pieces do not overlap. None is inside another.
  • Together they cover the big story. Or at least what of it is really needed.

The last point matters. Often after a few pieces the owner says "that is enough". The remaining pieces are never built, and that is not a failure. That is the split doing its job.

Exercise

Split the stories

1. The final total. The story about the total before payment.

Choose the pattern, then the pieces of the split in the order they are built.

Story

As a customer I want to see the final total with delivery and discounts before paying, so that I know how much I will pay.

Step 1: Which pattern splits it?

2. The promo codes. Marketing's story.

Choose the pattern, then the pieces of the split in the order they are built.

Story

As a marketing employee I want to manage the promo codes so that I can start and stop campaigns without a developer.

Step 1: Which pattern splits it?

Test

Check yourself

1. What is a vertical slice of a story?
2. Why are "frontend" and "backend" not a good split?
3. "I manage the promo codes" is best cut…
4. Which piece of the return should come first?
5. After the split, one piece stays unbuilt for months. What does that mean?

Made by Ivo Gergov as part of Evo Tech's campaign for accessible programming education ·