NogaTech

Custom Software & Modernization

Software Requirements Specification (SRS): What to Define Before Development

Learn what a software requirements specification should include, how to define functional and non-functional requirements, and how to make requirements testable.

19 min read

“We need a customer portal where customers can upload files, see status and contact our team.”

That sounds like a clear request. It isn’t yet buildable. A development team reading it would still need to know:

  • • Which customers, and which roles within each customer?
  • • Which file types, and are there size limits?
  • • Who can view each file?
  • • What are the status values, and who changes them?
  • • Who gets notified, and when?
  • • What happens when something is missing or wrong?
  • • Does the portal connect to the CRM or another system?
  • • What information belongs to each customer record?
  • • What proves that a submission is complete?

Each unanswered question becomes a guess. The same idea becomes far clearer once it’s broken down into users, workflows, data, permissions, business rules, system behavior, integrations, exceptions and acceptance conditions.

That’s what a software requirements specification does. An SRS, short for software requirements specification, is a document that defines what a software system needs to do, for whom, under what conditions and how the business will know it works. It’s a translation layer between a business need and something a development team can design, build and verify. A good one describes what the system must do far more than how developers should implement it.

This guide organizes that work into ten parts:

Problem → Users → Workflows → Data → Rules → Features → Connections → Constraints → Acceptance → Ownership

It’s NogaTech’s planning framework for this article, not an ISO or IEEE structure, and not the only way to organize an SRS.

Not every project needs the same level of formal documentation; a small internal tool may need a few pages, a multi-team system much more. This guide covers requirement layers, the ten parts, how to write testable requirements, a fictional worked example, integrations, change control and a review checklist.

What Is a Software Requirements Specification?

A software requirements specification documents what a software system needs to do, who it serves, the conditions it must satisfy, the interfaces and constraints that matter, and how important requirements can be verified.

The international standard on requirements engineering, ISO/IEC/IEEE 29148, treats requirements specifications as information items produced by the requirements engineering process. Organizations apply that idea with very different levels of formality. How formal an SRS document needs to be usually depends on:

  • • Project size and complexity
  • • How many teams or vendors are involved
  • • Contractual requirements
  • • Regulatory needs, where they genuinely apply
  • • The organization’s existing practices

Requirements may live in a document, a spreadsheet, a requirements tool or a short SRS plus a backlog. The format matters less than whether they’re clear, agreed and verifiable.

What an SRS Is—and What It Is Not

Documents sometimes overlap, but these boundaries are a useful starting point:

An SRS isAn SRS is not automatically
A definition of what the system must do and the conditions it must meetA business case explaining whether the project is worth funding
A shared reference for business and development teamsA process map of how work moves today
An input to design, development and testingA UI design file or set of screens
A record of agreed behavior, constraints and acceptance conditionsA system architecture or database schema
A project schedule, backlog, contract or test plan

Swipe the table to see more →

An SRS often informs all of those documents. It doesn’t replace them.

From Business Idea to Buildable Requirement

1. Business Problem

What is slow, costly or error-prone today

2. User Need

What a specific role needs to accomplish

3. Workflow

How the work moves, step by step

4. Software Requirement

What the system must do, for whom, under what condition

5. Acceptance Condition

What observable result proves it works

6. Build / Verify

Development and testing against that condition

A useful SRS turns business intent into requirements that a development team can implement and a business team can later verify.

From Business Need to Software Requirement

Requirements come in layers, each answering a different question. Using the onboarding portal as a running example:

LayerQuestion it answersOnboarding portal example
Business requirementWhy does the organization need this?Reduce manual re-entry of customer information during onboarding.
User requirementWhat does a specific user need to accomplish?Operations needs to review incoming customer information before finance setup.
Functional requirementWhat must the system do?The system must validate required customer fields before the record can move to finance review.
Non-functional requirementWhat quality, constraint or operating condition must the system satisfy?Uploaded customer documents must be visible only to the customer who submitted them and to authorized staff.
Acceptance criterionWhat observable result proves the requirement is satisfied?When a required billing field is missing, the record cannot advance and the missing field is identified.

Swipe the table to see more →

Keeping these distinct makes each one easier to agree on.

Five Levels of Requirement
Business RequirementWhy does the organization need this?
User RequirementWhat does the user need to accomplish?
Functional RequirementWhat must the system do?
Non-Functional RequirementWhat condition or quality must the system satisfy?
Acceptance CriterionWhat proves the requirement works?

These layers answer different questions. Keeping them separate helps prevent business goals, system behavior and acceptance tests from being mixed into one vague statement.

The 10 Parts to Define Before Development

