Requirements and Acceptance
Purpose
Prevent rework caused by implementing an unexamined interpretation of a request. Make the
important interpretation visible while changes are still cheap.
The cheap moment to find that gap is before the first line. This skill is the set of questions
that finds it, and the artefacts — assumptions and acceptance criteria — that make the answer
durable enough that the next person can check it.
Context and scope
Read the request, prior user decisions, applicable project instructions, existing contracts
and relevant code/tests before asking. An explicit implementation choice may be a real
constraint; separate its purpose without discarding it or reopening existing authorization.
This skill is language-neutral. For Java tasks, preserve the evidenced compiler/runtime,
framework and compatibility constraints; requirements analysis does not authorize upgrades.
Workflow
- Separate the four things. A request usually mixes them:
- Requirement — what must become true, in the domain's terms.
- Implementation — a solution someone already picked. Often reasonable; still not the
requirement; determine whether it is a binding constraint or an optional proposal.
- Assumption — something you filled in. Legitimate, provided it is written down.
- Acceptance criterion — how anyone will know it is done.
- Separate the desired outcome from the selected mechanism. "Add a Redis cache" may
target latency, downstream load or a mandated architecture. Use existing evidence to
identify the purpose; do not invent a latency target. Preserve an explicitly fixed
mechanism and explain trade-offs if an alternative is relevant.
- Run the relevant ambiguity checks (
references/ambiguity-checklist.md). Focus on
readings that change behavior, contracts or consequential implementation choices.
- Sort unresolved gaps: ask only when the answer materially changes scope, correctness,
cost or authority and cannot be inferred safely. Use stated, reversible assumptions for
routine choices. Pending answers block only dependent work; continue independent
authorized work.
- Write acceptance criteria at the behaviour level, one per rule, each derivable into a
test (
references/acceptance-criteria.md).
- Record material scope boundaries without inventing exclusions to requested work. Scope is defined as much by the exclusions as by
the inclusions, and unstated exclusions are where "but obviously it should also…" lives.
Rules
- Never invent a requirement silently. If you filled a gap, the assumption goes in the ticket,
the pull request description or the commit message — somewhere the person who knows can
contradict it. An assumption that lives only in the code is indistinguishable from a defect.
- Different code alone does not require a question: routine implementation choices may
already be delegated. Assess consequence, reversibility, available evidence and authority.
Conversely, identical code can implement materially different contractual promises.
- Adjectives are not requirements. Fast, scalable, secure, robust, user-friendly and real-time
each need a number, a scenario, or a named standard before they can be built or verified.
- Surface actual contradictions after checking scope and existing decisions. Auditing and
erasure can coexist depending on retained fields and policy; do not invent a conflict or
a legal exception. Apply an already authorized resolution; ask the appropriate owner only
when the incompatible obligation remains unresolved.
- The failure behaviour is part of the requirement. What happens when the dependency is down,
the input is malformed, the operation is retried, or two users act at once — an unstated
answer here becomes an incident, not a feature request.
- Quantitative requirements need workload, population, measurement boundary and window.
Qualitative requirements need an observable rule or review method; avoid inventing numbers
merely to replace adjectives. See the acceptance reference for conditional examples.
- Prefer observable outcomes. Record implementation constraints separately when explicitly
required by a user, contract or project policy; a mandated mechanism is also checkable.
- Apply the existing definition of done and checks proportionate to the changed risks.
Do not turn an example checklist into new mandatory approvals, migrations or telemetry.
- Report criteria as met, unmet or unverified with supporting evidence. A passing test proves
only the cases and environment exercised; missing measurements are unknown, not success.
Output
For a small task, provide a short restatement with material assumptions, observable criteria,
and unresolved questions only if needed. Trace consequential criteria to the request or
existing contract; label proposed targets as proposals. At completion, map criteria to
actual validation and disclose what remains unverified.
References
- The ambiguity checklist —
references/ambiguity-checklist.md. Categories of unstated
requirement — quantity, boundary, concurrency, failure, authority, lifecycle, scope — each
with the question that exposes it, plus a worked example identifying eight inspection
questions and three candidate defaults. Read before implementing anything whose
edges are unstated.
- Writing acceptance criteria —
references/acceptance-criteria.md. Criteria at the right
level of abstraction, the Given/When/Then form and where it misleads, deriving tests from
criteria, non-functional scenarios, and a definition of done that is a checklist rather than
a sentiment. Read when writing or reviewing criteria.
1---2name: requirements-and-acceptance3description: Turning a request into something buildable and checkable before writing code: separating the requirement from the implementation someone already chose, finding the ambiguities that change the work, naming assumptions where they can be contradicted, writing acceptance criteria that a test can be derived from, and surfacing contradictions instead of resolving them silently. Use before implementing a ticket whose edge cases are unstated, when a request names a solution rather than a need, when "fast", "secure" or "reliable" appears without a number, when two requirements cannot both hold, when a change is rejected in review for doing the wrong thing, or when deciding whether to ask or to proceed on a stated assumption. Does not cover how long it will take (estimation-under-uncertainty), how to deliver the message (engineering-communication), the test level (java-testing-strategy), or the order of work (clean-delivery-workflow).4---56# Requirements and Acceptance78## Purpose910Prevent rework caused by implementing an unexamined interpretation of a request. Make the11important interpretation visible while changes are still cheap.1213The cheap moment to find that gap is before the first line. This skill is the set of questions14that finds it, and the artefacts — assumptions and acceptance criteria — that make the answer15durable enough that the next person can check it.1617## Context and scope1819Read the request, prior user decisions, applicable project instructions, existing contracts20and relevant code/tests before asking. An explicit implementation choice may be a real21constraint; separate its purpose without discarding it or reopening existing authorization.22This skill is language-neutral. For Java tasks, preserve the evidenced compiler/runtime,23framework and compatibility constraints; requirements analysis does not authorize upgrades.2425## Workflow26271. **Separate the four things.** A request usually mixes them:28 - **Requirement** — what must become true, in the domain's terms.29 - **Implementation** — a solution someone already picked. Often reasonable; still not the30 requirement; determine whether it is a binding constraint or an optional proposal.31 - **Assumption** — something you filled in. Legitimate, provided it is written down.32 - **Acceptance criterion** — how anyone will know it is done.332. **Separate the desired outcome from the selected mechanism.** "Add a Redis cache" may34 target latency, downstream load or a mandated architecture. Use existing evidence to35 identify the purpose; do not invent a latency target. Preserve an explicitly fixed36 mechanism and explain trade-offs if an alternative is relevant.373. **Run the relevant ambiguity checks** (`references/ambiguity-checklist.md`). Focus on38 readings that change behavior, contracts or consequential implementation choices.394. **Sort unresolved gaps**: ask only when the answer materially changes scope, correctness,40 cost or authority and cannot be inferred safely. Use stated, reversible assumptions for41 routine choices. Pending answers block only dependent work; continue independent42 authorized work.435. **Write acceptance criteria** at the behaviour level, one per rule, each derivable into a44 test (`references/acceptance-criteria.md`).456. **Record material scope boundaries** without inventing exclusions to requested work. Scope is defined as much by the exclusions as by46 the inclusions, and unstated exclusions are where "but obviously it should also…" lives.4748## Rules4950- Never invent a requirement silently. If you filled a gap, the assumption goes in the ticket,51 the pull request description or the commit message — somewhere the person who knows can52 contradict it. An assumption that lives only in the code is indistinguishable from a defect.53- Different code alone does not require a question: routine implementation choices may54 already be delegated. Assess consequence, reversibility, available evidence and authority.55 Conversely, identical code can implement materially different contractual promises.56- Adjectives are not requirements. Fast, scalable, secure, robust, user-friendly and real-time57 each need a number, a scenario, or a named standard before they can be built or verified.58- Surface actual contradictions after checking scope and existing decisions. Auditing and59 erasure can coexist depending on retained fields and policy; do not invent a conflict or60 a legal exception. Apply an already authorized resolution; ask the appropriate owner only61 when the incompatible obligation remains unresolved.62- The failure behaviour is part of the requirement. What happens when the dependency is down,63 the input is malformed, the operation is retried, or two users act at once — an unstated64 answer here becomes an incident, not a feature request.65- Quantitative requirements need workload, population, measurement boundary and window.66 Qualitative requirements need an observable rule or review method; avoid inventing numbers67 merely to replace adjectives. See the acceptance reference for conditional examples.68- Prefer observable outcomes. Record implementation constraints separately when explicitly69 required by a user, contract or project policy; a mandated mechanism is also checkable.70- Apply the existing definition of done and checks proportionate to the changed risks.71 Do not turn an example checklist into new mandatory approvals, migrations or telemetry.72- Report criteria as met, unmet or unverified with supporting evidence. A passing test proves73 only the cases and environment exercised; missing measurements are unknown, not success.7475## Output7677For a small task, provide a short restatement with material assumptions, observable criteria,78and unresolved questions only if needed. Trace consequential criteria to the request or79existing contract; label proposed targets as proposals. At completion, map criteria to80actual validation and disclose what remains unverified.8182## References8384- **The ambiguity checklist** — `references/ambiguity-checklist.md`. Categories of unstated85 requirement — quantity, boundary, concurrency, failure, authority, lifecycle, scope — each86 with the question that exposes it, plus a worked example identifying eight inspection87 questions and three candidate defaults. Read before implementing anything whose88 edges are unstated.89- **Writing acceptance criteria** — `references/acceptance-criteria.md`. Criteria at the right90 level of abstraction, the Given/When/Then form and where it misleads, deriving tests from91 criteria, non-functional scenarios, and a definition of done that is a checklist rather than92 a sentiment. Read when writing or reviewing criteria.