Story splitting – refinement to an optimal granularity
An apparently small story may turn out to be much bigger than expected. Only by refinement or story splitting can you discover this. Story splitting can be done early or just before the preceding sprint. We recommend doing it as early as possible to avoid late surprises.
We consider “story splitting” and “story refinement” as very similar activities. It’s about optimising the granularity of the written user story.
What are user stories
For those teams that are able to colocate, the user story can be just a reminder of a conversation. In most circumstances, we rely on the user story as the written functional requirement. To be effective in providing clear communication user stories must be carefully written to minimise misunderstandings. But first we must understand how user stories fit within the wider context (hierarchy) of communication of what needs to be done to provide the users with value:
The Context of User Stories
A complete user story
Having established this context, we can now see where user stories fit. The context within the hierarchy helps to understand what is needed in a user story, for it to be well formed and of good quality. A complete user story must:
- specify a user or persona must be specified.
- describe the high level functionality to be performed as part of a single discrete functional action by the user.
- include all the functional steps needed to meet the user requirement.
When to do Story Splitting
Ideally as early as possible in the software lifecycle. It is not as onerous as many would contend and is rarely a wasteful activity. Check out our blog article on recommended user story quality attributes
Techniques for Story Splitting
Think first Who is the user and what data types are they needing to handle to achieve a specific requirement that leaves the system in a stable state at the end.
User – Oriented
Is this story describing the functionality for a persona or groups of personas?
Measurable (clear functional steps)
In order to be measurable or sizeable, we need to know the functionality in terms of data groups being handled. e.g.
as registered user I can update my profile.
For measurable we recommend the COSMIC functional sizing standard, which requires that objects of interest are identified.
Have we mentioned all the data groups needed for this story? If we have to lookup some data from elsewhere, that needs to be included too. Many user stories do require various data lookups before an object type is created or updated.
Business rules are usually constraints based on context or referenced data. Be sure to include all referenced data types in your functional user story. Occasionally, business rules force a story to be split into two similar stories. Sometimes, context can be presented by combining the user name with a particular status, e.g. loggedin_user_with_cart_items
Sometimes we over-specify a user story with all the acceptance criteria before we have the basics right. Avoid doing this too early.