User Stories or Use Cases? - YES!
Over the past several months I’ve had a recurring conversation with various large, enterprise organizations transitioning from traditional approaches to more agile methods.
The topic of this conversation has been a discomfort with User Stories, and a desire to maintain their investment in Use Cases.
These organizations come to this conversation hesitantly, but steeled for battle - convinced that I am going to try and disuade them from their ‘un-agile’ ways and insist that they adhere to agile ‘best practices’.
They’ve been generally surprised by my response, so I thought I’d share it here:
‘I actually really like Use Cases; though I tend to use them a little bit differently than it sounds like you are. I actually combine them with User Stories. But before I tell you how I do that, let me ask you a question -
Why do you want to keep Use Cases?’
‘Why’ is always a tough question, so we ramble around a bit, but we ultimately get to the point where we say that the Use Cases have 2 primary purposes:
- They provide a reference for all the details of what we’re doing while building and testing
- They provide a history of what was done, and how the system behaves
At which point I tell them, “that’s perfect, because that’s pretty much what I’ve used them for too. What I find all too often is that organizations have a 3rd, hidden purpose for Use Cases - they provide an alternative to talking to each other…”
They look at me kind of funny and I continue -
“See, in those organizations they view ‘good’ requirements documentation - whether in Use Case format or otherwise - as a stack of paper that they can drop on a developer’s desk, so that the developer doesn’t need to talk to anyone. If the developer does need to have a conversation with the analyst (or, God forbid, the customer) then that’s a sign of bad or less than ideal requirements documentation - that we didn’t really specify them in enough detail…”
Usually there are a few knowing smiles and nodding heads at this point, so I continue -
“So let me tell you how I’ve used Use Cases.
I start with a list of Use Case titles - basically a Use Case Catalog. They generally look something like:
‘As a <User Type> I need to <Activity> so that <Business Value>.’
We called that our Initial Backlog.
Now, those probably look a lot like User Story right?”
They nod
“Well, yes and no actually.”
They then squint at me.
“See that’s just a Story CARD, which isn’t really a story - it’s a ‘reminder to have a conversation’ - which is where the STORY comes from.
We have those conversations on a just-in-time basis of progressive elaboration that we called Backlog Grooming.
Now obviously we don’t want to keep having the same conversations over and over again, so we need to capture the results somehow, so we can refer back to them to know what we’ve discussed; and so we can update them if subsequent discussions lead to changes.
For some teams, the best way to capture those details is with activity diagrams, state diagrams and wireframes. For others its a bulleted set of Acceptance Criteria and notes. And for others it might be Use Cases Scenarios with a data dictionary, business rules and other attributes…
In fact, it might be any combination of those things based on the story and the preferences of the team.
I’ve worked with lots of teams that used the Use Case format as their means of capturing the results of conversations.
And many of those teams were obligated to provide requirements documentation as part of their product - for regulatory or governance purposes, or as an artifact for support and maintenance.
So, for those teams, we made having an up-to-date set of Use Cases part of our Definition of Done. Having up-to-date Use Cases allowed us to keep our product Potentially Deployable - which included meeting regulatory and governance documentation needs.”
Being agile doesn’t necessarily mean discarding everything you know. And it certainly doesn’t mean blind adherence to a set of tools and techniques approved by the agile police.
Being agile means holding to a set of values and principles that ultimately come down to customer, value, feedback, quality, transparency and sustainability.
Being agile means questioning, experimenting, inspecting and adapting, and using what works.