There are 2 types of system requirements:
- Functional requirements (FR).
- Non-functional requirements (NFR).
Functional requirements:
- “What system should do”:
- Business flows (login, retrieve specific entities).
- Business services (login service, data access service, etc.).
- User interfaces.
Non-functional requirements:
- “What the system should deal with”:
- Performance:
- Always talk in numbers: how much time does it take to perform a single task of an application (<100 ms or <1 sec).
- Latency and throughput: how many tasks can be performed in a single time unit?
- Load: quantity of work without crashing (how many concurrent requests in WebAPI without crashing).
- Data Volume: how much data the system will accumulate over the time, this statement should bring to which type of DB should be used, which queries to utilize.
- Concurrent users: how much users will be using the system simultaneously.
- SLA (service level agreement): required up-time for the system.
- and many more!
- Performance:
The non-functional requirements should be planned for the extreme cases as well.
The non-functional requirements should be framing boundaries.
Never begin working on a system without NFR in place.
