Acceptance tests are a team responsibility that involve the customer, the programmers, and the tester.
To get the details down, you need to wear all three hats.
When questioning customers (and programmers):
Take the responsibility to define the obvious ones yourself; save the hard ones for them.
Ask them to select from alternatives where possible.
Ask open-ended to questions to break new ground and avoid going down the wrong path.
Explore the happy, sad, and bad paths to enumerate the details:
Happy, where nothing unexpected happens and all is well
Sad, where users make mistakes and data is invalid
Bad, where all hell breaks loose
Look at the system from multiple viewpoints on each path:
What the user could do
How the data could be compromised
External events
Be creative when designing tests for unexpected paths and for features not directly evident to the customer.
Don't try to test everything.
Design your tests to minimize risk.
Try these ideas out yourself in the following exercise.