Recommended resources
The freely available resources this lesson will direct you to.
Hello! This course begins with architectural thinking: before deciding how to structure an application, you need a precise account of what it must achieve. In this lesson, you’ll take an ambiguous product brief and turn it into functional requirements—observable behaviors—and measurable quality attributes—conditions describing how well the feature must work.
We’ll use a small reservation feature throughout. The aim is not to design its Laravel API or React interface yet. It is to produce requirements clear enough that product, engineering, and testing can agree on what success means.
Begin with the outcome, not the implementation
Imagine receiving this brief:
“Members should be able to see remaining places and reserve a spot in a workshop through the web app. Confirm their reservation quickly. Opening day may be busy, so don’t overbook. Members must not see one another’s reservations.”
It contains useful intent, but it leaves decisions open. What counts as “quickly”? Does “busy” mean twenty simultaneous members or thousands? Can one member reserve multiple spots? What happens when the final spot is requested by two people at nearly the same time?
A senior engineer does not quietly fill every gap with a preferred implementation. First, separate the desired outcomes from possible solutions. “A member can obtain a confirmed spot” describes an outcome. “Use a database lock” proposes a solution. The latter might prove appropriate, but it is not yet a product requirement.
Requirement Specification vs User Stories
Watch “Requirement Specification vs User Stories” from Modern Software Engineering for its distinction between user needs and implementation instructions.
Watch requirements versus blueprints for the problem with specifying the internal solution too early. Then watch ambiguous needs and what versus how. Focus on why clarifying a brief is part of engineering work, rather than evidence that the brief has failed.
A useful initial statement of the reservation goal is: As a member, I want to reserve an available workshop spot so that I know I can attend. That preserves the actor, goal, and value. It is not sufficient on its own to settle edge cases or tell you whether the delivered feature is complete.
Keep unresolved questions visible. In this example, “one reservation per member per workshop” is a plausible rule, but it is not in the brief. Treat it as a question for the product owner, not as a requirement you have already been given.
Write behaviors that can be accepted or rejected
A functional requirement says what the system must do under stated conditions. An acceptance criterion gives a concrete way to determine whether a requirement has been met. The distinction is useful: a requirement can describe a capability, while several criteria cover its normal and exceptional behavior.
Acceptance Criteria Explained [+ Examples & Tips]
Read Atlassian’s “Acceptance Criteria Explained” to see how a user goal becomes testable, outcome-focused conditions.
In “What is acceptance criteria?”, read the definition. In “Acceptance criteria vs. user story”, read the distinction. Continue through the quality checks in “Characteristics of good acceptance criteria”. Finally, in “Examples of acceptance criteria”, read “Example 1: Product search” from the search criteria. Notice how it specifies both results and the no-results case.
For the workshop brief, an initial set might look like this:
| ID | Functional requirement | Example acceptance condition |
|---|---|---|
| FR1 | A signed-in member can see the remaining places for a workshop. | Given a workshop with three unreserved places, when a member views its availability, the system shows three places remaining. |
| FR2 | A signed-in member can reserve one available place and receive confirmation of that reservation. | Given one available place, when an eligible member successfully reserves it, the system records one reservation and shows that member a confirmation. |
| FR3 | A request made after capacity is exhausted does not create a reservation. | Given no available places, when a member requests one, the system explains that no place is available and records no reservation. |
| FR4 | A member cannot view another member’s reservation details. | Given a reservation belonging to member A, when member B requests its details, the system discloses none of them. |
These conditions cover more than the happy path without prescribing a controller, database schema, or UI component. The particular wording still needs stakeholder review: for example, FR2 says “eligible,” but eligibility rules have not been supplied. That term must be defined or removed before implementation.
The phrase “don’t overbook” also calls for a sharper acceptance condition. Given one remaining place and two members requesting it concurrently, no more than one request receives a confirmed reservation. Both members need an intelligible outcome; the unsuccessful one must not be shown a confirmation. This is a business rule expressed as observable behavior. Whether the implementation uses a transaction, constraint, or another mechanism is a later decision.
User Stories and Acceptance Criteria EXAMPLE (Agile Story Tutorial)
Watch “User Stories and Acceptance Criteria EXAMPLE (Agile Story Tutorial)” from The Business Analysis Doctor for two ways to express completion conditions.
Watch types of criteria to distinguish functional conditions from quality and performance conditions. Then watch scenario criteria for the Given–When–Then form. Use that form when initial state and an exceptional outcome matter, as they do for the final workshop place.
Make quality attributes measurable in a stated context
Functional requirements alone do not settle “confirm quickly” or “opening day may be busy.” Those phrases concern quality attributes: properties such as responsiveness, availability, security, and reliability. A number by itself is not enough. “Respond within two seconds” leaves unanswered which response, under what load, and measured where?
The Systems Engineering Body of Knowledge gives a broader requirements perspective: needs are transformed into obligations that can be verified, with a rationale for important thresholds.
System Requirements Definition - SEBoK
Read “System Requirements Definition” from SEBoK to connect stakeholder language to verifiable requirements, including quality requirements.
Under “Process for Generating System Requirements” and “Transforming Needs to System Requirements”, read the transformation. Then, under “Categorizing Requirements”, use Table 1 to compare function/performance with quality. Under “Table 2. Example Requirement Statements”, read the first three examples; notice that each requirement has a rationale, not just a number.
One way to prevent vague quality statements is to describe a quality scenario: identify the source of an event, the event itself, the part of the system affected, its operating environment, the required response, and the response measure. The diagram below shows those elements using fault handling as an example; the same questions help structure a performance scenario.

