March Code

SoftwareRequirementsSpecification:ACompleteGuide+Template

How to write a software requirements specification that keeps your project out of chaos. Structure, common mistakes, examples, and a free template.

Software Requirements Specification: A Complete Guide + Template
Eugene OlshevskyEugene OlshevskyCTO and co-founder
17 min read

Half of all conflicts between clients and developers start with one sentence: “But we discussed that it would work differently.” Discussed, yes. Written down, no. A software requirements specification solves exactly this problem: it records what will be built, how it will work and what counts as done.

This guide covers the full structure of a specification with a breakdown of each section, typical mistakes with “wrong” and “right” examples, and an answer to the eternal question: who should write the spec, the client or the vendor.

What a specification is and when you really need one

A software requirements specification (SRS) is a document that describes what the system should do, not how it works inside. It answers “what are we building”, not “what are we building it from”. Architecture, the choice of frameworks and the database structure are the developers' job, not the spec's.

A good specification does three things:

1
It fixes the project scope. Without a spec, the project's boundaries are blurry. “Make it like Amazon” is not a scope. A scope is: a catalog with filters by 5 parameters, a cart with promo codes, payment through Stripe, a customer account with order history. Anything that isn't described is not part of the project
2
It's the basis for the estimate. A developer can't name a price without understanding the amount of work. A spec lets you break the project into tasks, estimate each one and produce a realistic quote. Without a spec, an estimate is reading tea leaves
3
It protects both sides. The client is sure to get the functionality described. The developer is protected from endless “oh, and add this too” without revisiting the timeline and budget. A spec is a contract at the level of functionality

When you DON'T need a spec

To be honest, not always. Here are the situations where a detailed spec is a waste of time:

MVP projects under $15K. When you're testing a hypothesis, not building an enterprise system. User stories + a Figma prototype are enough here. A 40-page spec for an MVP takes an analyst 2–3 weeks. In that time you could already build the MVP. For what an MVP and a full product cost, see our article on mobile app development cost.

Agile work with a product team. If you have a dedicated team, a product owner and two-week sprints, the backlog replaces the spec. Requirements take shape iteratively instead of being written down a year in advance.

Standard projects. An online store on an off-the-shelf platform, a landing page, a corporate website on a CMS: a brief describing the pages and content is enough.

The rule: you need a spec when the project costs $15K or more and/or takes longer than 2 months, has non-standard business logic, and the client and the developer picture the result differently. The more expensive the project, the more a misunderstanding costs.

The structure of a good spec: 14 sections

1
Project overview. What the system is, who it's for, what business problem it solves. 1–2 paragraphs, no more. Example: “A web platform for managing bookings across a chain of 12 hotels. Replaces manual tracking in Excel and phone bookings. Target users: hotel administrators, chain managers, guests (via the website).”
2
Goals and success metrics. Not “improve processes” but concrete, measurable goals. “Cut booking time from 15 minutes (by phone) to 2 minutes (online). Reduce duplicate bookings from 8% to 0. Reach 90% room occupancy in high season.” Metrics let you judge, six months after launch, whether the system works or not
3
Users and roles. List every type of user: administrator, manager, customer, moderator. For each role, what they can and can't do. Example: “Hotel administrator: creates and edits rooms, sees bookings for their own hotel, manages prices. Does not see financial data of other hotels in the chain”
4
Functional requirements. The largest section. A description of every function of the system: what it does, what data it accepts, what result it returns, what happens on an error. Group them by module: “Booking module”, “Payment module”, “Customer account”. Format: user story + acceptance criteria. “As an administrator, I want to see a monthly room availability grid (tape chart) so that I can quickly find open dates”
5
Non-functional requirements. Performance (response time <2 seconds with 500 concurrent users), security (HTTPS, passwords stored with bcrypt), availability (99.9% uptime), compatibility (the latest 2 versions of Chrome, Safari, Firefox), localization (English, time zones from New York to Los Angeles)
6
Design and UX requirements. Links to Figma prototypes (if any), brand guidelines (colors, fonts, logo), responsiveness requirements (phones, tablets). If there are no prototypes, describe the key screens in words and add references (“navigation like Notion, a dashboard like Metabase”)
7
Integrations. A list of every external system yours has to work with: the accounting/ERP system (QuickBooks or NetSuite: which version, which exchange protocol), the payment gateway (Stripe: which payment methods), the CRM (HubSpot: which data to sync), the SMS gateway, the email service. For each integration: the direction of exchange (one-way or two-way), the frequency (real time or hourly), the data format
8
Data structure. The system's main entities and how they relate. Not a database ER diagram (that's the developers' job) but business entities: “A booking contains: room, guest, check-in date, check-out date, status (new/confirmed/cancelled), payment method, amount”
9
Use cases. Step-by-step scenarios for key processes. “The guest visits the website → picks dates → sees available rooms → chooses a room → enters their details → pays → gets a confirmation email → the administrator sees the booking in the availability grid.” Describe both the happy path and alternative scenarios (the payment failed, someone booked the room while the guest was paying)
10
Hosting and infrastructure requirements. Where it runs: the cloud (AWS, Google Cloud, Azure) or your own servers. Backup requirements (frequency, retention period). GDPR requirements if you process personal data. Geographic requirements (for example, data stored in the EU)
11
Stages and timeline. The project broken into stages with interim deliverables: “Stage 1: prototype and design (3 weeks, deliverable: a clickable prototype). Stage 2: core development (6 weeks, deliverable: a working booking module). Stage 3: integrations (3 weeks, deliverable: connection to the accounting system and Stripe).” Interim deliverables are there for control
12
Acceptance criteria. What counts as a finished project. “All functions from section 4 are implemented and tested. Load tests confirm the system works with 500 concurrent users. Data from the accounting system syncs in real time without loss. All critical and major bugs are closed”
13
Constraints and assumptions. What is NOT part of the project (so nobody says “but we thought that was included” later). “A mobile app is out of scope, web only. Data migration from the old system is a separate stage. Content (copy, photos) is provided by the client”
14
Glossary. If the project uses specialized terms (tape chart, PMS, channel manager, OTA, ADR), spell them out. A developer isn't expected to know the jargon of the hotel business or medicine

