23/36 : π A Guide to Effective User Stories and Story Mapping and Pointing
User stories: the compass that guides agile development towards user-centric solutions
π Hey PMs
Weβre thrilled to announce ourΒ Product Discovery Course!
π "From Pre-Discovery to Solution Execution" is a comprehensive course on product management techniques and strategies.
"The BEST INVESTMENT you can make is in YOURSELF "β - Warren Buffet
What are user stories?
A user story is an informal, general explanation of a software feature written from the perspective of the end-user. Its purpose is to articulate how a software feature will provide value to the customer.
User stories:
Are easy for anyone to understand
Represent bite-sized deliverables that can fit in sprints, whereas not all full features can.
Help the team focus on real people, rather than abstract features
Build momentum by giving development teams a feeling of progress
The 3 Cβs (Card, Conversation, Confirmation) of User Stories
CardΒ β a written description of the story used for planning and estimation.
ConversationΒ β Discuss your ideas with others. Let them ask lots of questions. Work together to come up with ideal solutions. The goal is to build a shared understanding.
ConfirmationΒ β Work towards agreement on what to build. Record that agreement as a set of confirmation tests.
Types of User StoriesΒ
We can classify user stories into functional and technicalΒ types:Β
Functional β Normally,Β a user story is writtenΒ based on theΒ functional aspects of the application software, while focusing on the user and the valueΒ ofΒ the functionality providedΒ to the user. Β Functional stories concentrate on the product features which the customer will be testing at the end of an iteration based on the acceptance criteria defined for the story.Β
Technical β Technical stories are written to be ableΒ toΒ support the functional stories. Technical stories can be classified asΒ
Infrastructure storiesΒ β any infrastructure addition/modification that may be required to support the functional storyΒ
RefactoringΒ β this type of story is written to maintain the code and address technical debts. This can be used for designing and automation needs as wellΒ
SpikesΒ β stories that require research on architecture and design which may in turn help achieve the functional need of the customer.Β
Why create user stories?
For development teams new to agile, user stories sometimes seem like an added step. Why not just break the big project (the epic) into a series of steps and get on with it? But stories give the team important context and associate tasks with the value those tasks bring.
User stories serve a number of key benefits:
Stories keep the focus on the user.Β A To-Do list keeps the team focused on tasks that need to be checked off, but a collection of stories keeps the team focused on solving problems for real users.
Stories enable collaboration.Β With the end goal defined, the team can work together to decide how best to serve the user and meet that goal.
Stories drive creative solutions.Β Stories encourage the team to think critically and creatively about how to best solve for an end goal.
Stories create momentum.Β With each passing story, the development team enjoys a small challenge and a small win, driving momentum. Β
How to write user stories
Consider the following when writing user stories:
Definition of βDoneβΒ βΒ The story is generally βdoneβ when the user can complete the outlined task, but make sure to define what that is.
Outline subtasks or tasksΒ β Decide which specific steps need to be completed and who is responsible for each of them.
User personasΒ β For Whom? If there are multiple end-users, consider making multiple stories.
Ordered StepsΒ β Write a story for each step in a larger process.
Listen to feedbackΒ β Talk to your users and capture the problem or need in their words. No need to guess at stories when you can source them from your customers.
TimeΒ β Time is a touchy subject. Many development teams avoid discussions of time altogether, relying instead on their estimation frameworks. Since stories should be completable in one sprint, stories that might take weeks or months to complete should be broken up into smaller stories or should be considered their own epic.
How to Write Good User Story with INVEST Guidelines
The acronym INVEST helps to remember a widely accepted set of criteria, or checklist, to assess the quality of a user story.
IndependentΒ β Each User Story should represent a distinct and independent set of business values such that, were it released on its own, it would deliver incremental value over the previous state.
NegotiableΒ β While the end-goal may be clearly described, the methods by which that goal is achieved should be negotiable β between the Product Owner and the Development Team, the Product Owner and the Customer, or any other involved stakeholders β so as to prevent unrealistic constraints on the feature or functionality.
ValuableΒ β The business value of any User Story should be readily recognizable by reading the story, and each story should represent some sort of value to a specific user type.
EstimableΒ β We must have enough information that we can properly size a story so that we may properly plan and commit to our work. (But no more!)
SmallΒ β User Stories should be small enough that they are able to be completed within a sprint.
TestableΒ β All members of the team need a clear and precise way to verify whether or not a User Story has been completed.
User Story Example :
UseCase: when we build a website that has two types of users β logged-in users and guests β weβre likely to write the following acceptance criteria for a user story that defines the sign-in feature for a logged-out user:
AsΒ a logged-out user
I wantΒ to be able to sign in to a website
So thatΒ I can find access my personal profile
Scenario:Β System user signs in with valid credentials
βGiven Iβm a logged-out system user
and Iβm on the Sign-In page
When I fill in the βUsernameβ and βPasswordβ fields with my authentication credentials
and I click the Sign-In button
Then the system signs me inβ
The Given/When/Then template helps you reduce the time spent on writing test cases since you describe the systemβs behavior upfront. We prefer writing acceptance criteria with the first-person βIβ since it helps us talk from a userβs perspective and keep a userβs needs in mind.
User Story Splitting
The goal ofΒ story writingΒ is to describe and create increments of user value that can be implemented by a development team in a short amount of time, typically on the order of hours or, at most, a few days.
Before aΒ user storyΒ isΒ readyΒ to be scheduled for implementation in an upcoming iteration, it should beΒ βsmall enough,βΒ the usual rule of thumb being βa story that can be completed within the iterationβ.
However, many user stories start out larger than that.
βSplittingβ consists of breaking up one user story into smaller ones, while preserving the property that each user story separately has measurable business value.
Splitting stories lets us separate the parts that are of high value from those of low value, so we can spend our time on the valuable parts of a feature. (Occasionally, we have to go the other way as well, combining stories so they become big enough to be interesting.)
Thereβs usually a lot of value in getting a minimal, end-to-end solution present, then filling in the rest of the solution. These βsplitsβ are intended to help you do that.
Why Story Splitting Matters
Working from a prioritized backlog of small user stories allows a team to get value and high-quality feedback on frequent intervals.
Many teams struggle to split large user stories and features into good, small stories.
Instead of ending up with small vertical slices through their architecture, they get stories that look more like tasks or architectural components and fail to experience the value or feedback small stories should provide.
Fortunately, story splitting is a skill that can be learned in a relatively short time. Weβve seen teams go from struggling to fluently splitting stories with just a couple hours of practice and some simple tools.
What Makes a Good User Story?
Before we can talk about splitting user stories, we need to make sure we have a shared understanding of what a good story is and what sorts of things can and canβt be split into good stories.
A user story is simplyΒ a description of a change in system behavior from the perspective of a user. It describes something a user wants to do with the system or wants the system to do for them that it doesnβt do today.
User stories are great for translating that customer empathy into a series of changes to a software system while maintaining the userβs perspective throughout.
The goal ofΒ story writingΒ is to describe and create increments of user value that can be implemented by a development team in a short amount of time, typically on the order of hours or, at most, a few days.
This allows the product owner and the team to get quick feedback on the larger feature being built, with the expectation that this will steer the ultimate direction of the featureΒ and maximize user value.
Story-splitting techniques
There are many techniques for splitting stories. Here are some of the more useful ones.
Split by capabilities offered This is the most obvious way to split a large feature. Look at the different capabilities being offered and split each oneΒ into its own story. For example, the capabilities βsort and searchβ may each be its own story. Splitting further, eachΒ wayΒ of sorting or searching may be its own story.
Split by user roles Administrators interacts with a system differently from normal users. Teachers interact with instructional software differently from students. By defining the different roles in your system, you can split features and stories to address the unique needs of each role.
Split by user personas Even in the same role, different people interact with software in different ways. A power user wants lots of keyboard shortcuts. A casual user may want a lot of intuitive, hold-your-hand forms of help. Handicapped users may need very different ways of interacting with the system, even though they are doing the same tasks as other users.
Split by target device You canβt assume that users are interacting with your system using a standard computer. Various smartphones and IoT devices need to be considered in your stories. Splitting stories by device provides a more natural experience for your users.
Cynefin and Story Splitting
Dave Snowdenβs Cynefin model is a helpful way to think about the right strategy for a problem depending on its complexity. We find Cynefin so useful, we include it in almost all our workshops, either as prerequisite content or in the workshop itself. If youβre not yet familiar with the model,Β check out our overview.
Story splitting looks different for each Cynefin domain. Hereβs how:
ObviousΒ β Just build it. Or, if itβs too big, find all the stories, and do the most valuable ones first.
ComplicatedΒ β Find all the stories, and do the most valuable and/or most risky ones first.
ComplexΒ β Donβt try to find all the stories. Find one or two that will provide some value and teach you something about the problem and solution, build those and use what you learn to find the rest.
ChaoticΒ β Put out the fire; splitting stories probably isnβt important right now.
DisorderedΒ β Figure out which domain youβre in before splitting so you donβt take the wrong approach.
The most important nuance is in the complex domain, where starting the work will teach you about the work. In this situation, it doesnβt make sense to try to find all the small stories that add up to the original, big one. Instead, itβs more productive to find one or two you can start right away in order to learn.
Some are uncomfortable with this approach, wanting all the stories enumerated and sized to be able to project time over the backlog. But if youβre really in the complex domain, this only gives you the illusion of predictabilityβthe actual stories are likely to change as you get into the work. Better to be transparent about the uncertainty inherent in complex work.
Vertical vs Horizontal Slices
Youβll often hear the term vertical slice in reference to good stories. This is about the shape of good stories relative to software architecture.
A vertical slice is a shorthand for βa work item that delivers a valuable change in system behavior such that youβll probably have to touch multiple architectural layers to implement the change.β When you call the slice βdone,β the system is observably more valuable to a user.
This is in contrast with a horizontal slice, which refers to a work item representing changes to one component or architectural layer that will need to be combined with changes to other components or layers to have observable value to users.
Letβs look at a really simple architecture. Thereβs a UI layer, some business logic, and a database. Your system may be more complicated than this, but it probably contains at least these three layers.
To get most of the INVEST attributes, a story is necessarily going to touch all 3 architectural layers. We probably wonβt be able to deliver value without some UI changes, some logic changes, and some persistence changes. Thus, a story is a vertical slice through the system.
What is user story mapping?
User story mapping is a visual exercise that helpsΒ product managers and their development teamsΒ define the work that will create the most delightful user experience. It is used to improve teamsβ understanding of their customers and to prioritize work. Software leaderΒ Jeff PattonΒ is often credited with having developed and shared extensive knowledge around user story mapping.
In user story mapping, teams create a dynamic outline of a representative userβs interactions with the product, evaluate which steps have the most benefit for the user, and prioritize what should be built next. ForΒ agileΒ organizations, it provides an alternative to building a flat list ofΒ backlogΒ items or working from lengthy requirements documents.
User story mapping employs the concept of user stories β which communicateΒ requirementsΒ from the perspective of user value β to validate and build a shared understanding of the steps to create product users love. Teams write user stories in a format that captures business value and can be completed within a development iteration (usually called aΒ sprint).
By visually mapping out these user stories, product teams tell the story of the customer journey and break it into parts. This helps them design and build the functionality that is focused on desired customer outcomes, instead of solely on development output or feature specifications.
Why User Story Mapping?
Story Maps were first introduced by Jeff Patton in 2005. The main idea behind Story Maps is that single-list product backlogs are a terrible way to organize and prioritize the work that needs to be done. A richer structure is necessary. A user story map is a powerful tool that enables an agile team to groom their product backlog and plan the product releases more effectively.
A user story map captures the journey a customer takes with the product including activities and tasks they perform with the system. Creating a story map collaboratively ensures team members are on the same page from the start of the project through to ongoing development of new releases.
Here are few benefits of using story map as a user story tool:
Manage backlog with an overview and leveled structure
Brainstorm, discuss, and prioritize user needs in a collaborative approach
Manage activities and tasks (walking skeleton), and divide them into epics or user stories systematically
Arrangement and prioritization of user activities and user tasks, or drill down to refine them into related epics or user stories
Manage user stories online for both remote and co-location environments collaboratively for keeping everyone in your team on the same page.
Benefits of user story mapping
The approach described by Jeff Patton is just one of many ways to structure the story map. In any case, the manner in which we organize backlog items inside the map offers the following benefits:
Clear priorities. The general approach of how a story map is structured makes it easy to prioritize each story, preserving the connection between big and small items. βPrioritization becomes easier as a story map begins with the backbone that is not prioritized. You need all of those things since they are required to create an MVP to start off with something. By using the backbone, itβs easier to see where stories or tech tasks belong and where the gaps in functionality are,β explains Vlad Khilchenko, a product manager at AltexSoft.
Built-in user journey. The backbone of a story map is an oversimplified version of a user journey map. While they are structured differently and are used for different purposes, the product team will be able to navigate the backboneβs steps. Additionally, each step can be widely expanded by stories, providing more context to each piece of functionality.
Visible product goals and vision. A story map is a dynamic document that will expand as the product grows. Having a birdβs-eye view of the project, and understanding where it starts and where it ends, the team can grasp the vision of the product and how to implement it on a technical level.
Helps to avoid backlog grooming. Large-scale projects may last years. As the product moves closer to its release, items in the backlog may lose their relevance, and thus should be reviewed. The act of backlog βcleaningβ is called a grooming or refinement session. If you structure your backlog as a story map, items are always placed according to their priorities.
Better communication. Product backlogs are created by a single person, a product owner. Contrary to that, story maps are done during the mapping workshop that involves many team members. This facilitates discussion about the product right from the beginning.
As we can see, the practice of story mapping is a much more flexible and transparent approach to communicate product ideas. As any document in agile, itβs done with the purpose of building working software. That way, a map can be built in any way you want, given that you stick to the main idea.
What is a Story Point?
Story points represent the relative sizing of the user story. It is a unit of estimation used by Agile teams to estimate User Stories.
When the product manager wants some features to be developed he/she desires to know how soon the team can complete the features and how many resources it will take to complete the work. From the developerβs perspective, itβs next to impossible to predict the exact time in which he/she can complete the work. The person can, however, give a rough estimate in terms of how much time it might take to complete the work. Note that instead of βwillβ the developer chose to use βmightβ because he/she is not absolutely βsureβ about the time factor but βfeelsβ it might take that much time. This is user story estimation in a nutshell.
You donβt give an exact number explaining how complex the story is and how long itβll take to develop β you give a rough βestimateβ.
We are good at comparing size, so estimating a story using a Fibonacci series sequence (0, 1, 2, 3, 5, 8, 13, and 21, etc) gives more clarity of its complexity and relative sizing in terms of development. It is helpful to have a set of stories nearby to make a comparison and recommendation to set priority.
While estimating stories, Consider :
Complexity:Β Consider the complexity of the story.
Risk:Β Consider the teamβs inexperience with developing this story.
Implementation:Β Consider the implementation factors.
Deployment:Β Consider the deployment requirements.
Interdependencies:Β Consider other outside issues.
Advantages of using story points for estimating work
Story points are a measure of relative size and complexity.
Story points are unitless, meaning as a scale, they are only valuable to compare against each other within the same team.
Estimating in story points allows/encourages everyone, including business people to participate in the estimation process (using Planning Poker).
Estimating story points is fast and easy.
Story points initiate high-level discussions about everything that is involved in a project.
Earned points can be used to generate the teamsβ velocity which can be used to predict future work capacity.