21
“The S in INVEST”

Ten Concrete Techniques to Split User Stories

Embed Size (px)

DESCRIPTION

Techniques to ensure that user stories remain small and adhere to INVEST.

Citation preview

Page 1: Ten Concrete Techniques to Split User Stories

“The S in INVEST”

Page 2: Ten Concrete Techniques to Split User Stories

Confluence page for This Week @:

https://kb.epam.com/pages/viewpage.action?pageId=107875299

Anyone can host a session, just book one in the This Week @ Confluence Calendar

Me: Zarar Siddiqi

Agile Coach with a developer’s itch

http://www.linkedin.com/in/zararsiddiqi

https://github.com/Arsenalist

[email protected]

Page 3: Ten Concrete Techniques to Split User Stories

User Story

Card

Acceptance Criteria

Constraints

Assumptions

Card

As a Customer Service Representative

I want to view the caller’s account

numbers

So that I can pull up an account quickly

Assumptions

• The caller has entered a phone number

• The caller is using a touch-tone phone

Constraints

• Account number retrieval must take

less than half a second after caller is

connected to CSR

• Must display customer name in French

and English

Acceptance Criteria

• Multiple account numbers are

displayed in a numbered list

• Customers search screen is displayed if

no account number is found

Page 4: Ten Concrete Techniques to Split User Stories

• No inherent dependency on another user storyIndependent

• Until iteration, can always be changed and rewrittenNegotiable

• Must deliver “value” to the end-userValuable

• Must be able to be sized so that it can be plannedEstimable

• Small enough to be planned inside a sprintSmall

• Must have a way of knowing when the story is completeTestable

Page 5: Ten Concrete Techniques to Split User Stories

As a website user, I want to add an item to the shopping cart, so that I can later buy it

As a fantasy football player, I want to draft a player, so that I can add them to the active roster

As a Words with Friends user, I want to play a word, so that I can get points for it

Page 6: Ten Concrete Techniques to Split User Stories
Page 7: Ten Concrete Techniques to Split User Stories
Page 8: Ten Concrete Techniques to Split User Stories

Basic Idea: Examine the workflow of a process, and create stories for steps in that workflow

Before

As a grocery store cashier, I want to checkout a customer, so that I can complete the sales transaction

After

As a grocery store cashier, I want to…

…calculate the total amount that will be charged to customer

…specify the method of payment preferred by the customer

…enter the credit card details

…print a receipt for the customer

Identify and disaggregate the

workflow

Page 9: Ten Concrete Techniques to Split User Stories

Basic Idea: For complex data or user interfaces, write stories for related elements

Before

As a Student, I want to view my grades for this semester’s courses, so that I can see how I’m performing.

After

As a Student, I want to view

…my numeric grade for this semester’s courses, so that I can quantify my performance.

…my letter grade for this semester’s courses, so that I can calculate my GPA easily

…the class average for this semester’s courses, so that I understand my relative performance.

Create stories specific to data

elements

Page 10: Ten Concrete Techniques to Split User Stories

Basic Idea: If a program must handle processing of multiple items, write a story which deals with zero input, size one input, and multiple input.

Before:

As a website user, I want to delete items from the shopping cart, so that I will not be charged for them

After:

To remove a single item from my shopping cart, as a website user, I click on the ‘X’ icon next to each item in the shopping cart

To remove multiple items from my shopping cart, as a website user, I select the checkbox next to each item to be removed and click the ‘Remove from Cart’ button

A story for each case

Page 11: Ten Concrete Techniques to Split User Stories

Basic Idea: For complex workflows, create a story to complete the happy path, i.e., the case where everything goes perfectly, and then create stories which deal with the deviations from the happy path (i.e., the exceptions).

Before

As a Dispatcher, I want to view information about a train, so that I can track its movement

After

As a Dispatcher, I want to view information about…

…an on-time train, so that I can track its movement

…a derailed train, so that I can track its movement

…a delayed train, so that I can track its movement

…a cancelled train, so that I can plan alternate routes

A story for the “happy path” where

little goes wrong, and stories for the

rest

Page 12: Ten Concrete Techniques to Split User Stories

Basic Idea: Create a story for the difficult part of the work where key learnings will happen; then create stories which complete the work

Before

As a Salesforce user, I want to create revenue, profit, and growth reports, so that I can perform monthly forecasting