Common mistakes when writing a spec

Mistake 1: Describing a solution instead of the problem

Bad: “Put a slider with 5 banners on the home page that switch every 4 seconds with a fade-in animation.”

Good: “The home page has a block with current promotions (up to 5 at a time). The administrator manages it from the admin panel. Visitors see the promotions without scrolling.”

Why: in the first case you've imposed a specific implementation (a slider), even though the task “show promotions” might be solved better with cards, a carousel or video. Describe what you need, not how to build it.

Mistake 2: Requirements you can't measure

Bad: “The system should be fast and easy to use.”

Good: “Any page loads in no more than 2 seconds on a 10 Mbps connection. The key action (creating a booking) takes no more than 3 clicks from the home page.”

Why: “fast” and “easy” are subjective. For one person 3 seconds is fast, for another it's slow. Numbers remove the subjectivity.

Mistake 3: A 100-page spec for a $15K project

A real case: a company spent 3 months and $13K writing a spec for a $40K project. By the time the spec was ready, the business requirements had already changed. A third of the document had to be rewritten.

The rule: a spec should cost 5–10% of the project. For a $30K project, that's a spec for $1,500–3,000 (1–2 weeks of an analyst's time). For a $150K project, $7,500–15,000 (3–4 weeks).

Mistake 4: Forgetting edge cases

Bad: “The user pays for the order by card.”

Good: “The user pays for the order by card. If the payment fails, we show an error and offer to retry or choose another method. If the payment goes through but the item is out of stock, an automatic refund is issued within 24 hours with an email notification. If the user closes the page during payment, the order is held for 30 minutes.”

Why: everyone describes the main scenario. Very few describe errors and exceptions. Yet edge cases are exactly where most systems break.

Mistake 5: Not stating what's NOT included

The client expected a mobile app to come with the web platform: “well, that's obvious”. The developer assumed the scope was web only. A “Constraints and assumptions” section prevents conflicts like this.

Mistake 6: Saying one thing in one place and contradicting it in another

Section 4: “The user logs in with an email and password.” Section 9, a use case: “The user logs in with an SMS code.” When a spec is written over 3 weeks by different people, contradictions are inevitable. That's why it needs an end-to-end review before it's finalized: one person reads the whole document from start to finish and checks it for internal conflicts.

Mistake 7: Not prioritizing requirements

When a spec has 80 features and all of them are marked “required”, it's not a spec, it's a wish list. Use MoSCoW prioritization: Must have (the system makes no sense without it), Should have (important, but you can launch without it), Could have (nice to have), Won't have (not in this release). It helps fit the project into the budget: if the money only covers Must + Should, the rest goes into the next iteration.

Checklist: how to check the quality of a spec

Before you sign off on a spec and start development, go through these 10 points:

1
The goals are measurable. The spec has concrete success metrics, not “improve” and “optimize”
2
All roles are described. Every type of user is listed with their access rights. There are no gray areas where it's unclear who sees what and who can do what
3
Every function has acceptance criteria. It's clear how to check that a function works correctly. Not “implement search” but “search by name, SKU and description; results in <1 second; shows up to 20 results with pagination”
4
Error scenarios are described. What happens when a payment fails, the server is down, the user enters invalid data, two people edit the same record at the same time
5
Integrations are detailed. For each external system: the protocol, the direction of exchange, the frequency, the data format, and what to do when it's unavailable
6
There's a “not included” section. The project's boundaries are spelled out. Anything not described in the spec is out of scope
7
Requirements are prioritized. Must / Should / Could / Won't. It's clear what gets built first and what can be dropped
8
No contradictions. One person has reviewed the whole document end to end. Requirements in different sections don't conflict
9
A non-technical person can understand it. A CEO or product manager can read it and understand what will be built. If only a developer can understand the spec, it can't work as a “contract” between the two sides
10
Project acceptance criteria are stated. Both sides understand what a “finished project” means. This removes 80% of disputes at the final stage

Who should write the spec?

