Functional vs Non-Functional Requirements
Before you design anything, you need to know what you're building and how well it needs to work. These two questions split neatly into two categories that drive every architectural decision you'll ever make.
Functional Requirements: What It Does
Functional requirements describe the features — the visible behaviors users interact with. They answer: "What can a user do with this system?"
Examples of Functional Requirements
- Users can post a tweet (max 280 characters)
- Users can upload and view photos
- The system sends a notification when someone likes your post
- Users can search for products by name or category
Non-Functional Requirements: How Well It Does It
Non-functional requirements (NFRs) describe the quality attributes — the invisible properties that determine whether the system actually works in production. They answer: "Under what conditions must it perform? What happens when things go wrong?"
The Iceberg Metaphor
Users see functional requirements. Engineers wrestle with the massive non-functional iceberg beneath:
The Key Non-Functional Requirements
| NFR | Definition | Example | Measured As |
|---|---|---|---|
| Performance | How fast the system responds | Page loads in <200ms | Latency (p50, p95, p99) |
| Scalability | Ability to handle growth | Support 10M → 100M users | QPS, concurrent connections |
| Availability | System is up when needed | 99.99% uptime (52 min downtime/year) | Nines (99.9%, 99.99%) |
| Durability | Data isn't lost | No uploaded photo is ever lost | 99.999999999% (11 nines) |
| Consistency | All users see the same data | After transfer, balance updates everywhere | Strong/eventual/causal |
| Security | Protected from threats | Data encrypted at rest and in transit | Compliance, pen test results |
Real-World Example: Twitter
Functional requirements (what users see):
- Post a tweet (280 chars, optional media)
- Follow other users
- See a timeline of tweets from followed users
- Like and retweet
Non-functional requirements (the real engineering challenge):
- Throughput: Handle 300,000+ tweets per second at peak
- Availability: 99.99% uptime — the world notices when Twitter is down
- Latency: Timeline loads in <200ms
- Consistency: A tweet reaches all followers within 5 seconds
- Scale: 400M+ monthly active users, 500M tweets/day
The functional requirements are simple enough for a weekend project. The non-functional requirements are why Twitter employs thousands of engineers.
Identify the Requirements
Scenario: You're designing a ride-sharing app (like Uber). Which of these are non-functional requirements?