January 9, 2008
@ 10:51 PM
A while ago I wrote about use cases and user stories and how I use both, starting with user stories for ease of estimation and manageability and expanding them into use cases as a way to elicit more requirements.
I just read a recent blog (wiki) entry by Alistair Cockburn (of "writing effective use cases" fame) called  "why I still use use cases".
Alistair explains that he sees (with companies he consults to) three main problems with user stories:
    1. lack of context (what's the largest goal)
    2. sense of completeness - that you covered all bases relating to a goal.
    3. no mechanism for looking ahead at upcoming work.


I think the first reason is partially dealt with by using themes, although use cases provide more context if we also consider the brief description, pre conditions and post conditions.
Also I am not sure I agree (maybe I don't understand) the third one - since you can have a backlog of future work regardless of the requirements methodology you use.

The second point, seems to be around  the same reason I have for using use cases - elicitation of requirements. Indeed, you can see that reading reasons 3 and 4 (of the 5 reasons Alistair  mentions for still using use cases) :
"
3. The extension conditions of each use case provide the requirements analysts a framework for investigating all the little, niggling things that somehow take up 80% of the development time and budget. It provides a look ahead mechanism, so the customer / product owner / business analyst can spot issues that are likely to take a long time to get answers for. These issues can and should then be put ahead of the schedule, so that the answers can be ready when the development team gets around to working on them. The use case extension conditions are the second part of the completeness question.

4. The use case extension scenario fragments provide answers to the many detailed, often tricky business questions progammers ask: "What are we supposed to do in this case?" (which is normally answered by, "I don't know, I've never thought about that case.") In other words, it is a thinking / documentation framework that matches the if...then...else statement that helps the programmers think through issues. Except it is done at investigation time, not programming time. "

Alistair also says that working with short iterations means you have to break the use case into stories :
These days, iteration/sprint lengths are so short that it is not practical to implement an entire use case in just one of them. That means additional work is needed, to create user stories or backlog items for each use case, track that each one get developed, and ensure that the complete set of user stories or backlog items do indeed deliver the subset of the use cases needed for the particular release.

I think that working just from the use case toward stories  is limiting, since it is many times easier to think up a user story and figure out the larger context later on (along with the other details of the use case). Also, as I've mentioned in the above mentioned blog entry, user stories are also easier to estimate not just easier to build.



 
Saturday, January 26, 2008 9:11:09 AM (GMT Standard Time, UTC+00:00)
Alistair Cockburn left a comment on this post, which somehow, didn't registered. Luckily he also copied it on his site. Here it is:

Nice comments there - ... sorry my problem 3 wasn't clear enough, I'll try to fix it .

You write: "I think that working just from the use case toward stories is limiting, since it is many times easier to think up a user story and figure out the larger context later on (along with the other details of the use case)."

This is true. It has to do with the question of /when/ do you write a use case, all at once up front, or in stages over time. The advantage with the former is best sizing of the project, the advantage with the latter is better steering ... however, no matter when the story or step is thought up, fitting it into context still is useful.

Also, nobody really gets the entire use case set fully correct at the start. DSDM recommends, "Baseline requirements at a hight level." Jeff Patton recommends, "Write the contract so there is wiggle room." Both are recognizing the need for adjustment along the way.

You write: "Also, as I've mentioned in the above mentioned blog entry, user stories are also easier to estimate not just easier to build."

True again. This is a decades-old tension between user-readability and programmer-chunking, and we have seen this pendulum swing back and forth. Both are needed. Use cases definitely lie on the user-readability side and make the programmer chunking harder. Stories lie on the programmer chunking side and cause the difficulties I mentioned.

As far as I can tell, there is no conceivable resolution to this tension. Any mechanism that serves one group short-changes the other group. Both are needed.

The mistake is to think that one mechanism adequately serves both purposes. That is why I use both.

Using both is not a contradiction or admission of failure to any camp - it is simply using tools for what they are good for.

All the best, Alistair
Comments are closed.