Non-functional requirements (NFR) are non-functional characteristics of an IT system, such as performance, security, fault tolerance, scalability, and maintainability. They play a key role in architecture design, often defining technical solutions and infrastructure no less than functional requirements.
For example: if a business system requires high availability (uptime > 99.99%), the architect must implement mechanisms for automatic failover, data replication, and load balancing. Otherwise, business value may be lost.
Example: How NFR influences architecture (in Python, FastAPI):
from fastapi import FastAPI from starlette.middleware.cors import CORSMiddleware app = FastAPI() app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # This approach is necessary if there is a requirement for NFR regarding integration support with external fronts
Key features:
Can NFR be added at later stages of development without consequences?
No, critical NFR must be considered from the very beginning, otherwise a radical redesign of the architecture will be required.
Is the responsibility for meeting NFR solely on the architect?
Incorrect. It is the responsibility of the entire project team — from analysts to DevOps.
Can scalability and security be considered solely infrastructure tasks?
No. Scalability and security are both architectural and infrastructural tasks (for example, data segregation by users is implemented at the service level).