These ten parts give an SRS its substance. They inform each other, and teams often revisit earlier parts as later ones become clear.

1. Problem: Define Why the Software Needs to Exist

Start with the problem, not the solution. Which business process is affected, what’s slow or error-prone today, and why don’t existing tools solve it? In the portal example, onboarding information might arrive by email in inconsistent formats and be retyped into several systems. The output is a short, agreed problem statement that every later requirement can be checked against.

2. Users: Identify Roles and Responsibilities

List the customers, staff, managers, administrators and partners who will use the system, defined as roles rather than job titles. Then define how roles differ: who can create a record, view a document, change a status or approve a submission. Permission differences are easy to overlook and far easier to define now than to retrofit later.

3. Workflows: Document How Work Moves

For each important workflow, capture the trigger, steps, decisions, handoffs, successful outcome and exception paths. In the portal, one workflow starts when staff create a customer account and ends when an accepted submission moves to finance setup, with a path for returning incomplete submissions.

4. Data: Define What Information the System Needs

Identify what the system must capture, display and pass on: required and optional fields, where each comes from, which system is the source of truth, where data changes and where it goes next, plus retention needs where they apply. Keep it at a business level; designing database tables is the development team’s job.

5. Rules: Make Business Logic Explicit

Rules are the decisions the software will make or enforce: who can approve, when a status changes, when a field becomes required, what sends an item back and what triggers a notification. People can handle an informal “it depends” through judgment. If software is expected to make the decision, that ambiguity needs to become explicit logic or a defined route to human review.

6. Features: Describe What the System Must Do

Describe behavior, such as creating and updating records, uploading documents, assigning work, reviewing, approving, searching, notifying and reporting, in terms of what the system does for which role, under what conditions. Avoid a wishlist: every feature should trace back to a user need and the problem.

7. Connections: Define External Systems and Integrations

For each external system, such as a CRM, email service or payment provider, define the source, destination, purpose, data exchanged, trigger, owner and behavior if the connection fails. The integrations section below expands on this.

8. Constraints: Define Important Conditions

Record the conditions the solution must respect: security, privacy, accessibility, capacity, performance, supported browsers and devices, operational limits, and compliance requirements where they genuinely apply. Don’t add obligations that don’t apply, or numeric targets without a real basis.

9. Acceptance: Define How Requirements Will Be Verified

Every important requirement should be observable enough to evaluate, with a pass condition, an error condition where relevant, and agreement on whether it’s checked by business review, technical testing or both. NASA’s Software Engineering Handbook says verification methods such as test, inspection, analysis or demonstration should be included in the software requirements document, either with the requirement or in a separate verification matrix.

10. Ownership: Decide Who Approves and Changes Requirements

Name the requirement owners, the subject-matter experts who confirm accuracy, the final approver and who resolves disagreements. Decide who can change a requirement and who maintains the current version. Without this, requirements drift and nobody is sure which version is agreed.

Functional vs Non-Functional Requirements

Functional requirements describe what the system does. Non-functional requirements describe the qualities, constraints or operating conditions that apply while it does them. Most functional requirements come with non-functional considerations attached:

Functional requirementRelated non-functional consideration
A customer can upload a document to their onboarding record.Which file types and sizes are accepted, and who is permitted to view the file afterward.
Staff can search customer records by name or account number.How quickly results should appear at the expected volume of records, defined by the business.
A customer can submit the onboarding form.The form must be usable with a keyboard and screen reader to the accessibility level the business has agreed.
A manager can generate a monthly onboarding report.Which roles may access the report, given that it contains customer information.

Swipe the table to see more →

Non-functional requirements are easy to leave implicit, and “obvious” expectations often differ between people. For an SRS, the essential step is to write the important ones down and make them specific enough to check.

Anatomy of a Buildable Software Requirement
WhoOperations user
ConditionRequired onboarding information submitted
BehaviorSystem validates required fields
ResultRecord becomes eligible for review
ExceptionMissing fields prevent progression
AcceptanceSystem identifies each missing required field

A buildable requirement identifies the user or trigger, required system behavior, expected result, important exception and a condition that can be verified.

How to Write a Clear Software Requirement

When working out how to write software requirements, a simple pattern helps: one requirement, one main behavior, a defined condition and an observable result. The model in the visual above extends that pattern:

Who → Need / condition → System behavior → Result → Exception → Acceptance

It’s a reader-facing completeness check, not a mandatory syntax. In the portal: when onboarding information is submitted, the system validates required fields; complete records become eligible for review, incomplete ones can’t progress, and the system identifies each missing field.

