Before the questions, make sure you can: list the qualities of a good requirement (necessary, unambiguous, complete, consistent, feasible, verifiable, traceable, singular) and find what is wrong with a bad one; spot weak words and other sources of ambiguity; rewrite requirements with the five EARS templates (ubiquitous, event-driven, state-driven, unwanted behaviour, optional feature); write quality requirements with a metric, a target and a condition; describe the structure of a Software Requirements Specification and explain how agile teams keep requirements in a backlog instead; prioritize with MoSCoW and value/effort; build a traceability matrix and use it for coverage and impact analysis; handle a change request with a baseline and an impact analysis; validate requirements with reviews, prototypes and early acceptance tests; and specify an AI feature with data, accuracy (precision and recall), human-oversight and fallback requirements.
Discovering a need is not enough: it must be written so that everyone understands the same thing, so that it can be built, tested and traced, and so that it can change without chaos. With AI agents that turn a written specification directly into code, this matters more than ever: an ambiguous sentence used to cause a discussion; now it causes a bug — instantly, and at scale.
What makes a requirement good?
The international standard for requirements (ISO/IEC/IEEE 29148) lists characteristics of a good individual requirement:
| Quality | Meaning | Bad example |
|---|---|---|
| Necessary | Someone really needs it; it has a source | "The app shall have 20 colour themes." (nobody asked) |
| Unambiguous | Only one possible interpretation | "Buddy shall answer quickly." |
| Complete | Nothing essential is missing | "Students shall reset their password." (how? by email? code?) |
| Consistent | Does not contradict other requirements | "Posts are anonymous" vs. "Every post shows the author's name." |
| Feasible | Can be built with the time, money and technology available | "Buddy shall never give a wrong answer." |
| Verifiable | A test or inspection can show it is met | "The system shall be user-friendly." |
| Traceable | Its source and its tests can be identified | A requirement with no ID and no origin |
| Singular | States one thing (no "and" hiding two requirements) | "Students can post and search and vote." |
A requirement is not complete because it is long. "Students shall be able to reset their password in a user-friendly, secure and modern way using the latest technology" is long and incomplete: it says nothing about how the identity is checked or what happens with an unknown email.
Ambiguity: the most common defect
Natural language is ambiguous. Watch for:
- Weak words: fast, easy, user-friendly, appropriate, adequate, flexible, efficient, as much as possible, support, etc., and/or, normally, if possible.
- Vague quantities: "many users", "large files", "recent posts".
- Hidden actors (passive voice): "The post shall be deleted." — by whom? the author, a TA, the system after 30 days?
- Pronouns: "When the TA answers the student, he gets a notification." — who is he?
- Undefined terms: "course" (subject or section?), "active user" (logged in today? this semester?). Keep a glossary.
- Mixed modal verbs: many specifications use shall for mandatory requirements, should for desirable ones, may for optional ones. Mixing them randomly makes priority unclear.
Imagine giving the requirement to three different programmers — or three different AI agents — who cannot ask you questions. If they could build three different things that all "meet" the sentence, the sentence is ambiguous.
EARS: five templates that remove most ambiguity
The Easy Approach to Requirements Syntax (EARS) was developed at Rolls-Royce (Alistair Mavin and colleagues, 2009) for jet-engine control software. It uses a few fixed sentence patterns:
| Pattern | Template | StudyBuddy example |
|---|---|---|
| Ubiquitous (always true) | The system shall response. | The StudyBuddy app shall display all times in China Standard Time. |
| Event-driven | When trigger, the system shall response. | When a post receives 3 reports, the system shall hide the post from students. |
| State-driven | While state, the system shall response. | While the AI service is unavailable, the system shall show "Buddy is offline — post your question on the board". |
| Unwanted behaviour | If undesired condition, then the system shall response. | If a login fails 5 times within 10 minutes, then the system shall lock the account for 15 minutes. |
| Optional feature | Where feature is included, the system shall response. | Where anonymous posting is enabled for a course, the system shall show "Anonymous student" to other students. |
Patterns can be combined: "While exam mode is active, when a student asks Buddy about a tagged graded exercise, the system shall give hints only." The fixed structure forces the writer to state the trigger, the state and the response — the three things most often forgotten.
Quality requirements need a metric, a target and a condition
A non-functional requirement becomes verifiable when it states what is measured, the required level, and under which conditions (Tom Gilb's "Planguage" calls these scale, meter and target):
| Weak | Measurable |
|---|---|
| Buddy must be fast. | Metric: time from sending a question to the first word of the answer. Target: ≤ 5 s for 95% of questions. Condition: 300 concurrent users, normal campus network. |
| The system must be reliable. | Metric: availability of the Q&A board. Target: ≥ 99.5% per week. Condition: during exam weeks, excluding announced maintenance. |
| The app must be easy to use. | Metric: share of first-time users who post a question without help. Target: ≥ 90% within 60 s. Condition: 10 first-year students, Android phones, no training. |
Percentiles ("95% of requests") are better than averages for response time: an average of 2 seconds can hide 10% of students waiting 20 seconds.
Where requirements live: SRS documents and backlogs
A Software Requirements Specification (SRS) is a structured document. A typical outline (based on IEEE 830 / ISO 29148):
- Introduction — purpose, scope, definitions (glossary), references.
- Overall description — product perspective, user classes, operating environment, constraints, assumptions and dependencies.
- Specific requirements — functional requirements (often grouped by feature), external interfaces, quality requirements, data requirements.
- Appendices — models, analysis, traceability.
Plan-driven projects (Chapter 2) use an SRS as a contract and a baseline for testing. Agile teams keep most requirements as stories with acceptance criteria in the Product Backlog, plus a small set of stable documents: the glossary, the quality requirements, the constraints, and the policies (for StudyBuddy: privacy, academic integrity). Both approaches need the same qualities — only the container differs.
The acceptance criteria of a story are a specification — a precise, testable one. Agile teams write specifications in smaller pieces, just before they are needed, and turn them into automated tests.
Prioritization: you cannot build everything
MoSCoW sorts requirements for a given release:
- Must have — without it the release is useless, illegal or unsafe. (Login with WKU account; privacy rules.)
- Should have — important, but the release still works without it. (Search.)
- Could have — nice if time allows. (Emoji reactions.)
- Won't have (this time) — agreed to be out of scope for now. (Video calls.)
A common rule of thumb: Musts should use no more than about 60% of the available effort, so there is room for surprises. The "Won't" list is valuable: it records decisions and prevents the same discussion every week.
Another simple technique is the value/effort grid: high value + low effort = quick wins (do first); high value + high effort = big bets (plan carefully); low value + low effort = fill-ins; low value + high effort = avoid.
Traceability: follow every requirement from source to test
Traceability links each requirement backward to its source (who asked, which law or document) and forward to design, code and tests. A traceability matrix is the simplest form:
| Requirement | Source | Tests |
|---|---|---|
| R1 Login with WKU account | IT office meeting 12 Sep | T1, T2 |
| R2 Hide post after 3 reports | TA interview 15 Sep | T3 |
| R3 Buddy hints only for graded work | Dr. Wang interview, integrity policy | — |
Traceability answers three practical questions:
- Coverage: which requirements have no test? (R3 above — a serious gap.)
- Orphans: which tests or code belong to no requirement? (Possibly unnecessary work — or a missing requirement.)
- Impact analysis: if R2 changes from 3 reports to 5, which design parts, code and tests must change?
Safety standards (for medical, automotive and aviation software) require full traceability; for StudyBuddy a light version — IDs in stories, test names that mention the requirement ID — is enough.
Managing change
Requirements will change. Change is not the problem; uncontrolled change is:
- Baseline: an agreed, versioned set of requirements (e.g., "Release 1 scope, 30 Sep").
- Change request: any change to the baseline is written down: what, why, who asks.
- Impact analysis: use traceability to estimate the effect on design, code, tests, schedule, cost, security and privacy.
- Decision: the Product Owner (or a change board in plan-driven projects) accepts, rejects or postpones it — often trading it against something else of similar size.
Scope creep is the slow growth of scope through small, unrecorded additions ("just one more small thing"). Each one looks cheap; together they make the project late.
Validating requirements
Validation checks that the written requirements describe what stakeholders really need — before anything is built:
- Reviews and inspections: stakeholders and developers read the requirements with a checklist (the qualities table above). Cheap and very effective.
- Prototypes: show a mock-up and watch users try it — the fastest way to find the "yes, but…".
- Writing acceptance tests early: if a tester cannot write a test for a requirement, the requirement is not verifiable. Writing tests before coding exposes ambiguity.
- Walkthroughs of scenarios: step through "a day in the life" of a persona and check that every step is supported.
Requirements for AI features: accuracy is a requirement
AI components are probabilistic: they will sometimes be wrong. Their requirements must say how often wrong is acceptable, which kind of wrong is worse, and what happens then.
Take a component that decides whether a student's question is about a graded exercise (so Buddy must only give hints). Compare its decisions with the truth on a test set:
| Really graded | Really not graded | |
|---|---|---|
| Predicted graded | True positive (TP) | False positive (FP) |
| Predicted not graded | False negative (FN) | True negative (TN) |
- Precision = TP ÷ (TP + FP): of the questions flagged as graded, how many really were?
- Recall = TP ÷ (TP + FN): of the really graded questions, how many did we catch?
- F1 = 2 × precision × recall ÷ (precision + recall): one number balancing both.
- Accuracy = (TP + TN) ÷ total — misleading when one class is rare.
Which error is worse? A false negative here means Buddy gives a full solution to graded homework (an integrity violation); a false positive means a student gets hints instead of a full explanation for an ungraded exercise (annoying but harmless). So the requirement should demand high recall: "On the instructor-labelled test set of 200 questions, recall for 'graded' shall be at least 0.95 and precision at least 0.80."
A complete AI-feature specification also covers:
- Data requirements: which data the model may use (only the course's uploaded materials), how it is labelled, how often the test set is refreshed.
- Human oversight: instructors can review flagged conversations; students can report a bad answer.
- Transparency: answers are labelled as AI-generated.
- Fallback: what the system does when the model is unavailable or unsure.
- Monitoring: the metrics are re-measured every month, because model updates and new course material change behaviour.
The AI angle: specifications are now prompts
When a team uses coding agents, the specification is increasingly the input to the agent. This has two consequences:
- Ambiguity becomes bugs immediately. A human developer asks "3 reports from different students, or any 3 reports?". An agent usually guesses — silently — and writes consistent-looking code for its guess. Precise requirements and acceptance criteria are the best protection.
- AI is a good ambiguity detector. Asking an assistant "List every question a developer would need to ask to implement this requirement" or "Give three different interpretations of this sentence" is an effective review technique — as long as a human decides the answers with the stakeholders.
Two risks to control: AI tools may "complete" missing details with plausible assumptions (always ask them to list assumptions explicitly), and they may produce long, impressive SRS documents full of unsourced requirements. Keep the rule from Chapter 3: every requirement has a source.
Key takeaways
- Good requirements are necessary, unambiguous, complete, consistent, feasible, verifiable, traceable and singular.
- Hunt ambiguity: weak words, vague quantities, passive voice, pronouns, undefined terms; keep a glossary.
- EARS templates (ubiquitous, When, While, If…then, Where) force triggers, states and responses to be explicit.
- Quality requirements need a metric, a target and a condition; prefer percentiles to averages.
- An SRS and a backlog are two containers for the same qualities; acceptance criteria are specifications.
- Prioritize with MoSCoW (and a real "Won't" list) or value/effort.
- Traceability gives coverage, orphan detection and impact analysis; changes go through a baseline, a change request and an impact analysis.
- Validate early: reviews, prototypes, acceptance tests written before code.
- AI features need accuracy requirements (precision, recall, which error is worse), data, oversight, transparency, fallback and monitoring.
- With coding agents, the spec is the prompt: ambiguity turns into silent assumptions — so specify precisely and make assumptions explicit.
Ready? Close the notes and practise.
30 questions. Predict the output before you check — that is the skill the exam measures.