After

As a Salesforce user, I want…

…to create a revenue report for February 2013, so that I can view the revenue generated in February 2013

…to create revenue, profit, and growth reports for all months, so that I can perform forecasting for the next month

Do the core, then enhance

Page 13: Ten Concrete Techniques to Split User Stories

Basic Idea: For work which has an interface (user or system) and a storage component (e.g., database), create stories for the “pass-through” cases where only the interface is invoked, but nothing is stored. Then add other stories which persist information.

Before As an airline customer, I want to view available flights

between two airports, so that I can pick the best option

After To view available flights, as an airline customer, I want to

provide two airport codes

To view available flights, as an airline customer, I want to provide the number of passengers travelling

To view available flights, as an airline customer, I want to view an Available Flights page (structure only, no flights)

To view available flights, as an airline customer, I want to view the Available Flights page populated with real-time flight information

Stories that invoke the UI but don’t

store data; other stories that store

data

Page 14: Ten Concrete Techniques to Split User Stories

Basic Idea: For cases where parameters are dynamic (e.g., drop down lists), create a story for the work using static hard-coded parameters. Then create stories which make the parameters dynamic based on content.

Before

As a Rona website user, I want to search for lawn mowers, so that I can find one that is suitable for me

After

As a Rona website user, I want to search for lawn mowers

…over $500 or under $500, so that I can view expensive and cheaper lawn mowers

…in all available price ranges, so that I can find the right price/value one for me

Stories that make use of dummy

data; other stories that make data

dynamic

Page 15: Ten Concrete Techniques to Split User Stories

Basic Idea: For work where a program must support multiple options (e.g., USD, CAD), create a story for each type of option.

Before

As a SportingBet.com customer, I want to view the betting odds for UEFA Champions League matches, so that I can place an informed bet

After

As a SportingBet.com customer, I want to view the betting odds for UEFA Champions League matches

…in American format, so that I can see odds relative to $100

…in Fractional format, so that I can calculate relative payout

…in Decimal format, so that I can use multiplication to calculate payout

Stories for each option

Page 16: Ten Concrete Techniques to Split User Stories

Basic Idea: If the team finds that the acceptance criteria for a story are growing, make each acceptance criteria its own story (or group them to create stories)

Acceptance Criteria using Given/When/Then Given the /Product/GetStatuses.json endpoint

…when a blank or null order ID is passed, then a Service Exception wrapped in an <error> element is returned

…when a non-existent order ID is passed, then an Order Not Found exception, wrapped in an <error> element is returned

…when a valid order ID is passed, then an empty JSON message containing the word ‘OK‘ is returned

Soft acceptance criteria A business process diagram showing the workflow for

new users is created, reviewed by John, and stored in SharePoint

Written communication has been sent to the Service Management Team notifying them of the upcoming change

Split stories based on Acceptance

Criteria

Page 17: Ten Concrete Techniques to Split User Stories

Basic Idea: For cases where the story cannot be disaggregated due to limited insights about the work, create an investigative story, i.e., a spike, to analyze or research the work, and another to develop it.

Before

As an Amazon.com customer, I want to view products related to the product I am currently viewing that may interest me, so that my shopping experience is enhanced

After

Research the optimal algorithm for displaying related products which considers tandem purchases, similar buyers, price, purchase history, and availability.

As an Amazon.com customer, I want to view products related to the product I am currently viewing that may interest me, so that my shopping experience is enhanced

Knowing the unknown, then develop

Page 18: Ten Concrete Techniques to Split User Stories
Page 19: Ten Concrete Techniques to Split User Stories
Page 20: Ten Concrete Techniques to Split User Stories

http://www.richardlawrence.info/2009/10/28/patterns-for-splitting-user-stories/

http://www.richardlawrence.info/wp-content/uploads/2012/01/Story-Splitting-Flowchart.pdf

http://www.agileforall.com/2009/12/new-to-agile-learn-how-to-split-stories/

http://www.agilelearninglabs.com/2013/05/user-story-splitting-four/

http://www.jbrains.ca/permalink/how-youll-probably-learn-to-split-features

http://gojko.net/2012/01/23/splitting-user-stories-the-hamburger-method/

http://www.discovertodeliver.com/

Page 21: Ten Concrete Techniques to Split User Stories