Watch for vague quality words: user-friendly, fast, flexible, seamless, secure, intuitive, robust, scalable. They express real intentions, but only become useful once the project defines them well enough to guide decisions and verification. NASA’s software engineering handbook warns that requirements written only in natural language stay open to interpretation, which is why definitions and acceptance conditions matter.

VagueClearer
The upload process should be user-friendly.A customer can upload permitted file types from the onboarding page and sees a clear success or error message for each file.
The system should be secure.Customers can view only documents attached to their own account; staff access follows their assigned role.
Notifications should be timely.When a submission is returned for correction, the customer receives an email naming the fields that need attention.

Swipe the table to see more →

Requirement vs Feature vs User Story vs Acceptance Criterion

These terms overlap, and teams use them differently. A practical way to separate them:

ItemMain questionExample
RequirementWhat must be true, or what must the system support?The system must prevent a record from advancing while required fields are missing.
FeatureWhat recognizable capability does the system offer?Document upload and review
User storyWhat does a user want to achieve, and why? Often used in iterative delivery.As an operations reviewer, I want to see which fields are missing so I can return incomplete submissions quickly.
Acceptance criterionHow do we know the expected behavior has been satisfied?When a required field is empty, the record stays in its current status and the missing field is highlighted.

Swipe the table to see more →

None universally replaces the others. Many teams keep agreed requirements in an SRS and deliver through user stories with acceptance criteria. What matters is that requirements are clear and traceable somewhere.

How Detailed Should an SRS Be?

There’s a useful middle ground between saying too little and saying too much.

  • Too vague leaves room for interpretation. Different people read the same sentence differently, and the difference surfaces late.
  • Useful defines the users, behavior, data, rules, interfaces, constraints and acceptance conditions that matter for this project.
  • Too prescriptive dictates implementation choices the business doesn’t actually need, which can limit the development team without adding value.

Some technical constraints are legitimate requirements: a mandated platform, an existing enterprise system, a required security approach, specific browser or device support, or hosting restrictions. NASA’s handbook suggests that when a requirement specifies an implementation method, its rationale should explain why, which is a sensible test for any SRS.

Too Vague → Useful → Too Prescriptive

Too Vague

Make uploads fast and easy.

Useful

An authorized customer can upload the permitted document types to the customer record and receives a clear success or error state.

Too Prescriptive

A requirement that unnecessarily dictates internal framework, database or job implementation details the business has no genuine need to decide.

A useful requirement is specific enough to verify without unnecessarily deciding how developers must implement the solution.

Software Requirements Specification Example

The following software requirements specification example is fictional and illustrative. It isn’t based on a NogaTech client or project. It shows how part of an SRS for a customer onboarding portal might look.

Scenario: Staff create a customer account. The customer supplies missing information and uploads required documents. Operations reviews the submission. Incomplete submissions return to the customer for correction, and accepted submissions move to the next internal stage.

IDTypeRequirementAcceptance / verification
OB-01Role accessOnly staff with the Onboarding Admin role can create a customer onboarding account.A user without the role cannot see or use the create-account action.
OB-02Role accessA customer user can view and edit only their own organization's onboarding record.A customer signed in to one account cannot open another account’s record by any route.
OB-03Required fieldsThe system must require legal business name, billing contact and billing address before submission.Submitting with any of these empty is blocked, and each empty field is identified.
OB-04Document uploadA customer can upload the document types listed in the onboarding policy to their record.Permitted types upload successfully and appear on the record; other types are rejected with an explanatory message.
OB-05Workflow statusRecords move through Draft, Submitted, Returned for Correction and Accepted.Each transition is possible only through the action and role defined for it.
OB-06Exception behaviorAn operations reviewer can return a submission with a required reason.Returning without a reason is blocked; the returned record shows the reason to the customer.
OB-07NotificationWhen a record is returned, the customer's billing contact receives an email with the reason and a link to the record.Returning a test record sends the email to the right contact with the correct content.
OB-08Record reviewOperations reviewers can see all submitted fields and documents on one review screen before deciding.A reviewer can accept or return a record without leaving the review screen.
OB-09System connectionWhen a record is Accepted, customer and billing details are sent to the CRM as a new account.Accepting a test record creates the matching CRM account; if the transfer fails, the record is flagged and an administrator is notified.
OB-10Non-functionalUploaded documents must be accessible only to the submitting customer and authorized staff roles.Access attempts by other users are denied, verified through role-based testing.

Swipe the table to see more →

Note the value of IDs: each software requirement specification entry can be referenced in design discussions, tests and change requests.

Requirements and Business Process Mapping: What’s the Difference?

