Functional Specification
Translates stakeholder needs and technical constraints into precise, testable functional
specifications that serve as the contract between engineering intent and delivered behavior.
Guiding Principle
"Ambiguity in specifications is a deferred decision that will be made by the wrong person at the worst time."
Procedure
Step 1 — Requirements Elicitation
- Gather inputs from stakeholder interviews, existing documentation, and codebase analysis.
- Classify requirements as functional, non-functional, or constraint.
- Identify implicit assumptions and make them explicit.
- Map each requirement to a business objective or user need.
Step 2 — Use Case Modeling
- Define actors (primary, secondary, system) and their goals.
- Write use cases with preconditions, main flow, alternative flows, and postconditions.
- Identify shared steps and extract them as included use cases.
- Cross-reference use cases with business rules that govern behavior.
Step 3 — Complexity and Risk Assessment
- Score each use case on implementation complexity (Low/Medium/High/Critical).
- Assess risk based on uncertainty, external dependencies, and regulatory exposure.
- Build a complexity/risk matrix to prioritize specification depth.
- Flag high-risk items that require proof-of-concept validation.
Step 4 — Specification Synthesis
- Write formal specifications with acceptance criteria in Given/When/Then format.
- Include boundary conditions, error scenarios, and edge cases.
- Produce a traceability matrix linking requirements to use cases to acceptance criteria.
- Review for completeness, consistency, and testability.
Quality Criteria
- Every requirement has at least one use case and one acceptance criterion.
- Business rules are explicit, numbered, and referenced by use cases.
- Complexity/risk matrix covers all use cases with justified scores.
- Specifications are testable without requiring interpretation.
Anti-Patterns
- Writing specifications after implementation as retroactive documentation.
- Conflating solution design with functional requirements.
- Ignoring non-functional requirements or treating them as optional.
- Producing specifications that only cover the happy path.