Functional vs Non-Functional Requirements

📘 Chapter 1: Thinking in Systems ⏱️ 8 min read 📐 Lesson 2 of 4

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:

waterline Functional Features users see ~10% of decisions Non-Functional Performance Scalability Availability Durability Consistency Security ~90% of architectural decisions
Fig 1. The requirements iceberg — what users see vs. what engineers build for.

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?