A process map and an SRS are closely related but do different jobs.

A process map captures how the business workflow moves: the trigger, participants, steps, decisions, handoffs, waits and exceptions. NogaTech’s guide to business process mapping covers how to build one.

An SRS takes that workflow and adds what software needs: permissions, data, detailed system behavior, interfaces, constraints, acceptance conditions and ownership. A process map might show “Operations reviews submission.” The SRS specifies what the reviewer can see, what actions they can take, what each action changes and how that’s verified.

If those details are not defined elsewhere, a process map alone leaves them unresolved and open to different interpretations during design and development.

Process Map → SRS

Process Map

  • Trigger
  • Role
  • Step
  • Decision
  • Handoff
  • Exception

SRS Adds

  • Permissions
  • Data
  • System behavior
  • Interfaces
  • Constraints
  • Acceptance
  • Ownership

A process map explains how the business workflow moves. An SRS adds the software behavior, data, access, interfaces, constraints and acceptance conditions needed to make that workflow buildable.

Requirements for Integrations and APIs

Integrations deserve their own requirements, because they involve systems the project may not control. For each connection, define:

ItemQuestion to answer
Source systemWhere does the data come from?
Destination systemWhere does it need to go?
TriggerWhat event causes the exchange?
Data exchangedWhich fields or records move, and in what direction?
OwnershipWho owns each system and the account used to connect?
Access dependencyWhat credentials, permissions or approvals are needed?
Failure behaviorWhat should happen if the exchange fails or the other system is unavailable?
AcceptanceWhat observable result shows the connection works?

Swipe the table to see more →

The SRS needn’t describe how the integration is coded, but it should make business expectations explicit, especially failure behavior. For a broader explanation, see NogaTech’s guide to API integration.

What Makes a Software Requirement Testable?

A requirement is testable when it leads to an observable condition someone can check, including when things go wrong.

Weak wordingBetter requirementHow to verify
The system should be easy to use.A first-time customer can complete and submit the onboarding form without staff assistance, using on-screen guidance.Observe representative users completing the form.
The system should notify users.When a submission is returned, the billing contact receives an email naming the fields needing correction.Return a test record and confirm the email’s recipient and content.
The system should handle errors gracefully.If a document upload fails, the customer sees which file failed and can retry without re-entering other information.Simulate a failed upload and confirm the message and retry behavior.
Reports should be accurate.The monthly report counts each accepted record once, in the month it was accepted.Compare report output against a known set of test records.

Swipe the table to see more →

If you can’t describe how a requirement would be checked, it usually needs more definition.

Requirements Change—How Should Updates Be Managed?

Requirements change as users clarify needs, gaps surface or priorities shift. Even NASA’s handbook expects an SRS to be revised as a project progresses. The goal isn’t to prevent change but to make it visible and deliberate.

A simple model:

Request → Why → Impact → Decision → Update → Re-verify

For each change, capture:

  • • Who requested it
  • • The reason for it
  • • Which requirements it affects
  • • Which workflows it affects
  • • Which acceptance criteria need updating
  • • Related dependencies, such as integrations or data
  • • The approval decision and who made it
  • • The version or date of the update

A simple change log is often enough, as long as each requirement and its acceptance conditions are updated together.

Requirement Change Control

Request

Requester

Why

Reason

Impact

Affected requirements and workflows

Decision

Approval

Update

Requirement updated

Re-Verify

Acceptance impact

Requirements can change during a project. The important part is making the change visible, assessing what it affects, approving it and updating the requirement and its acceptance conditions together.

SRS Review Checklist

Before development starts, a business reviewer can use this checklist to test whether an SRS document is ready to rely on:

AreaWhat to check
Business problemIs the problem stated clearly enough to judge whether each requirement helps solve it?
UsersAre all roles listed, including administrators and external users?
WorkflowsDoes each important workflow have a trigger, steps, outcome and exception paths?
DataIs it clear what information is captured, where it comes from and where it goes?
Business rulesAre decisions, validations and status changes defined rather than implied?
Functional requirementsDoes each describe one main behavior with a defined condition and result?
Non-functional constraintsAre important quality expectations written down and specific enough to check?
IntegrationsDoes each connection define source, destination, trigger, data, owner and failure behavior?
PermissionsIs it clear what each role can see and do?
ExceptionsAre error and edge cases covered for the main workflows?
Acceptance criteriaCan each important requirement be verified by an observable result?
AssumptionsAre assumptions stated so they can be confirmed or challenged?
Unresolved decisionsAre open questions listed with an owner, rather than buried?
OwnerIs there a named owner and final approver?
Change processIs it clear how changes will be requested, approved and recorded?

