SN-Logo NewSN-Logo NewSN-Logo NewSN-Logo New
  • Agile Training
    • Scrum Master
    • Scrum Product Owner
    • Leadership Development
    • Private Workshops
    • Calendar
  • Enterprise Solutions
    • Unstoppable Program
    • Agile Keynotes
    • Private Workshops
  • Products
    • Personal Agility Book
    • Ten Agile Contracts Book
    • Extreme Manufacturing Explained
  • Blog
  • About
    • Peter B. Stevens
    • Scrum
    • Personal Agility
    • Saat Network
  • Contact
0

CHF0.00

✕
Core Agile Values
30-09-2010
Lean Agile Scrum Conference High Points
05-10-2010

Getting to Good User Stories

Published by Peter Stevens on 05-10-2010
Categories
  • user story
Tags

User Stories have become so popular for identifying Product Backlog Items (PBIs) that the term ‘Story’ is often used as synonym for PBI — regardless of whether the item in question is formulated as a user story or not. Not all user stories are created equal – good user stories can be turned into functionality rapidly and predictably by a good Scrum team. Bad stories clog up the works and teams have troubles finishing them in the sprint. So what makes a good story and how do you get it small enough to implement in a sprint?

A user story answers three questions: Who? What? and Why? A user story leaves open the questions How? and When? Mike Cohn popularized the canonical form of a user story: As a <class of user> I want <some function> to achieve <some purpose>. For example:

  • As a Job Hunter, I want to find and apply for interesting jobs, so I can find a good job and earn a living.
  • As an Internet shopper, I want to select books from a catalog and order them. (Technically this is not a user story, because their is no explicitly specified goal. Do we need to specify a goal here? Or is it self-explanatory? )

One starting point is the INVEST guideline for good stories. Let’s see how these stories hold up on the INVEST scale:

  • Independent – the stories can be submitted to the team in any order – OK
  • Negotiable – how the stories are to be implemented is subject to discussion – OK
  • Valuable – the feature provides value to the customer or user – OK
  • Estimable – the team can estimate the effort involved – hmm, our sample stories are a bit vague
  • Small – they are definitely not small – they might be OK for planning for two quarters from now, but no way can they be implemented in a sprint
  • Testable – yes and no. I would argue that yes, they are testable, but that there is so much room for interpretation, that it is impossible to say what tests are needed and which tests are not needed to confirm that these stories were implemented properly.

If you are in doubt as to whether your stories are good stories, ask yourself if the stories answer the three questions (Who-What-Why) and ask your team if the story satisfies the INVEST criteria.

So how do you make a story smaller? Here is a list of 13 patterns which I would recommend:

  1. Split on user roles/personae
  2. Split on conjunctions (and, or, etc).
  3. Split on functional components
  4. Split on test cases
  5. Split on business priorities
  6. Split on business process alternatives
  7. Sequences – Build the pipeline one segment at a time
  8. Sequences – Bore a pilot hole and then make the tunnel bigger
  9. Split on non-functional requirements
  10. Separate Goal and Function
  11. Split on Data Types
  12. Split on Data Operations
  13. Split on Levels of Quality

This is a long list, so I will work through the list and provide more details about what each of them mean in the coming entries.

Here are some patterns which I would not recommend employing on the product backlog entries:

  • Spiking
  • Layering
  • Development Process

Spiking is simply dividing the story into analysis and implementation, with a time box and a set of set of questions to answer about the story. It is a good engineering practice, but the analysis part delivers no value to the customer or user. So I would call it part of backlog grooming and insist that it fit into the 10% or so of the team capacity which it invests to getting the backlog item “Ready” to implement.

Layering can be formulated as ‘user’ story: “As a developer, I want a DB-Schema, so I can deliver value to the customer in a future sprint.” Development Process is pretty much the same: “As a developer, I want a spec, so I can implement some value in a future sprint.” Both of these stories fail the Valuable test. They are not valuable to the customer or user.

BTW – There are cases where the developer is a legitimate user, such as when the developer needs a certain functionality to identify and fix problems. But when the developer needs an artifact to deliver value in a future sprint, this is a warning sign that you are falling back into waterfall thinking.

Share
Peter Stevens
Peter Stevens

Related posts

09-05-2016

What’s a good spike?


Read more
17-11-2010

Quick poll: How many stories in the sprint?


Read more
09-06-2008

Successful Growth, but how?


Read more

