Requirements and quantified non-functional requirements
An NFR you cannot fail is not a requirement yet: give it a metric, a percentile, a load and a window.
Predict first
Before you read: predict
The proctor console's product owner asks that new alerts "show up fast" for proctors.
Which rewrite should the team adopt as the requirement?
The 30-second version
A functional requirement is something the system lets a user do. A non-functional requirement says how well, and it becomes a requirement only when it names a metric, a percentile (never the average), the load and the window. Then a test can fail it. Availability turns into allowed downtime: (1 − target) × window.
An NFR you cannot fail is not a requirement yet: give it a metric, a percentile, a load and a window.
How it works
Step 1 of 10
In the kitchen
- empty the bins, restock the washrooms → functional requirements (step 1)
Analogy: An office-cleaning contract
A landlord hires cleaners for a twelve-floor office. "Clean the offices, empty the bins, restock the washrooms" is the work. "Keep it spotless" is a wish. The contract instead says: 95 of every 100 spot checks pass, on all 12 floors, before 08:00 each weekday.
| In the cleaning contract | In requirements |
|---|---|
| empty the bins, restock the washrooms | functional requirements (step 1) |
| "keep it spotless" | an adjective, not an NFR (step 3) |
| 95 of 100 spot checks pass | metric and percentile (steps 3–4) |
| all 12 floors, before 08:00 each weekday | load and window (steps 3, 5) |
| an inspector checking one floor on a Sunday | a test at the wrong load and window (step 6) |
| a cleaner on call for 99.5% of opening hours | availability, turned into minutes without cover (step 7) |
| separate headings: hygiene, supplies, key security, spills | quality characteristics (step 8) |
| two cleaners off sick: window polishing waits, washrooms do not | which target gives way first (step 10) |
In real terms: a requirement is only as good as the check that can fail it; the four parts make that check possible.
Breaks down when: a landlord's inspector sees every floor. A service's users see only their own requests, and one bad request in twenty never shows up on a dashboard average. Wrong inference: "if the average spot check passes, every tenant is happy." The tail is the percentile's job (step 4).
Contrasting case: a contract that only lists the tasks, with no spot checks. Everything is functional; nothing can be failed on quality.
Examples, run for real
4.1 ExamHall: status tiles that passed their check
EXH-1670: at 09:00 on ECON-201 day, proctors' candidate status tiles ran seconds behind. The release check had passed. The requirement said "under 2 s on average", and it was checked in a rehearsal with 240 candidates. MR !1870 rewrote it with all four parts. The samples below are synthetic, from a seeded generator.
rehearsal n=240 mean 0.9 s · p95 (rank 228) 1.4 s · max 1.5 s
old "under 2 s on average": PASS
new "p95 <= 2 s at 2,400, 09:00-09:10": NOT A TEST (load differs)
09:00 exam day n=2400 mean 1.5 s · p95 (rank 2280) 6.5 s · max 9.0 s
old "under 2 s on average": PASS
new "p95 <= 2 s at 2,400, 09:00-09:10": FAIL
The old wording passed twice: the average hid the tail (step 4), and the rehearsal ran at a tenth of the load (step 5). The new wording refuses the rehearsal as evidence and fails the real morning (step 6).
4.2 Proof domain, e-commerce catalog: nines as minutes
The catalog runs its search API at 99.5% and checkout at 99.99%. Allowed downtime is (1 − target) × window:
search API 99.50% day: 7.2 minutes · 30-day month: 3.6 hours · 365-day year: 43.8 hours
checkout 99.99% day: 8.6 seconds · 30-day month: 4.3 minutes · 365-day year: 52.6 minutes
99.99% over a 365-day year = 52.56 minutes; SRE book says 52.56: true
Each extra nine divides the allowance by ten, and the window decides the number (step 7). A target with no window has no allowance to check against. The last line reproduces the SRE book's figure.
Try it
Answer first, then check. Nothing is saved.
Question 1 of 6
The catalog's search requirement is "p95 latency ≤ 400 ms at 150 queries/s, 18:00–20:00", with the p95 taken by nearest-rank: sort the n values and take the one at rank ⌈0.95 × n⌉. A load test at 150 queries/s from 18:00 to 20:00 sampled 20 searches, in ms: 240, 110, 380, 150, 1200, 170, 200, 135, 300, 190, 260, 430, 120, 220, 330, 160, 280, 140, 210, 180.
What is the verdict?
Question 2 of 6
The catalog's flash-sale service must be "99.95% available, measured per 4-hour sale window".
How much downtime, in total, can one sale window have and still meet it (rounded to one decimal)?
Question 3 of 6
At 14:00 the catalog's stock database loses a disk and the shop takes no orders for 20 minutes. The team adds a requirement for next time: within 30 minutes of such a failure, checkout accepts orders and every stock count equals the last confirmed order.
Which ISO/IEC 25010 sub-characteristic does this requirement belong under?
Question 4 of 6
For the sale weekend the catalog team can meet only three of its four product-page targets with the servers it has. On the product page a shopper picks a size, sees whether that size is in stock and adds it to the basket. The page also carries a strip of the products the shopper opened earlier.
Which target should the team relax?
Question 5 of 6
The catalog's product-detail API promises 99.9% availability. On 14 September it had one outage of 30 minutes, and none on any other day. Finance reads the target per 30-day month; the on-call team reads it per calendar day.
Which verdicts do the two readings give?
Question 6 of 6
The catalog team's requirements for faceted search file four lines under "non-functional". One of them belongs under "functional".
Which of the four lines is it?
Go deeper
Pro tips
- Write the release gate from the requirement's own four parts. Make the load-test script refuse a run whose load or window differ from the requirement, and apply the percentile method the requirement names. When: the first time an NFR gates a release (steps 5–6). Verify:
NOT A TEST: ran at 30/s, Sunday 03:00-05:00; requirement is 120/s, weekdays 12:00-14:00 PASS: p99 (nearest-rank, rank 198 of 200) = 227 ms vs 250 ms FAIL: p99 (nearest-rank, rank 198 of 200) = 900 ms vs 250 ms - Keep the list short. In a design round, name the three to five qualities that shape this system and quantify those, rather than reciting every characteristic. When: the requirements minutes of an interview. Status: DOC (Hello Interview, Delivery framework: "You'll want to identify the top 3-5 that are most relevant to your system."); not run.
Source
- Functional requirements as "Users/Clients should be able to..." statements; non-functional requirements as "statements about the system qualities"; "where possible, are quantified"; the durability contrast (a social network vs a banking system); "top 3-5". Supports steps 1–3 and 10. Valid as of 2026-09-29.
- ISO/IEC 25010:2023 product quality model, as rendered by the ISO 25000 portal: https://iso25000.com/index.php/en/iso-25000-standards/iso-25010 and
?start=5· fetched 2026-09-29, saved asiso25010-portal-p1.txtandiso25010-portal-p2.txt. Nine characteristics; Reliability's sub-characteristics Faultlessness, Availability, Fault tolerance, Recoverability; Security's Integrity; Performance efficiency's Time behaviour; Maintainability. Supports steps 2, 8 and 9. The standard itself is paywalled and was not read. Valid as of 2026-09-29. - Google, Site Reliability Engineering, ch. 3 "Embracing Risk": https://sre.google/sre-book/embracing-risk/ · fetched 2026-09-29, saved as
sre-embracing-risk.txt. Time-based availability over a period ("99.99% can be down for up to 52.56 minutes in a year"); "100% is probably never the right reliability target"; optional data in a "cheaper, less reliable, less fresh" store; the risk of exposing private data. Supports steps 7 and 10. Valid as of 2026-09-29. - Google, Site Reliability Engineering, ch. 4 "Service Level Objectives": https://sre.google/sre-book/service-level-objectives/ · fetched 2026-09-29, saved as
sre-service-level-objectives.txt. Averages obscure tail latencies; percentiles preferred; variance "exacerbated at high load by queuing effects"; objectives "should specify how they're measured and the conditions under which they're valid". Supports steps 3–5. SLOs and error budgets themselves are not taught here (obs-slo-error-budget-burn). Valid as of 2026-09-29.
Checked against the tools and docs as of 2026-09-29.