Upload
night-wolf
View
1.752
Download
1
Embed Size (px)
DESCRIPTION
Techniques to ensure that user stories remain small and adhere to INVEST.
Citation preview
“The S in INVEST”
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
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
• 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
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
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
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
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
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
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
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
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
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
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
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
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/