From Idea to Requirements
Every software project begins as a vague ambition: "I want to build an app that helps people find study partners." That sentence is a starting point, not a plan. Before a single line of code is written — or a single prompt is sent to an AI — you need to transform that ambition into requirements: specific, verifiable statements describing what the software must do. This gap between idea and requirements is where most student projects fail. The idea sounds compelling; the requirements reveal whether it is actually buildable. Closing that gap is the first skill of a software architect.
What a Requirement Actually Is
A requirement is a written statement that specifies a behavior, constraint, or property the finished system must have. Good requirements share four qualities, often summarized as the SMART criteria adapted for software: Specific: "Users can filter study partners by subject" is specific. "Make it easy to find people" is not. Measurable: The requirement must be testable. "The search returns results in under two seconds" can be measured; "the search should be fast" cannot. Achievable: Requirements must be realistic given the team, time, and tools available. Unambiguous: Every stakeholder reading the requirement must reach the same interpretation. Two categories cover most requirements. Functional requirements describe what the system does — the behaviors and features. "A user can create an account with an email address and password" is functional. Non-functional requirements describe how the system performs — reliability, speed, security, accessibility. "All pages must be usable with a keyboard alone" is non-functional. Example: Suppose the idea is a homework-reminder app. A functional requirement might read: "The app sends a push notification 30 minutes before each saved deadline." A non-functional requirement might read: "Notifications must be delivered within five seconds of the scheduled time in 99% of cases."
Functional requirements define what the system does. Non-functional requirements define how well it does it. Both are mandatory — a system that does the right things slowly or insecurely still fails its users.
The process of discovering requirements is called requirements elicitation. For a solo or small-team project it often means interviewing yourself as the intended user: "What tasks does someone actually open this app to complete? What would make them give up and close it?" Answering those questions precisely generates your first list of functional requirements. A practical technique is user-story mapping. Write each requirement from the user's perspective in the form: "As a [type of user], I want to [do something] so that [I gain some benefit]." For the study-partner app: "As a student studying AP Chemistry, I want to filter potential partners by subject so that I do not waste time messaging people who cannot help me." The "so that" clause forces you to articulate the value behind every feature — and features with no clear value are candidates for removal.
Match each term to its precise definition.
Terms
Definitions
Drag terms onto their definitions, or click a term then click a definition to match.
From User Stories to a Requirements List
User stories are useful for discovery, but a finalized requirements list must be more precise. For each story, extract the underlying condition: what must the system be able to do, in what situation, and how should it behave when something goes wrong? Consider the story "As a user I want to reset my password." Extracting requirements reveals several hidden details: the system must accept an email address, verify it exists, send a time-limited reset link, allow the link to be used only once, and display a clear error if the link has expired. One story can hide five or six distinct requirements. A well-structured requirements document lists each requirement with a unique identifier (R-01, R-02, etc.), a category (functional or non-functional), a one-sentence statement, and an acceptance criterion — the specific condition that proves the requirement has been met. This table structure becomes invaluable later when you decompose the project into tasks, because each task can be traced back to one or more requirements. One final discipline: requirements must describe outcomes, not implementations. "The app uses React" is an implementation decision, not a requirement. "Users can navigate between pages without a full browser refresh" is the requirement; React might be one way to satisfy it.
Requirements answer "what must happen" — not "how it will be built." Mixing implementation into requirements locks you into technical choices before you understand the full problem. Keep the two documents separate.
A student writes: 'The app should be really fast.' What is wrong with this requirement?
A user story reads: 'As a teacher, I want to mark assignments complete so my gradebook stays current.' Which of the following is a requirement CORRECTLY derived from this story?
Idea Dissection
- Step 1: Write down one project idea in a single sentence — it can be anything: a game, a tool, an app.
- Step 2: Write five user stories for five different types of users who might interact with it.
- Step 3: Pick two of those stories and extract at least three concrete requirements from each. Label each requirement F (functional) or NF (non-functional).
- Step 4: Review each requirement against the four qualities: specific, measurable, achievable, unambiguous. Revise any that fail a quality check.
- Step 5: Swap your requirements list with a partner and try to find at least one requirement that is still ambiguous. Discuss how to sharpen it.