Swipe the table to see more →

Common Software Requirements Specification Mistakes

These are common patterns rather than measured statistics:

  1. 1. Starting with screens before defining workflows. Screens show appearance, not behavior.
  2. 2. Mixing the business goal with the system requirement. A goal needs translating into behavior.
  3. 3. Writing vague quality words without defining them. “Fast” means different things to different people.
  4. 4. Ignoring exceptions. Incomplete, invalid and failed cases need attention too.
  5. 5. Missing roles and permissions. Access is assumed rather than specified.
  6. 6. Forgetting integration ownership. Each connected account needs an owner.
  7. 7. Treating a process map as complete software requirements. It shows the workflow, not the system behavior.
  8. 8. Listing features without acceptance conditions. Without them, “done” becomes a matter of opinion.
  9. 9. Silently changing requirements. Teams end up working from different versions.
  10. 10. Having no named approver. Disagreements stay unresolved.

When Professional Software Discovery Help Makes Sense

An internal approach may be enough for one simple workflow with few roles, exceptions and integrations, a clear product owner and well-understood requirements.

Professional discovery support becomes more useful when:

  • • Several departments are involved
  • • Stakeholders disagree about what the system should do
  • • Business rules are complex
  • • Many user roles need different permissions
  • • Legacy systems are involved
  • • Data migration matters
  • • Several integrations are required
  • • The first release is unclear
  • • Workflows need discovery before software design can start

If deciding what belongs in a first release is the main challenge, NogaTech’s guide to building an MVP covers that decision. For help turning business needs into requirements and working software, see NogaTech’s custom applications and modernization services.

15 Questions Before Development Starts

QuestionWhy it matters / What a useful answer establishes
1. What business problem should the software solve?The basis for judging every requirement
2. Who will use the system?The full set of roles to design and test for
3. What does each user role need to accomplish?User requirements that drive functional requirements
4. What event starts the main workflow?A clear trigger the system responds to
5. What result ends the workflow successfully?A defined outcome that can be verified
6. What information must the system capture or display?The data scope, without designing the database
7. Where does that data come from?Sources of truth and integration needs
8. Which business rules control decisions?Logic the system must enforce consistently
9. What exceptions or failure paths must be handled?Behavior when things go wrong, not just when they go right
10. Which permissions differ by user role?Access rules defined before they’re built
11. Which external systems must connect to the software?Integrations identified early, with owners
12. What constraints or quality expectations matter?Non-functional requirements stated rather than assumed
13. What belongs in the first release and what can wait?A realistic initial scope
14. How will each important requirement be verified?Acceptance conditions agreed before build
15. Who has authority to approve or change requirements?A clear owner and change process

Swipe the table to see more →

Frequently Asked Questions

What is a software requirements specification?

A document defining what a software system must do, who it serves, the conditions and constraints it must meet, and how important requirements will be verified.

What does SRS stand for in software development?

SRS stands for software requirements specification. The term is sometimes used loosely for any software requirements document, though formality varies widely between organizations.

What should a software requirements specification include?

Typically the problem, users, workflows, data, rules, functional requirements, integrations, constraints, acceptance criteria and ownership, plus assumptions and a change log. The review checklist above can serve as a simple software requirements specification template.

Who writes the software requirements specification?

Often a business analyst, product owner or development partner leads the writing, while business stakeholders supply and approve the content.

What is the difference between business requirements and functional requirements?

A business requirement explains why the organization needs something, such as reducing manual re-entry. A functional requirement states what the system must do to support that, such as validating required fields before a record advances.

What is the difference between functional and non-functional requirements?

Functional requirements describe what the system does. Non-functional requirements describe the qualities, constraints or operating conditions that apply, such as security, accessibility, capacity or performance.

What is the difference between an SRS and a user story?

An SRS collects agreed requirements and constraints in one reference. A user story expresses a single user need, often in iterative delivery, and is usually paired with acceptance criteria. Many teams use both.

How detailed should software requirements be?

Detailed enough to build and verify without guessing, but not so prescriptive that they dictate unnecessary implementation choices. It depends on size, complexity and risk.

Can software requirements change during development?

Yes. Record each change, assess its impact, approve it and update the requirement and its acceptance criteria together.

What makes a software requirement testable?

It describes a specific behavior under a defined condition, with an observable result that someone can check, including what should happen when something goes wrong.

Define the Software Before You Start Building It

A useful software project starts with a clear understanding of the users, workflows, data, rules, integrations and acceptance conditions the system must support. Once those requirements are visible, the business and development team have a much stronger basis for discussing scope, design and implementation.