1. Outcome and scope
Start with the user or business outcome, not the interface. State the current problem, who experiences it, what should become possible, and how the team will know the change helped. Add non-goals so adjacent ideas do not quietly enter the commitment.
- Problem: what is difficult or impossible today?
- Outcome: what observable result should change?
- Audience: which users or systems are affected?
- Non-goals: what is explicitly outside this revision?
2. Roles and permissions
Name every actor that can initiate, approve, observe, or be affected by the behavior. Distinguish a role from a persona: roles define capabilities and responsibility. For sensitive actions, state both who can act and who must not be able to act.
3. Primary flow and decision branches
Write the smallest successful sequence from trigger to outcome. Then add branches at the point where a condition changes the behavior. Give each branch a condition and a destination; avoid burying alternatives in notes at the end.
- Trigger and preconditions
- Ordered user and system steps
- Decision conditions and branch outcomes
- Failure, retry, cancellation, and recovery behavior
- Notifications or downstream side effects
4. Data and state
List the entities the feature reads or changes. For new fields, record the type, required status, allowed values, default, and relationships. State important lifecycle transitions, retention expectations, and whether an action is reversible.
Do not copy an entire database schema. Include the product-level data contract that reviewers need to validate behavior and that implementers need to avoid incompatible assumptions.
5. Acceptance and edge cases
Acceptance cases should prove the contract rather than repeat the happy path in different words. Include permissions, invalid input, duplicate requests, timeouts, and state conflicts where they are plausible. Give cases stable names so tickets and automated tests can refer back to them.
6. Decisions, risks, and approval
Record unresolved questions with an owner and the decision needed. Capture risks that could change scope or architecture, but keep general project management outside the product contract. When the revision is ready, name the approver and publish the accepted version before implementation treats it as authoritative.
Review checklist
- The outcome and non-goals are unambiguous.
- Every actor has explicit capabilities and restrictions.
- The primary flow includes decisions, failures, and recovery.
- Data fields and state transitions are typed at the product-contract level.
- Acceptance cases cover important negative paths.
- Open questions have owners; approved decisions have a revision history.