Why do you need to split user stories?
Often, you hear that it is important to split user stories. You read articles that say it should be possible to complete a user story within a single sprint, ideally within a few days. That’s entirely accurate.
But the main benefit of splitting user stories is that you will deliver value faster!
Let's take a look at an example. Say, we are developing a time tracking tool. Its main purpose is to analyse time spent on different projects.
Let’s also assume that we already have a prioritised backlog that looks like this:
At the first glance, the backlog looks reasonable. It appears to be prioritised and the user stories look small enough. But the devil is in the details. When you look at the the first story - ‘Enter timesheets’
, you'll see the following:
As a developer
I want to be able to log time spent on projects
So that the company could analyse time spent on different projects
**Acceptance criteria**
* Users select a project and enter hours spent for each day
* Users can add more lines for other projects
* Users can delete lines for projects
* If a user presses [delete] on an item with hours,
there has to be a confirmation pop-up
* There should be an area where a user can see total time spent per day
* We want a user to avoid making mistakes. If time soent is less or more than
8 hours per day it has to be coloured in red.
If it’s 8 hours plus/minus one hour, it should be coloured in green.
There’s also a mockup attached.
Well, that’s escalated quickly! A simple story has turned out into a collection of business rules!
It may seem that each rule is small enough and can be easily implemented. But don't give in to that temptation!
Each rule is small enough, but in total they all will make up to a substantial amount of time to develop. That will, in turn, require a good amount of testing, as well.
So, let’s stop and think. What’s the proposition behind your product? It is analysis of time spent on different projects. There is even a user story for that. So, why don’t we go to that user story as fast as possible?!
And what is the main premise of the ‘Enter timesheets’ story? Well, that’s an ability to enter timesheets! So, let's focus on that activity and try to move other bits into separate user stories.
If we look at the acceptance criteria, we'll see that most of it is not about entering timesheets, but related functionality. For example, we want to have a variable number of activities (lines) per week. Then, we would like to see nice visual cues, if hours entered look wrong.
Those are great ideas, but do they help us to achive the overacrching product goal? No. So, let's focus on what is really important. And split the user story into:
Now, we should go back to our backlog and re-prioritise it. We want to put the last two stories to the bottom of the backlog. At the end your backlog should look like:
Always re-prioritise the backlog after splitting user stories. Otherwise, you would do the same things in the initial order and wouldn't move towards your product goals fast enough.
Splitting user stories allows you to prioritise what is really important. And achieve the product goals faster.
You’ll probably have to repeat this exercise for ‘Approve Timesheets’ and ‘View time spent by project’. But I guess you’ve got the idea. You'll end up with the Prioritise - Split - Prioritise cycle.
Another good way to look at is to revisit the famous picture of the iterative Mona Lisa (pictures below are credit of Jeff Patton - the inventor of User Story Maps)
Incremental Mona Lisa
Iterative Mona Lisa
Indeed, you don't want to spend time painting the perfect top-left corner of the picture (the original ‘Enter Timesheets’ story). Instead, you want to sketch out the whole piece. That will already give users and stakeholders something to play with. Such early deliver will allow you to get feedback from users and learn from that.
I've focused on the benefits of splitting user stories here. But if you want to know more about techniques for splitting user stories and prioritising backlogs, then I would suggest the following reading:
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way. My personal thoughts tend to change, hence the articles in this blog might not provide an accurate reflection of my present standpoint.
© Mike Borozdin