The real meat of a user story is in the acceptance criteria. A lot of the examples you see out there look a bit like this, taken from a Mike Cohn presentation:
In the situations where I have worked there’s far, far too much going on there for one story, but in any event I wouldn’t write the acceptance criteria that way. My version would look much more like a UAT script:
| Action | Expected Result | |
|---|---|---|
| 1 | Log into the site as a non-premium test user (un=x, pwd=y) and make a reservation for today. Note the value associated with it. | Reservation is made as expected. | 2 | Go to the ‘My Reservations’ page. | See that the reservation appears as expected. Now see a link marked cancel by it. |
| 2 | Hit the cancel link. | See a message saying ‘Your reservation has been cancelled’. |
| 3 | Check the email account associated with the test user. | See that they have received a cancellation email matching the attached/referenced template. |
| 4 | Check the email account associated with the hotel. | See that they have received a cancellation email matching the attached/referenced template. |
| 5 | Return to the site and go to the ‘My Account’ page. | See that a charge equating to 10% of the value of the reservation appears on the user’s account. |
| 6 | Repeat the above but log in as a test premium user (un=a, pwd =b). | See that no charge is added to the user’s account. |
That’s a much more detailed description of what the story should do. It’s more effort to write, but for me when I’m writing the story is when I want to put the effort in, and when I have all the information in my head. Come the end of the iteration, I have a pile of stories waiting to be signed off and I don’t want to spending time figuring out how to test ‘verify cancellation’ or whatever.
This type of ‘do this – see that’ script reminds me of the long-running British TV show Catchphrase, and host Roy Walker’s constant exhortation to ‘say what you see’.

Posted on November 7, 2008
0