For our feature, consider the external source to be members submitting reservations. The stimulus is a burst of simultaneous submissions; the artifact is the reservation journey from submission to visible result; the environment is an enrollment opening while places remain. The desired response is a confirmed reservation displayed to a successful member. The measure must state a threshold and how to observe it.
The following targets are illustrative proposals, not facts supplied by the brief:
| ID | Proposed quality requirement | How to verify it |
|---|---|---|
| QA1: responsiveness | With 100 members submitting simultaneously while capacity remains, at least 95% of successful reservations display confirmation within 2 seconds of submission. | Run a representative workload in a production-like environment. Measure from submission to visible confirmation, and report the proportion meeting the threshold. |
| QA2: availability | Over a calendar month, at least 99.9% of one-minute external checks can complete a valid reservation against a designated workshop with available capacity. Planned downtime counts against the target. | Monitor the complete reservation journey, keep the test workshop supplied with capacity, and classify probe failures separately from valid “sold out” rejections. |
QA1 makes “quickly” meaningful only after the team agrees that its load and two-second threshold represent the user need. QA2 addresses the risk that a feature works in tests but is unavailable when needed. Its end-to-end check is deliberately broader than “the server responds”: it asks whether a valid reservation can actually be completed. Neither target should be promised without discussing cost, measurement feasibility, and the consequences of missing it.
Notice the overlap between kinds of requirement. “Never confirm more places than capacity permits” is a functional business rule even though concurrency makes it difficult to achieve. “Member B cannot retrieve member A’s details” is a functional access rule serving a security goal. Classifying a statement matters less than making its behavior, operating conditions, and evidence unambiguous.
Keep decisions, assumptions, and evidence connected
A requirement set becomes useful when someone can trace each statement back to a phrase in the brief and forward to a way of checking it. Here, “don’t overbook” supports the one-place/two-request criterion; “confirm quickly” motivates QA1; “must not see one another’s reservations” motivates FR4. If a threshold cannot be traced to a stakeholder need, risk, or agreed assumption, it deserves a conversation before it becomes a commitment.
That conversation should resolve scope rather than smuggle in design. Before estimating this feature, ask whether members may hold more than one place, whether reservations can be cancelled, and what a member should see if the displayed place count changes before submission. Record the answers alongside the requirements. If the application must use Laravel and React, that may be a legitimate project constraint; it is not, by itself, a description of the reservation behavior members need.
A concise handoff for this feature would therefore contain the goal, the agreed functional requirements and acceptance conditions, the agreed quality scenarios and measurements, plus explicitly unresolved questions. It gives the team room to compare implementations without losing sight of what any implementation must accomplish.
Conclusion
A product brief supplies intent, not a finished specification. Translate it into observable behaviors, cover important failure and concurrent cases, and give quality claims a workload, environment, threshold, and verification method. Label proposed rules and numbers as assumptions until stakeholders agree to them.
Next, you’ll use business workflows and invariants—such as the rule against confirming more places than exist—to identify domain boundaries.