Functional vs Nonfunctional Requirements
Functional requirements define the inputs, outputs, and transformations a system must perform. Nonfunctional requirements constrain how it performs them โ the observable quality properties that determine whether a system is production-worthy. DDIA structures these around four axes: performance (speed and throughput), reliability (correctness under adversity), scalability (graceful behaviour under increased load), and maintainability (the cost of evolving and operating the system over time).
Performance
How fast is it? How much work can it handle at once?
Reliability
Does it keep working when things go wrong โ hardware failures, software bugs, human mistakes?
Scalability
Can we handle 10ร more users without rebuilding the whole system?
Maintainability
Can the team fix bugs, add features, and hand off knowledge without heroics?