User Story
As an agile team, we don’t want delivery of our work on story X to be held up by story Y or condition Z.
Description
Hi, and welcome to the first part of my six part series based on each of the words that make up the INVEST approach to user story creation. Today we talk about what it means for your story to be Independent, a term that enjoys many meanings.
In the context of user stories, I’d like to unpack the use of the term independent as an antonym to the definition of dependent 2.a from the Merriam Webster dictionary which reads:
2. a : determined or conditioned by another : contingent plans that are dependent on …
Finer tuning on what we mean by independent, I think the folks at BrainConcert sum up nicely what we’re after here with:
The ‘I’ in the INVEST guidelines stands for Independent, where each user story can stand on its own and can be developed, tested, and delivered independently.
Repro Steps
Consider the following ask from a customer using your really cool big data, machine learning equipped, visualization tool:
- As Debbie the Data Scientist, I want to see live updates to my pie chart when I make changes to its label settings.
First, while Debbie’s need is real, what we’ve described above isn’t a user story. It is at least one level above that known as a Feature, though I can also see where some might even call it a small Epic.
Whatever you call this “it’s not really a user story” story, there are both some obvious and not-so-obvious dependencies here. The type of stuff I might flesh out in a meeting with architects and principal developers. where you get together and walk the request through several iterations.
Below is an example of what the evolution of Debbie’s original Feature request might look like over the course of a 15 minute conversation:
- How do I get the label panel to send a message to the pie chart panel?
- How do I get the label panel to send a message to the pie chart panel without holding up work-in-flight on the pie chart panel?
- How do I get the label panel to send a message to other types of visualization panels without having to wait for work to complete on other panels’ ability to hear our message?
- How do I get the label panel to send messages and not care who receives them?
In getting to the 4th generation of the request, we can now write a user story that can be delivered into production, regardless of whether or not the pie chart panel — or any other panel for that matter — is listening. Something along the lines of:
- As Debbie the Data Scientist, I want a change in label settings to send a message.
Now I know what some of you are thinking “Dean you idiot! You just replaced my simple story about the label panel talking directly to the pie chart panel with anApache Kafka epic!”
Perhaps that is indeed the case, perhaps though this particular example might simply end up with recommendations for one or two additional additional pub-sub user stories by those calling the shots on “how.” One where we add the readily available open-source plugin to our Javascript driven front end framework, and the other would we expose event bus endpoints to the panels.
Granted, in adding predecessor stories we in fact create another form of dependency, but with a positive payout of a more resilient infrastructure that allows both the product and the tribe more options to create more value with less dependencies between different parts of the application.
And this gets to my larger point …
… given we live in a world of ever evolving developer frameworks, microservice approaches, devops practices, and so on … Independent in the context of INVEST is a trade-off between working with and within those constraints that add value … while relentlessly rooting out and eliminating those dependencies that introduce fragility, technical debt, delays, parking of code, waiting on another team, and/or conditions that endanger your product, customers, and deliverables.
Acceptance Criteria
We know we’ve succeeded when the feature is delivered without delays or impediments introduced by other teams working on other features on related pages or associated back-end services.
We know we’ve wildly succeeded in making the above story independent when we can quickly deliver additional value to when Debbie comes back and says “Awesome, can we add this to the Pie Settings portion of the setup panel as well?”.
Additional Reading
Here are is a sampling of some other blog posts I read in preparation of this post on making user stories independent. I’ll leave it up to you to draw your own conclusions, but only if you promise to share your comments and ideas here!
- Bill Wake — Independent Stories in the INVEST Model
- User Story Dependencies are more Apparent than Real — @agileprogmgr
- StackExchange — How do you handle dependent stories in scrum?
- Relationship between user story, feature, and epic? StackOverflow
- @AJSutton on Features vs Stories
- Why it pays to INVEST in user stories — DeanOnDelivery.com
Image Credits
- Header image of sprinter with baton via Braden Collum on Unsplash
- Annotated screenshot comes from the Open Source Kibana project