Newcomers to agile-style requirements gathering may think it is all about the user story. But acceptance criteria are the real star of the show.
If you’ve not come across user stories before, they are a way to capture requirements without straying into solutions mode or, worse, just creating a shopping list of functionality.
The typical format is:
As a {role} I want {feature} so that {benefit}.
Representing your requirements in this way means that developers are able to brainstorm solutions to the actual problem rather than merely building a predetermined one. It also helps everyone on the project understand who they are building the product for and what the audience’s motivations are.
Acceptance criteria
For them to be effective, user stories have to be partnered with acceptance criteria. At first glance, it appears that acceptance criteria merely tell the team when the user story is done. As a result, it can be tempting to leave them out because they seem self-evident.
I believe acceptance criteria are the most important part of the user story approach to requirements gathering. Done right, they:
- give the project team a very straightforward definition of done
- give the customer necessary clarity on what will be delivered (that the user story itself cannot provide)
- give the developers clarity on what needs to be built
- provide a ready-made test plan
Writing acceptance criteria
Although acceptance criteria can be written any way you please, the “Given-Then-When” (GWT) format (from a methodology called behaviour-driven development) applies some helpful formality to them. So, rather than a criterion such as:
User must enter correct email address
we can explain it like so:
GIVEN the user has entered their email address incorrectly WHEN they submit the login form THEN the login screen is still displayed AND an email incorrect message is displayed AND their email address is still displayed so it can be corrected
So much better!
If you’re new to agile requirements gathering, why not give GWT acceptance criteria a go?