Problem
Requirements like "fast" or "highly available" are unverifiable and mean different things to different people. Teams discover too late that the architecture cannot meet the real expectations.
Also known as: quality-attribute-requirements, non-functional-requirements
Express non-functional requirements as measurable, testable targets so architecture can be designed and verified against them.
Requirements like "fast" or "highly available" are unverifiable and mean different things to different people. Teams discover too late that the architecture cannot meet the real expectations.
An NFR specification replaces adjectives with measurements. Instead of "the system must be scalable", it says what load, at what latency, under which failure conditions, and how that will be measured. The ISO/IEC 25010 quality model is a useful checklist of attributes: performance efficiency, reliability, security, maintainability, and others.
Treat the specification as a living contract between product, engineering, and operations. Agree on it before design starts, and revisit it after each major release using real production measurements, so the targets reflect observed behavior rather than hope.
Write each requirement as a scenario with a source, stimulus, environment, response, and response measure.
ID: NFR-PERF-02
Stimulus: checkout request at 2,000 req/s peak
Env: normal operation, one AZ degraded
Response: order accepted
Measure: p99 latency under 300 ms, error rate under 0.1%
Priority: high
Verified: load test per release, SLO dashboard in production
Rank the scenarios. The top few drive architecture; the rest are guidelines. Convert the ones that matter operationally into SLIs and SLOs with error budgets.
Low: workshop time and documentation
Medium: keep targets measured and current
Medium: scenario writing is a skill
Targets copied from another system without evidence
Requirements never measured, so they silently drift
All attributes marked top priority, so none guide tradeoffs