User story creation should not be a difficult process. You may encounter the occasional “what do I do here?” situations, but generally, the process should be fairly easy as long as you have the right people helping with understanding the requirements.
At times through your project or product development, you will probably create larger user stories that may be a little vague on the details. As the project progresses it can be beneficial to break those stories down into smaller and more digestible chunks. It can make the requirements easier to understand, helping the team to learn the details of what is needed in order to satisfy the requirements.
There are two common ways to approach splitting or slicing user stories: horizontal splitting and vertical splitting.
Horizontal Splitting / Slicing
Horizontal splitting or slicing is a method that is more concerned with slicing along similar work or layers. For example, if you have a particularly large user story that involves creating user accounts. You could slice the work based on the user interface, and the required work for the database. In one user story, you could layout the account creation page, but in another, it would describe the data you need to store for the account creation process.
Horizontal slicing does not usually result in an increment of potentially releasable product. If your goal is to be able to release what you create as soon is it is created, horizontal slicing may not work well for your needs. This does not necessarily make it anti-Agile, (*Scrum, not Agile, wants a potentially releasable increment) but it can make it more difficult to prioritize the work and decide what has to be done first.
Vertical Splitting / Slicing
Vertical splitting of a user story tends to make more sense when your goal is to have an increment of potentially releasable product. It involves taking the pieces of each layer that work together and breaking the user story down from that perspective.
If you begin with a story of, “As a user, I want a dedicated account so that I can access relevant information related to my site usage.” that is a fairly big ask to do in a single two-week iteration.
If you are working on creating a user account, rather than focus on each layer, you would drive your focus on the pieces that make up a user account. This could be the account creation process, dedicated user profile, editable user profiles, enhanced profile features, retention of account holder information (like payment information, past orders, etc) and whatever else you can think of.
For vertical splitting, there are several ways to go about it. You may find that you have to use more than one method below for larger stories.
- Split by organizational, external rules, or business operations: Work on implementing features from the organizational perspective. There could be restrictions on shipping to certain countries, shipping charges could change, sales tax collection rules, multiple shipping options or a preferred shipping option; or even who is going to pay for shipping. You can define what happens when an order is canceled or the return policy of the order.
- Split by workflow: For example- users create an account, then make a profile, maybe upload a profile picture, then they log in to the account, they can modify their profile or purchase a product through the account. After that, you might save credit card information to the account. Customers can then view pending purchases and then view historical purchases.
- Split by Use Case: Happy path and unhappy path splitting. So the user can create an account, but what happens when the user name they wanted is chosen?
- a) As a customer, I want to be able to choose my unique username for my account so that I can more easily identify and remember my login information.
- b) As a customer, I want to be notified when my chosen username is not available so that I can select a different username.
- Split by user screen: Split the stories up by what the user will see. The user will see an account creation screen, they will see a login screen, a profile screen, and a screen to create and/or modify the profile. They might see a screen to save credit card information or address information, maybe a screen that shows all of their orders separated by pending and already fulfilled orders.
- Split by parameter: Typically this would be some sort of identifying characteristic or associated data; like product searching ability. Username creation and ensuring that user names are unique, or how you want the application to behave when searching for other users. How historical information gets displayed and is it searchable could be included as a possible story. The inclusion of product reviews and searching through other users reviews is another potential parameter.
- Split by viewing method: This would be about focusing on all of the ways people can interact with your product. It is almost horizontal in the approach and you may still find that you have to split using other means and then break it down further by the viewing platform A viewing platform would be the type of computer or phone or the web browser used like Chrome or Edge.
- a) As a customer, I want to be able to log in to my account using my desktop computer so I can view my order status.
- b) As a customer, I want to be able to log in to my account using my Android phone so I can view my order status.
- c) As a customer, I want to be able to log in to my account using my Apple phone so I can view my order status.
- Split by enhancements: You create the base core functionality and then add enhancements. This can also be a split by quality improvements – you begin with lower quality and move to higher quality.
- Core functionality: a) As a customer, I want to be notified when my chosen username is not available so that I can select a different username.
- Enhancement: b) As a customer, I want the system to suggest available usernames so I do not have to make multiple attempts at finding an available username.
- Split by implementation difficulty / major effort: Split the stories so that the first story is more difficult or larger and the following stories are smaller or easier to implement. You know you need a customer account system so you create a story for that. Then you have stories for a customer to create their own unique instance of the account. You build the store (major effort), then you add the products, and finally a method of purchasing the products.
- Other Methods:
- Split by dependencies
- Split by test cases or acceptance criteria
- Split by priority or value
- Split by possible data variations (such as languages)
There really is no right answer in how you split every single user story. There may be methods that make more sense than others, but that doesn’t really make a chosen method wrong. When in doubt, ask the people who want the feature or ask the developers which splitting method makes the most sense. In collaborative affairs, you shouldn’t be making major decisions alone.