Functional vs. Non-functional Requirements
Functional requirements describe what the system must do: register users, publish a post, upload a file, or process a payment. Non-functional requirements (NFRs) describe qualities and constraints: latency, availability, durability, security, cost, maintainability, and compliance.
Turn vague goals into measurable statements. “Fast” could mean p95 read latency below 200 ms for a specified workload. “Highly available” could mean 99.95% monthly availability for a defined API. Numbers must be negotiated with stakeholders; they are not universal defaults.
Separate must-haves from preferences. A payment platform may prioritize correctness and auditability over accepting every request during a partition. A social feed may prefer serving slightly stale content over failing completely. These choices influence architecture long before code is written.
- Functional example:
A user can create and retrieve a shortened URL. - Quality example:
95% of redirects complete within 100 ms in the target region. - Constraint example:
Personal data must be encrypted and retained for a defined period.
- Write observable requirements.
- Attach a workload, percentile, region, and time window to performance targets.
- Different product features may require different consistency and availability choices.
Which is a non-functional requirement?