2 Comments

  1. Daniel Serodio says:
    14-10-2010 at 23:32

    That's an interesting paradox. When you split a User Story, it may become testable and estimable, but OTOH it ceases to provide value to the user – so the PO can't prioritize them – and they're not independent anymore.

  2. Peter says:
    18-10-2010 at 07:16

    Hi Daniel,

    It's not a paradox if you split user stories vertically: each story after splitting still has a user/customer level acceptance test associated with it.

    The acceptance test demonstrates the "V" in invest. Obviously the value of a split story may be very small, but it's not zero.

    If you split stories "horizontally", i.e. Specifcation, DB layer, XML-Layer, UI-Layer, then you are in the situation you describe. There is no acceptance test except for the final layer.

    This brings to a two-tiered concept of done. Level 1: the acceptance test for this story passes; Level 2, the collection of stories is useful enough to the customer to justify releasing it.

    Level 2 done may be big enough that it cannot be accomplished in one sprint. So the P-O decides if that level has been achieved at the end of each sprint.

    Cheers,
    Peter

Learn more about Agile

  • Module 1 | Self-Leadership with Personal Agility |  June 6-7, 2023
    in Zurich
    June 06, 2023 -
    June 07, 2023
    Register Now
  •  

  • Certified Scrum Product Owner | Face-2-Face | English | Jun 29-30, 2023
    in Zürich
    June 29, 2023 -
    June 30, 2023
    Register Now
  •  

  • Certified Scrum Master | Face-2-Face | English | Jul 06-07, 2023
    in Zürich
    July 06, 2023 -
    July 07, 2023
    Register Now
  •  

  • Certified Scrum Product Owner | Face-2-Face | English | Aug 24-25, 2023
    in Zürich
    August 24, 2023 -
    August 25, 2023
    Register Now
  •  

Saat Network GmbH is a small, independent company dedicated to helping you discover and apply the values, principles and practices that will enable you to thrive in the 21st century.

Quick Links

  • What Really Matters – Peter Stevens’ Blog

High Performing Teams

  • Get Stuff Done
  • Get Right Stuff Done
  • Create Alignment
  • Leadership

Free Resources

  • Personal Agility Institute
  • Impressum
  • Terms and Conditions
  • Privacy Policy
© 2023 Saat Network GmbH. All Rights Reserved.
0

CHF0.00

✕

Login

Lost your password?

We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept All”, you consent to the use of ALL the cookies. However, you may visit "Cookie Settings" to provide a controlled consent.
Read more about our Privacy Policy
Cookie SettingsAccept All
Manage consent

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary
Always Enabled
Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.
CookieDurationDescription
cookielawinfo-checkbox-advertisement1 yearSet by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Advertisement" category .
cookielawinfo-checkbox-analytics11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics".
cookielawinfo-checkbox-functional11 monthsThe cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional".
cookielawinfo-checkbox-necessary11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary".
cookielawinfo-checkbox-others11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other.
cookielawinfo-checkbox-performance11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance".
viewed_cookie_policy11 monthsThe cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data.
Functional
Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.
CookieDurationDescription
mailchimp_landing_site1 monthThe cookie is set by MailChimp to record which page the user first visited.
Performance
Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.
Analytics
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
CookieDurationDescription
CONSENT2 yearsYouTube sets this cookie via embedded youtube-videos and registers anonymous statistical data.
_ga2 yearsThe _ga cookie, installed by Google Analytics, calculates visitor, session and campaign data and also keeps track of site usage for the site's analytics report. The cookie stores information anonymously and assigns a randomly generated number to recognize unique visitors.
_gat_gtag_UA_42152348_11 minuteSet by Google to distinguish users.
_gcl_au3 monthsProvided by Google Tag Manager to experiment advertisement efficiency of websites using their services.
_gid1 dayInstalled by Google Analytics, _gid cookie stores information on how visitors use a website, while also creating an analytics report of the website's performance. Some of the data that are collected include the number of visitors, their source, and the pages they visit anonymously.
Advertisement
Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.
CookieDurationDescription
NID6 monthsNID cookie, set by Google, is used for advertising purposes; to limit the number of times the user sees an ad, to mute unwanted ads, and to measure the effectiveness of ads.
test_cookie15 minutesThe test_cookie is set by doubleclick.net and is used to determine if the user's browser supports cookies.
VISITOR_INFO1_LIVE5 months 27 daysA cookie set by YouTube to measure bandwidth that determines whether the user gets the new or old player interface.
YSCsessionYSC cookie is set by Youtube and is used to track the views of embedded videos on Youtube pages.
yt-remote-connected-devicesneverYouTube sets this cookie to store the video preferences of the user using embedded YouTube video.
yt-remote-device-idneverYouTube sets this cookie to store the video preferences of the user using embedded YouTube video.
Others
Other uncategorized cookies are those that are being analyzed and have not been classified into a category as yet.
CookieDurationDescription
COMPASS1 hourNo description
cookies.jssessionNo description available.
S1 hourNo description available.
SAVE & ACCEPT
Powered by CookieYes Logo