The short answer: the vendor (the studio or developer), with the client actively involved.

The long answer: a spec translates business requirements into the language of development. The client brings business expertise (they know the processes, the pain points, the users). The vendor brings technical expertise (they know what's feasible, what's expensive and where the pitfalls are).

A spec written only by the client has business requirements with no technical thinking behind them: it's a wish list. A spec written only by the developer, without getting into the business, is a technical fantasy detached from reality.

The best process:

1
The client fills in a brief: the business, the users, the system's main tasks, the budget range
2
The vendor's analyst runs interviews: 2–3 meetings of 1.5 hours with the key stakeholders. They ask the awkward questions: “What if the item is out of stock?”, “What if the ERP is down?”, “Who's responsible for moderation?”
3
The analyst writes the spec based on the interviews, references and prototypes. Each section is an iteration with the client: write it, show it, adjust it
4
Both sides sign the final version, and the spec becomes part of the contract. Changes after signing go through a contract amendment with a revised estimate

How much it costs to write a spec

$1–2.5K
simple project
(website, landing page, MVP)
$2.5–7K
mid-sized project
(web platform, CRM)
$7–15K
complex project
(marketplace, ERP)

What's included: a series of interviews with the client, business process analysis, functional and non-functional requirements, prototypes of the key screens (Figma), an integration map, and a breakdown into stages with an estimate.

What you get: a 15–60 page document (depending on the project), a clickable prototype and a detailed development estimate.

Important: if a studio offers a “free spec”, it's most likely a 2-page brief, not a real requirements specification. A real spec takes 1–4 weeks of an analyst's work. Nobody does that for free: the cost is simply built into the development price (and you pay for it without knowing).

Our spec template

We've prepared the specification template we use on our own projects. It's not a blank placeholder from the internet. It's a working document we've refined over years of software development for dozens of clients.

What's inside:

14 sections with instructions and examples for each block. A spec review checklist: 25 points to assess how complete and solid the document is. Sample wording: how to describe functions, roles, integrations and non-functional requirements.

Get the template

To get the spec template, send us a request and write “Spec template” in the message. We'll email it to you within one business day. It's free, with no strings attached.

If you already have an idea of the project but no resources to write the spec, we can take it on. We'll run the interviews, describe the requirements, build prototypes and prepare a document you can start development from right away.

FAQ

Can I start development without a spec?

You can, if the project costs under $10–15K and takes 4–6 weeks. For an MVP, user stories + a prototype are often enough. But for projects over $30K, skipping the spec is Russian roulette: you might get lucky, or it might cost you an extra 30–50% of the budget in rework.

How is a spec different from a brief?

A brief is 2–5 pages with a general description of the task: who you are, what you want, the budget, the timeline. The client fills it in within 1–2 hours. A spec is 15–60 pages describing every function, scenario, integration and constraint in detail. An analyst writes it in 1–4 weeks. The brief is the entry point to the project. The spec is the basis for the estimate and the development.

Should the spec describe the design?

Yes, but as UX requirements, not mockups. “The key action takes no more than 3 clicks”, “The interface must work on screens from 320px”, “Navigation like Notion: a sidebar + search”. Visual design is a separate stage (UI) that comes after the spec is approved.

Can the spec change during development?

It can, and it should: business requirements don't stand still. But every change has to go through a formal process: describe the change → assess its impact on the timeline and budget → get approval → update the spec. Without that process, scope creep will eat both the budget and the team's motivation.

What's the best format for a spec?

For the document, Google Docs or Notion (co-editing, comments, version history). For prototypes, Figma. For scenarios, Miro (user flow diagrams). PDF only for the final version that both sides sign. While you're working, the document should stay “alive”, open to comments and edits.

Does the spec need to follow a formal standard?

There are formal standards for requirements documents, such as IEEE 830 (last revised in 1998 and since superseded by ISO/IEC/IEEE 29148). They prescribe a rigid structure with many mandatory sections. If a government contract or tender requires a specific standard, follow it. For commercial projects, you don't need to. Today a spec has to be clear to both sides, not tick every box of a decades-old template.

How long does a spec stay valid?

In practice, 3–6 months. After that, business requirements, the market and the technology change enough that the spec needs updating. If the spec was written and development starts 8 months later, review the document before kickoff.

If you're planning a project and want to start with the right spec, get in touch. We'll run a free consultation, help you define the scope and suggest how to work together.

About the authors

The March Code team

We're a software studio with years of commercial development experience in Russian and international markets. We help businesses go digital: we build web and mobile apps, automate routine work and bring AI in where it's actually needed.

Over that time we've delivered 20+ projects, from startup MVPs to complex SaaS platforms and enterprise solutions. Our clients include hospitality, e-commerce, logistics and education. For us, every project is not just code but a product that has to deliver results.

20+ delivered projects13+ years of founder experienceNDA on requestMore about the company →

An architect reviews your spec or idea in 48 hours

Free

Prices are indicative and not a binding offer.

We'll point out the risks, unnecessary features and a realistic budget range before you sign with a vendor.

Send your spec on Telegram, no form