Search⌘ K

Functional vs. Non-Functional Requirements in System Design

Learn functional and non-functional requirements to build robust and scalable systems.

A technically brilliant system that fails to meet user expectations or collapses under real-world load is ultimately a failure.

The root of such problems often isn’t flawed code but a fundamental misunderstanding of the system’s purpose and constraints. Success in any System Design interview or real-world project relies on first gathering and understanding the core requirements.

This is where a clear distinction between what a system does and how well it does becomes critical for building scalable, distributed systems.

This initial step of gathering requirements is the blueprint for all subsequent architectural decisions. Let’s begin by breaking down requirements into two primary categories that will guide our entire design process: functional and non-functional requirements.

Some functional and non-functional requirements of a system
Some functional and non-functional requirements of a system

The diagram above illustrates the conceptual separation. Let’s expand on both types of requirements in the following sections.

Functional requirements of a system

Functional requirements (FRs) define a system’s specific behaviors or capabilities. They represent what the system must do. You can think of them as the system’s verbs—actions users can take or tasks the system must perform.

For example, in a photo-sharing app, a functional requirement might be: A user must be able to upload a photo. This requirement is clear, testable, and describes a core feature.

Identifying Functional Requirements in Interviews

In a system design interview, defining functional requirements is often a direct process. The interviewer plays the role of the stakeholder, and it’s your responsibility to ask clarifying questions to establish the project’s scope. Avoid making assumptions about features or boundaries—confirm everything explicitly.

For instance, if you’re asked to design a messaging app, you might ask:

  • What are the core features—just sending and receiving messages?

  • Should we support group chats, or only one-on-one conversations?

  • Is displaying a user’s online status within scope?

In this context, proactive dialogue replaces formal techniques ...