Skip to content

Functional Requirements — Best Practise

  • Run this routine before a request becomes code: the Need-to-Behavior Loop.
  • Aim for shared current understanding, not a perfect specification: “What should this product do for this person in this situation?”

The loop, ready to use

  • 1. Capture the need. Record the request in a ticket and link its evidence: support case, design, product decision, customer quote, metric, or policy.
  • Write: “Customers need self-service cancellation because support receives requests after mistaken orders.”
  • Do not write a design or estimate as if this sentence were already complete.

  • 2. Name the actor and goal. State who acts, what they want to accomplish, and why.

  • Write: “As a customer with a paid, unshipped order, I want to cancel it myself so that I can correct a mistake without waiting for support.”
  • Check: if you cannot say why the actor needs it, go back to the source. GOV.UK notes that the goal helps decide whether a user need has been met (GOV.UK).

  • 3. Walk the workflow. Ask someone close to the work to show the current path, then write the path in simple steps.

  • Start state: the order is paid and in processing.
  • Action: the customer chooses Cancel order, gives a reason, and confirms.
  • Result: the order is cancelled, fulfillment stops, and the customer sees the refund state.
  • Alternate state: an order handed to a carrier has no cancellation action and points to the supported return/contact path.
  • Repeated action: a second request shows the first result and does not create a second refund request.

  • 4. Turn uncertainty into decisions. List every rule you cannot safely infer, its owner, and its deadline.

  • “Can a customer cancel only one item?” — Product owner decides; not in this slice.
  • “What if refund creation fails?” — Payments and support decide the visible status and follow-up route.
  • “When is an order handed to a carrier?” — Fulfillment owner confirms the state transition.

  • 5. Write observable confirmation. Put the result into acceptance criteria before implementation begins.

  • It is done when an eligible customer can cancel their own order.
  • It is done when cancellation records the reason, stops fulfillment, and shows the cancellation/refund state.
  • It is done when an ineligible order directs the customer to the correct next step.
  • It is done when repeat submission leaves one cancellation and one refund request.

  • 6. Confirm, build, and update. Ask the product owner, designer, tester, and affected team to review only the behavior they own. Link tests and pull-request notes to those criteria. If a rule changes, update the ticket and explain why.

A ticket template that stays useful

## Need
Source and evidence:
Actor:
Goal:

## Behavior
Start state:
Action:
Expected result:
Alternate or failure paths:

## Rules and scope
Business rules:
In scope:
Out of scope:
Open questions, owner, and decision date:

## Confirmation
Acceptance criteria:
Links to design, policy, support evidence, and tests:

Keep it short. A backlog item can begin as only a title and gather detail as the team refines it; Microsoft explicitly describes adding details later and refining requirements over time (Microsoft Learn).

Questions that uncover the right behavior

  • Need: What problem happens today? Who reported it? What evidence do we have?
  • Actor: Who performs the action, who else is affected, and who is not allowed to do it?
  • Trigger: What must be true before the action is available?
  • Normal path: What does the actor do, and what do they see or receive afterward?
  • State changes: Which records, permissions, inventory, notifications, or external services must change from the user’s point of view?
  • Alternates: What happens when the action is too late, repeated, invalid, denied, or only partly completed?
  • Rules: Which business or policy rule chooses between those outcomes? Who can confirm it?
  • Boundary: What are we not solving in this slice, and where does that need go next?
  • Proof: What could a tester, product owner, or customer observe to say this is done?

Put the loop into daily work

  • New ticket: spend five minutes capturing source, actor, goal, and one open question before it disappears into the backlog.
  • Refinement: share a short workflow and ask each affected person to correct it. Let product answer value and policy, design answer interaction, QA answer observable cases, and dependent teams answer their state changes.
  • Estimation: refuse false precision. If an unknown rule could change the path, record it and get the answer before committing a date.
  • Implementation: treat a newly discovered rule as a requirement question, not a private code decision. Post the proposed behavior and get confirmation.
  • Pull request: include the story and changed acceptance criteria in the description; reviewers can then check product behavior as well as code quality.
  • Release and support: compare real tickets and behavior against the agreed criteria. Add a new scenario when reality exposes a missing path.

Ready-to-start checklist

  • The ticket links to the request or evidence that created it.
  • The actor, action, and goal are understandable without meeting the author.
  • The normal path has a visible start and end.
  • Alternate paths cover every important state, permission, or external result that changes behavior.
  • Every business rule has a source or a named decision owner.
  • In-scope and out-of-scope work are explicit.
  • Functional outcomes are separate from performance, reliability, security, privacy, and other quality targets.
  • Acceptance criteria describe what a person can observe, not how the code is built.
  • The people who own the decision have confirmed the behavior.
  • Tests, release notes, and support guidance can link back to the same current record.

Signs the habit is working

  • You ask for a workflow or example before proposing code.
  • Product and engineering disagree early in a ticket, then agree before implementation instead of during acceptance testing.
  • A tester can create acceptance tests without guessing what words like “allowed,” “recent,” or “complete” mean.
  • Scope changes appear as explicit decisions, not surprise tasks late in a sprint.
  • Support can explain why a user sees a result because the rule was documented and confirmed.

Sources