Blog

Software Strategy articles

How to Write a Software Requirements Document

How to write a software requirements document that developers can quote and build from: structure, examples, common mistakes and a checklist.

5 min read Software Strategy

Ask three development companies to quote for "an app like Uber, but for laundry" and you will get three wildly different prices, because each one is guessing at something different. A software requirements document removes most of that guessing. It describes what the system must do, for whom and under what constraints, in enough detail that a team can estimate it, build it and test it against the same expectations you hold.

You do not need to be technical to write a good one. You need to be clear about your business, and disciplined about writing it down.

What a software requirements document is (and is not)

A requirements document, sometimes called an SRS (software requirements specification), describes what the software should do. It is not a design document, which describes how it will be built. Leave choices such as programming language, database and screen layouts to the people building it, unless you have a genuine constraint, such as "must run on our existing Microsoft SQL Server".

It is also a living document. Requirements will change as you learn; the goal is a shared, versioned reference point, not a frozen contract that nobody may question.

A practical structure

The following outline works for most business applications. Adjust the depth to the size of the project; a small internal tool might need five pages, a regulated platform fifty.

  1. Purpose and background. Why the project exists, the business problem, and what success looks like in measurable terms (for example, "process an order without re-keying data").
  2. Scope. What is in, and just as importantly what is out. "Phase one excludes the mobile app" saves arguments later.
  3. Users and roles. Who will use the system: customers, staff, administrators, partners. Note roughly how many of each and what each is allowed to see and do.
  4. Functional requirements. The features, described as behaviours (see below).
  5. Non-functional requirements. Qualities such as performance, security, availability and accessibility.
  6. Data. What information the system stores, where existing data lives, and what must be migrated.
  7. Integrations. Other systems it must talk to: payment gateways, accounting, email, SMS, an existing ERP.
  8. Constraints and assumptions. Budget range, deadlines, hosting rules, regulations, languages.
  9. Open questions. Things you have not decided yet. Listing them openly is better than hiding them.

Writing functional requirements people can build from

Functional requirements describe what the system does. The most common failure is vagueness: "users can manage their orders" could mean one screen or twenty. Two techniques help.

User stories

A user story follows the pattern: As a [role], I want [action], so that [benefit]. For example: "As a warehouse supervisor, I want to see all orders due for dispatch today, so that I can plan staffing." The "so that" part matters, because it lets developers suggest a simpler way to achieve the same benefit.

Acceptance criteria

Each story needs conditions that define "done". For the example above:

  • The list shows orders with a dispatch date of today, sorted by priority.
  • Each row shows order number, customer, item count and shipping method.
  • The supervisor can filter by warehouse.
  • Orders already dispatched do not appear.

Acceptance criteria turn opinions into checks. If a criterion cannot be tested, rewrite it until it can.

Non-functional requirements: the part most people skip

Non-functional requirements describe how well the system must work. They drive cost and architecture far more than most owners expect. Cover at least:

  • Performance: how many users at once, and how quickly key pages must respond.
  • Availability: is a few hours of planned downtime on a Sunday acceptable, or does it need to run around the clock?
  • Security: login methods, password rules, two-factor authentication, who can see personal data.
  • Compliance: data protection laws that apply to you and your customers, such as India's Digital Personal Data Protection Act or the EU's GDPR, and any industry rules.
  • Devices and browsers: desktop only, or phones and tablets too?
  • Backups and recovery: how much data you could afford to lose and how quickly you need to be running again after a failure.

Use numbers where you can. "Fast" means nothing; "search results in under two seconds for 50 simultaneous users" can be designed and tested.

Prioritise ruthlessly

Every requirements document grows into a wish list. Mark each requirement with a priority. A common scheme is MoSCoW: Must have, Should have, Could have, Won't have this time. Be honest about "must". If the business could launch without it, it is a "should". This single step usually does more to control budget than any negotiation over day rates.

Common mistakes

  • Describing screens instead of needs. A sketch is helpful, but explain the goal so the team can propose better layouts.
  • Assuming shared vocabulary. Define business terms. "Customer", "account" and "client" may mean different things in different departments; a short glossary prevents confusion.
  • Ignoring edge cases. What happens when a payment fails, a user is deleted, or two people edit the same record?
  • Skipping the people who do the work. Interview the staff who will use the system daily, not just managers.
  • Never updating it. Record changes with dates and version numbers so everyone works from the current copy.

Checklist before you send it out

  • Could a newcomer read the purpose section and explain the project in two sentences?
  • Does every functional requirement have acceptance criteria?
  • Are performance, security and compliance needs stated with specifics?
  • Is scope explicit, including what is excluded?
  • Are priorities marked?
  • Are open questions listed rather than glossed over?

If you are struggling to separate needs from assumptions, a short requirements workshop with an independent analyst can help; requirements analysis is a core part of software consulting. Once the document is ready, it becomes the basis for comparable quotes for web application development or a mobile app.

Key takeaways

  • A requirements document describes what the software must do, not how to build it.
  • Write user stories with testable acceptance criteria.
  • Do not skip non-functional requirements; they shape cost and architecture.
  • Prioritise with a simple scheme such as MoSCoW and keep the document versioned.

Need help with this?

Netifi helps businesses around the world with Software Strategy. Tell us what you are working on.