Functional vs Non-Functional: Core Distinction
What you'll learn: You'll understand the fundamental difference between what a system does versus how well it does it.
The Two Categories of Requirements
When designing any system, requirements fall into two distinct buckets:
Functional requirements describe what the system must do—the actual features and behaviors users interact with. Think of these as the job description of your system.
Non-functional requirements describe how well the system performs its job—the quality attributes that matter but aren't features themselves.
A Restaurant Analogy
Imagine you're designing a restaurant:
- Functional: "Serve customers food," "Take payment," "Provide a menu"—these are the actions the restaurant performs
- Non-functional: "Serve food within 15 minutes," "Handle 100 customers simultaneously," "Stay open 24/7," "Keep food costs under budget"—these describe how well it performs
Both types are essential, but they're fundamentally different conversations.
In System Design Context
For a social media system:
- Functional: Users can post messages, follow other users, like posts, send direct messages
- Non-functional: The system must handle 10 million daily users, load pages in under 2 seconds, store data reliably for 10 years, cost less than $X per month to operate
Notice how functional requirements answer "Can it do this?" while non-functional requirements answer "Can it do this well enough?"
Why This Distinction Matters
In system design interviews and real-world projects, you'll constantly switch between these two lenses. You first clarify what needs to be built (functional), then figure out how well it needs to perform (non-functional). This distinction keeps your design organized and ensures you don't overlook critical quality requirements while chasing features.
Key Takeaway: Functional requirements define what your system does; non-functional requirements define how well it does it—both are equally important for successful system design.