Write testable acceptance criteria without overfitting them to one implementation.
Acceptance criteria make a small product promise verifiable. They describe externally observable behavior and important quality boundaries using examples precise enough to test, while leaving implementation choices open unless a technical constraint truly matters.
Anchor criteria to a user outcome
Begin with the actor, trigger, desired result, rules, and failure consequences. Identify who has authority to accept the behavior and which criteria are product-specific versus team-wide completion standards such as code review, monitoring, documentation, or security checks.
Cover more than the happy path
- Normal example with inputs, state, action, and observable result
- Boundary values, empty states, duplicates, timing, and concurrency
- Invalid input, permission failure, dependency failure, and recovery
- Data creation, change, retention, audit, and rollback behavior
- Keyboard, screen-reader, contrast, reflow, and language behavior
- Performance, security, privacy, analytics, support, and operational evidence
Choose a clear expression
| Format | Useful for | Example shape |
|---|---|---|
| Checklist | Independent observable rules | Error identifies field and preserves valid input |
| Given/When/Then | Stateful examples and branches | Given expired token, when opened, then offer safe renewal |
| Decision table | Combinations of conditions | Role × account state × action result |
Write and validate criteria
- State the outcome and governing rule.
- Collect representative and difficult examples.
- Write observable results, not internal methods.
- Review with design, engineering, QA, and operations.
- Test criteria against a prototype or thin implementation.
- Update ambiguities before formal acceptance.
Avoid false completeness
- Criteria that restate the feature title
- Pixel-perfect implementation instructions without outcome
- Ignoring behavior after a dependency times out
- Calling a unit test sufficient evidence of user acceptance
Maintain traceability proportionately
Link criteria to the outcome, rule source, designs, tests, release, known exceptions, and acceptance decision. Use automated checks where stable and exploratory or usability evidence where behavior cannot be reduced to deterministic assertions.