Non-Functional Requirements

In early stages of architecting any system, one of the most critical responsibilities is to understand “what” the system is supposed to do. These considerations are captured through functional and non-functional requirements.

Key Non-Functional Requirements

These define system qualities - how it behaves under constraints like load, failures or threats.

RequirementMeaning
SecurityPrevent unauthorized access; ensure data confidentiality and integrity.
AvailabilityEnsure the system is accessible and operational when needed.
ReliabilityEnsure the system consistently performs its intended functions.
ScalabilityAbility to gracefully handle increased load or traffic.
MaintainabilityEase of updating, debugging, and evolving the system over time.
Fault ToleranceThe system’s ability to function even when parts of it fail.
PerformanceIncludes response time, throughput, and system resource usage.

Security Requirement

Security is a foundational NFR, especially for modern, internet-facing systems. Key dimensions include:

  • Access Control - Restrictions on which users or services can access specific resources.
  • Authentication - Verifying the user is who they claim to be (e.g., login with credentials, OTP, OAuth).
  • Authorization - Determining what an authenticated user is allowed to do.
  • Encryption - Protecting data in transit (TLS/HTTPS) and at rest (AES, RSA).
  • Auditing and Logging - Recording system events to trace unauthorized or suspicious activity.

Availability & Reliability

Availability measures the proportion of time the system is accessible. It’s usually expressed as a percentage over a time period (e.g., 99.9% uptime per month).

Reliability focuses on whether the system delivers the correct functionality consistently over time. It’s often expressed using MTBF (Mean Time Between Failures) and MTTR (Mean Time to Recovery)

Techniques to Improve Availability are -

  • Redundancy - Duplicate servers or services that can take over during failure.
  • Failover Systems - Automatic switch to backup components when primary fails.
  • Replication - Maintain multiple consistent copies of data across nodes.

Scalability

Scalability ensures the system can grow in capacity without degrading performance.

Two Types are -

  • Vertical Scaling - Increase resources on a single machine (e.g., more CPU/RAM).
  • Horizontal Scaling - Add more machines to the system.

Maintainability & Fault Tolerance

  • Maintainability - Focuses on how easily the system can be debugged, upgraded, and modified. Code readability, modular design, and proper documentation all contribute.
  • Fault Tolerance - It ensures continuity even if part of the system fails. Techniques include graceful degradation, retries with exponential backoff, and circuit breakers.

Conclusion

Functional requirements are the baseline of “what” the system must do, but the non-functional requirements are where architecture comes alive. They answer the harder question: can it do what it’s supposed to, under pressure, at scale, securely, and reliably?