Napkin Math 1: Fermi Estimation
Napkin math - also known as back-of-the-envelope calculation - is a powerful technique for quickly estimating answers to complex problems using simplifying assumptions and rules of thumb. This approach is particularly valuable in systems design, where quick approximations often need to be made about performance, capacity, and resource requirements. In programming specifically, these calculations help establish upper and lower bounds, typically aiming to be within an order of magnitude of the actual answer.
Examples of Non-functional Requirements
The common refrain when determining functional and nonfunctional requirements is that “functional requirements describe what the application does, and nonfunctional requirements describe how it does it.”
Here are some examples of nonfunctional requirements:
- Performance
- Latency of various actions (page loads, content loading, server processing)
- Availability
- Uptime requirements (which may vary from system to system)
- Scalability
- Number of users
- Expected growth in users in 3 months, 6 months, a year, etc.
- Throughput
- Read vs Write heaviness (how many users read a post for each time it is written? 10:1? 50:1?)
- Observability
- How easy it is to tell what is going on (or going wrong) with your application
- Reliability
- Technology Stack
- Security requirements
- Authentication
- Authorization
- Maintainability
- Compliance
- GDPR, COPPA, HIPAA, etc.