Skip to content

Requirements Engineering

Requirements Engineering (RE) is the process of figuring out what to build before you build it — and making sure everyone agrees on that. It bridges the gap between what a customer wants and what the development team actually delivers. Done well, it prevents the most expensive kind of bug: building the wrong thing.

Software requirements fall into two main types:

  1. Functional Requirements: Defines what the system must do (e.g., “The system must allow users to reset their passwords via email”).
  2. Non-functional Requirements: Defines how the system operates - the criteria used to judge its operation rather than specific behaviors.
    • Execution qualities: Security, usability, performance (observable at run time).
    • Evolution qualities: Testability, maintainability, scalability (embodied in the static structure).

Before gathering deep requirements, determine if the project is actually viable:

  • Technical Feasibility: Do we have the technology and expertise to build this?
  • Operational Feasibility: Will it actually solve the business problem?
  • Economic Feasibility: Will it generate ROI or fit within the budget?

This is the gathering phase. Analysts work with stakeholders and users to identify needs, resolve conflicting requests, and identify missing details.

Common elicitation techniques:

TechniqueDescriptionBest For
InterviewsOne-on-one structured or unstructured conversations with stakeholdersDeep domain knowledge extraction
WorkshopsFacilitated group sessions (e.g., Joint Application Development)Resolving conflicting requirements
ObservationWatching users perform their actual tasks in their real environmentDiscovering implicit, undocumented workflows
QuestionnairesStructured surveys distributed to a wide audienceGathering broad input from many stakeholders
PrototypingBuilding a low-fidelity mockup for stakeholders to react toClarifying vague or unclear requirements
Document AnalysisReviewing existing documentation, reports, and legacy systemsUnderstanding existing workflows

Common challenges:

  • Stakeholders often don’t know exactly what they want.
  • Stakeholders use domain-specific language, while developers use technical language.
  • Political or organizational factors may skew requirements.
  • Requirements change while the analysis is still ongoing.

3. Software Requirement Specification (SRS)

Section titled “3. Software Requirement Specification (SRS)”

The SRS is the formal document translating customer needs into technical specifications that the development team can build from.

Common modeling tools used in an SRS include:

  • Data Flow Diagrams (DFD): Shows how data moves through the system.
  • Entity-Relationship (E-R) Diagrams: Detail the logical representation of data entities and their relationships.
  • Data Dictionaries: Centralized repositories defining all data items to ensure the customer and developers use the exact same terminology.

In Agile projects, the SRS is often replaced or supplemented by User Stories - short, informal requirement descriptions written from the perspective of the end user.

Format:

As a [type of user], I want [goal], so that [benefit/reason].

Example:

As a registered customer, I want to reset my password via email, so that I can regain access to my account if I forget my credentials.

Each user story is paired with Acceptance Criteria — a set of conditions that must be met for the story to be considered complete. Acceptance criteria are often written in Given/When/Then format:

Given I am on the login page, When I click “Forgot Password” and submit my email, Then I should receive a password reset link within 2 minutes.

Acceptance Criteria vs. Definition of Done

Section titled “Acceptance Criteria vs. Definition of Done”

These are often confused, but they operate at different levels:

Acceptance CriteriaDefinition of Done (DoD)
ScopePer user storyEntire team / all stories
Written byProduct OwnerTeam (agreed collectively)
CoversBusiness behavior of this featureTechnical quality gate (tests pass, code reviewed, deployed to staging, docs updated, etc.)
ChangesEvery storyRarely — agreed at sprint start

A story can satisfy all its Acceptance Criteria and still fail the DoD if, say, no code review was done or automated tests weren’t written.

4. Software Requirement Validation & Management

Section titled “4. Software Requirement Validation & Management”

Before development begins, requirements must be validated to ensure they are correct, complete, practical, and unambiguous.

Validation Techniques:

  • Inspections: Systematic manual analysis.
  • Prototyping: Building an executable mock-up model so stakeholders can “see” the requirement.
  • Test-case generation: If you can’t write a test for a requirement, it’s too vague.

Not all requirements are equally critical. The MoSCoW method is a widely used prioritization technique that categorizes each requirement into one of four buckets:

PriorityLabelMeaning
🔴 MMust HaveNon-negotiable. The product cannot launch without this.
🟠 SShould HaveImportant but not vital. A significant omission, but workarounds exist.
🟡 CCould HaveDesirable but not necessary. Included if time and budget allow.
WWon’t HaveAgreed to be out of scope for this iteration. May be revisited later.

Applying MoSCoW early ensures that if time or budget is cut, the most valuable features are guaranteed to ship.


A complete Software Requirement Specification should be:

  • Clear and unambiguous
  • Correct and consistent (requirements shouldn’t contradict each other)
  • Verifiable (testable)
  • Prioritized (must-have vs. nice-to-have)
  • Traceable (you should be able to map every feature back to a business requirement)