Functional vs Non-Functional Requirements in System Design

Describe what the service does and how well it must do it

A capability needs a useful operating promise

Capability

Reserve a slotSigned-in customer receives a booking identifier

Quality and correctness

Evaluate the promiseNo double bookings; defined latency and recovery goals

Constraints

Respect the limitsBudget, hosting and operating effort
The service must create a booking. The brief also states correctness, latency, load and failure expectations so the capability can be evaluated.

“Build a booking service” is not yet a clear design brief. Can customers cancel? May two people book the same slot? How quickly must a successful booking respond during a busy period? What happens after a failure?

Functional requirements describe capabilities and behaviour. Non-functional requirements commonly describe quality targets and constraints such as latency, availability, security and operating cost. Some requirements cross that boundary. The useful goal is clear, testable expectations, not perfect categorisation.

What you’ll learn

  • Separate capabilities from quality targets and constraints.
  • Rewrite vague requests into measurable, bounded expectations.
  • Identify conflicting goals and clarify them before choosing components.

Write behaviour the user can recognise

A functional requirement might say: “A signed-in customer can reserve an available slot and receive a booking identifier.” Add relevant alternatives: unavailable slot, invalid input, duplicate request and cancellation.

A rule such as “a slot belongs to at most one active booking” describes correctness. It is essential behaviour regardless of which requirement category a team uses for it. State it explicitly and choose an implementation that enforces it under concurrent requests.

Define who can perform the action and what is outside the first release. For example, staff may manage availability while customers may cancel only their own bookings. Scope limits prevent a simple project from quietly accumulating unsupported promises.

Give quality targets a boundary and a workload

“Fast” needs a time boundary, workload and measurement rule. A teaching target could be: “For valid booking requests at 100 RPS, 95% of successful responses finish within 500 ms as measured from the API client, during a 30-minute representative test.” Specify how failed requests are counted too; excluding them can hide an unacceptable failure rate.

“Reliable” also needs meaning. Is the priority successful requests, no lost confirmed bookings or recovery within a deadline? Availability, durability and recovery are related but different promises.

Targets should come from user needs and business constraints. A number chosen for this exercise is not a universal production standard. Understand latency and throughput before interpreting a performance target.

Improve the brief before selecting a tool

Build a small decision record

The product owner asks for a fast booking response.
The team asks for reliable bookings.

Compare the visible consequences. With JavaScript enabled, choose an option in each scenario to assemble your decision record.

This is an exploratory design exercise. It does not run infrastructure, measure capacity or replace the lesson’s quiz.

All choices and their consequences are visible. Select one choice in each scenario to assemble a design note; revise it as assumptions change.

For each vague statement, select a version to include in a planning brief. The visible consequences explain what can be evaluated and what remains ambiguous.

The quantitative target below is illustrative. It needs agreement, a representative test and an error target before becoming a real service commitment.

Include limits the design must respect

A constraint limits the acceptable choices. It might include a monthly operating budget, where data may be stored, an existing platform or the amount of maintenance the team can support. State the source of a constraint and ask which ones are negotiable.

A two-person team may not be able to operate the same arrangement as a large platform team. A design that meets a benchmark but cannot be maintained does not meet the full brief.

Do not hide a constraint inside an unexplained product choice. “Use this database because we already operate it and have limited migration time” gives the team something it can assess and revisit.

Resolve conflicting expectations explicitly

A confirmation that waits for another region may improve some durability guarantees while adding latency and dependency requirements. Very short response deadlines, unlimited workload and a tiny budget may not all be achievable together.

Ask which goal matters most, what workload is in scope and what the user should see when the system cannot meet a target. Compare alternatives with measurements rather than promising every quality at its maximum.

Google’s service-level objectives guidance distinguishes measured indicators from targets. An objective is not automatically a contractual agreement. Official source checked 6 October 2026.

Turn the brief into acceptance checks: concurrent booking attempts, lost responses, dependency outages, realistic peak traffic and recovery. Each check should connect to a stated promise.

Check your design reasoning

Which statement is most useful for evaluating performance?
Choose one answer. You can try again.

Answer and explanation

A defined latency percentile and boundary under a stated workload and interval, with error handling defined.

The target can be tested and interpreted in context.

Check your design reasoning

A no-double-booking rule does not fit neatly into your team’s requirement categories. What should you do?
Choose one answer. You can try again.

Answer and explanation

Keep the rule explicit and verify it under concurrent requests.

Correctness matters more than forcing every requirement into a tidy category.

Turn requirements into pattern choices

Compare interchangeable algorithms when behaviour varies, resource isolation when one workload must not exhaust another, and accepted background operations when synchronous waiting cannot meet the requirement.

A clear brief makes a design review possible

State capabilities, correctness rules, quality targets and constraints. Define workload, measurement boundaries and failure scope so people can judge whether the design meets the promise.

Clarify ambiguous or conflicting goals before choosing tools. Use acceptance checks to connect the implementation back to the agreed requirements.

Reaching the recap and completing the quizzes are separate milestones.

    Next lesson: Capacity Estimation in System Design →