S2S2 DIGITAL
Back to blog

How to Write a Software Requirements Specification: Structure, Template and Checklist

Published: July 27, 2026·18 min read

Technical specAnalyticsDevelopmentDocumentation

Why you need a requirements specification

A requirements specification is an agreement between the client and the development team about what exactly will be built. Without it, everyone understands the task differently: the client expects one thing, developers build another, and acceptance turns into an argument about what was meant. A good spec fixes functionality, constraints and completion criteria, so it directly affects budget and timeline: the more precise the requirements, the fewer reworks and the closer the estimate is to reality.

The question of how to write a specification should be solved before discussing price and deadlines, not after. Otherwise you get a vague estimate that grows 30-50% during the project, because both sides discovered new requirements nobody discussed at start. A good spec saves money, time and reputation. It is not just a document - it is a project management tool.

Key point

A requirements specification is not a checkbox. It is an economic tool: either it saves you 20-30% of budget because the estimate is honest, or it costs you 50% in rework because requirements were vague. Choose the first.

Structure of a specification: what it consists of

The structure of a specification is almost always the same; only the depth of detail changes. You can write elaborate or brief, but the order of sections is universal: context and business goal first, then users and scenarios, then technical details and data, then integrations and interface, finally acceptance criteria. This order helps the team understand not only WHAT to build but also WHY, which is critical for making right decisions.

In practice, you do not have to write every section equally deep. What matters is that each point can be verified: done or not. For example, for a simple landing the integrations section can be one line, and the interface section can be a Figma link. For a data management system, the data section may take half the document. The principle is simple: write just enough so the team understands the task and there are no misunderstandings.

Spec sectionWhat to describeMinimal example
Goal and contextWhat problem we solve, for whom, why nowCompany sells B2B services, clients scattered across regions, inquiries come to email and often get lost. Need inquiry management system with real-time manager notifications to not miss deals.
Users and rolesWho works with the system, what rights each hasSales manager (reads and edits inquiries, sends emails), director (views stats and reports), admin (manages accounts and permissions).
Functional requirementsWhat the system does without the word howManager can create inquiry, assign responsible person, send client a message from interface, defer task, move inquiry to win or loss status.
Non-functional requirementsLoad, speed, security, platformsUp to 1000 users, works on mobile browser without app, HTTPS, two-factor auth for admins, API response time < 200ms.
IntegrationsConnection to external servicesSend emails via Sendgrid or company SMTP, export stats to Yandex.Metrica once daily, sync with ERP systems.
Data and storageWhat we store, how long, regulation requirementsKeep communication history for 3 years, no recovery after deletion, data protection compliance.
Interface and designMockups, style, toneMinimalist design, mobile-first, colors from brand palette, friendly email tone, interface response < 1 sec.
Stages and acceptanceHow we split work, readiness criteria for each stageMVP: inquiries and manager (1.5 months). Integrations: email, SMS (1 month). CRM: next May. Acceptance: all MVP features work without errors.
Tip

This table is the minimum. For complex projects each section can expand into 5-10 page document. But even brief completion of this basic structure removes most questions before development starts.

Detail levels: choose by project scale

You don't always need a 50-page spec. Sometimes 5 pages covering the essentials is enough. Choosing detail level depends on project size, contract type, and team experience. The more money and time you invest, the more detailed the spec. Here's a practical guide:

LevelVolumeWhen suitableExample requirements
Minimal (Lean)2-5 pagesLanding, simple CRUD, prototype, agile with weekly refinementFeatures listed as bullets, no detailed scenarios, design is a mockup link, MVP clearly marked.
Standard10-20 pagesWeb app, mobile app, startup MVP, fixed price up to $5kFeatures described as scenarios, edge cases noted, data table included, non-functional requirements listed, security described.
Detailed (Comprehensive)30-50+ pagesComplex system, bank/insurance, critical security, regulation, budget > $5kEach scenario broken down step-by-step with screens, data tables with types and limits, security requirements detailed, all integrations documented.
Discovery-first (Recommended for beginners)IterativeYou have an idea but no spec writing experience, need honest estimateStart with 3-5 pages, team runs analysis 2-4 weeks, refines requirements, releases final spec.
Important

Detail level should match risk. The more money and time you invest, the more detailed the spec. For a small $500 task you can use Lean, but for a system that will be used for years - you need Comprehensive.

Bad requirement versus good one: examples

The main mistake in a spec is vague wording that cannot be checked. At acceptance a dispute arises: client says requirement is not met, team says it is, and nobody is right because the requirement can be interpreted many ways. This is called a subjective requirement and it costs money. Here's how to spot the difference:

  • Bad: the app must work fast. Good: the catalog screen opens in max 2 seconds on 3G with 500 items.
  • Bad: convenient login. Good: phone login with SMS code, resend after 60 seconds, lockout after 5 failed attempts.
  • Bad: the system must be secure. Good: passwords hashed (bcrypt, 12 rounds), HTTPS on all endpoints, two-factor auth for admins, all actions logged.
  • Bad: beautiful design. Good: minimalist design per Material Design, colors from palette: primary #006AFF, errors #FF3B30, spacing in 8px units.
  • Bad: notify user on errors. Good: if request fails, show red alert with error text and retry button, alert auto-closes in 5 seconds or can be closed manually.

The difference is that the second versions are measurable and verifiable: they make it unambiguous whether the requirement is met, leaving no room for dispute. Measurability is the main rule of a good spec. If a requirement cannot be measured - rephrase it or remove it.

Ready template: 9 sections that work in 99% of projects

Here's a skeleton you can take as a basis and fill for your task. Use it as a checklist: if you've answered all 9 points, your spec is ready for the team. Average completion time: 4 hours for simple project, 2-3 days for complex.

  1. Project goal - what problem we solve, for whom, timeline. Describe business context in 3-5 sentences: who uses it now, why they suffer, why solve it now.
  2. Users and roles - who will work with the system, what actions they perform. Describe each role in 1-2 sentences, clarify permissions (who can delete, who can only view, who can change).
  3. User scenarios - step by step, from entry to target action, for each role. Example: manager opens app, enters password, sees list of new inquiries, clicks inquiry, enters comment, clicks send, client sees real-time notification.
  4. Functional requirements - list of system features, each on separate line, no implementation details. Feature must be verifiable: not export data but export inquiries as CSV with columns: name, phone, status, creation date, outgoing emails.
  5. Non-functional requirements - expected load (users/items per day), speed (page load time), security (encryption, 2FA), platforms (mobile browser, iOS, Android), interface language, accessibility requirements.
  6. Integrations - payments (which system, which methods), notifications (SMS, email, push, Telegram), maps, analytics, external APIs. Describe when integration triggers and what should happen.
  7. Data - what we store (inquiries, users, logs), retention periods, data protection requirements (GDPR if EU users), backup policy, encryption at rest and in transit.
  8. Interface - mockups (Figma or Penpot link), tone (formal/friendly), branding (colors, logo, fonts), mobile adaptation, accessibility (contrast no worse than 4.5:1, font size > 14px).
  9. Stages and acceptance - how we split work (MVP, second release), timeline for each, acceptance criteria (all features work, tests written, documentation done, no critical bugs).

Even brief completion of this template (1-2 paragraphs per section) removes most future questions. The team can start development based on your answers, and you'll know exactly what will be built and when.

Common spec mistakes and how to avoid them

Even experienced clients make spec mistakes. Usually not fatal, but they cause rework and disputes that consume 10-20% of budget. Here are the most common:

  • Writing how to build it instead of what the result should be. For example, use React instead of interface responds in 1 second. Choosing technologies is the team's job; your job is the result and constraints. Exception: if you have a strict requirement (e.g., legacy integration), mark it clearly.
  • Mixing mandatory and nice-to-have. Clearly mark what is needed for launch (MVP) and what can wait for version 2. Otherwise the team assumes everything, estimate grows, timeline slips, you get a plane instead of a car.
  • Forgetting non-functional requirements. If you don't state load and data requirements, the team assumes minimum - reworking for growth costs 2-3x more than building right from start.
  • Not describing edge cases. What happens if user loses internet mid-operation? If payment fails but money was charged? If list is empty? Unhandled scenarios are exactly what surface at acceptance most often.
  • Vague acceptance criteria. Don't write when everything is ready. Write specifically: all 12 features work without errors, >= 70% test coverage, code on dev server, documentation ready, no critical or major bugs.
  • Not attaching mockups or design system. If you have mockups in Figma - attach with note on which screens are MVP. If no design - describe clearly: RGB colors, fonts, spacing, branding, contrast.
  • Forgetting regulation. If working with data in Russia - clarify data protection. If payments - check standards (PCI DSS). If EU clients - GDPR. Not just requirements - these are architecture constraints affecting cost and timeline.
Note

The most common reason for rework is not bad development, but incomplete requirements. So before sending spec to the team, ask yourself: can I prove that each requirement is met? If not - rephrase it or remove it.

Readiness checklist: is your spec ready to start development

Before sending the spec to the team, check these questions. If you don't answer yes to most, the spec needs more work. Each skipped point is a $1k-5k rework risk.

  • Is the project goal clear in one sentence and why it needs to be done now?
  • Is every requirement measurable and verifiable (or is it subjective like beautiful)?
  • Are MVP and nice-to-have requirements marked clearly?
  • Are edge cases described (empty list, payment failure, lost connection, user blocked)?
  • Is expected load stated (users per month, items per day, requests per second)?
  • Are security and regulation requirements described (data protection, GDPR, payment standards)?
  • Are mockups attached (Figma, Penpot) or is design precisely described (colors, fonts, spacing)?
  • Are timeline and work stages stated with acceptance criteria for each?
  • Are requirements tied to roles and scenarios (who uses what)?
  • Is there a complete list of all integrations (payments, notifications, APIs, export)?
  • Are acceptance criteria clear for each stage (test coverage, documentation, bugs)?
  • Do you understand what can be reused (SaaS, library) versus built from scratch?
Rule of thumb

If you answer yes to 70% of checklist questions, send it to the team. Work out the rest during analysis. If less than 50% yes - the spec needs rework or rework risk will spike.

What to attach to your spec beyond text

A spec is not just words. Attach supporting materials to help the team understand faster:

  • Interface mockups (Figma, Penpot, even tablet/phone photos) - logic is clearer from pictures than words. Mark which screens are MVP.
  • Data flow diagrams (where data comes from, where it goes, where processed) - especially important for systems with integrations and complex logic.
  • Permission matrix by roles (who can read/write/delete in each section) - prevents access control bugs.
  • Example API responses or format of stored data - if integrating external service, attach real JSON examples.
  • Logging and analytics requirements: which events to log, in what format, what detail level.
  • Screenshots of competitors or similar solutions (if you have them) - help team understand your vision and avoid others' mistakes.
  • Links to regulation or compliance docs if relevant (data protection laws, payment standards) - team understands constraints and can plan architecture.

What to do if you have no spec but need development now

If you have an idea but neither a spec nor clear understanding of scope - that's normal. You should not write a detailed document right away. The answer is a discovery phase (analysis).

Discovery is when the analyst works with you to turn the idea into a prototype, requirements backlog and grounded estimate. The analyst asks questions, draws diagrams, suggests options you didn't consider. The output is a spec - but one tested for realism rather than written blind. It is worth the cost.

Discovery usually takes 2-4 weeks and costs 10-20% of development budget (roughly $500-1500 for typical project). It is an investment that pays back immediately: a correct spec eliminates half the rework. If you're choosing a contractor, notice if they're ready to start with analysis rather than immediately quoting app development without a document. A contractor willing to do discovery is usually higher quality.

For first-timers

If this is your first development project and you're afraid of mistakes - always ask to start with discovery. It protects you better than any spec you write yourself. Discovery cost often fits within overall budget if you hire the same team for development.

How spec quality affects development cost and timeline

Spec quality directly affects estimate honesty and scope creep. Here's how it works: vague spec means the team adds a risk buffer to estimate. Instead of 100 hours they write 150, because something unexpected might surface. Price ends up 30-50% higher than needed. Detailed spec means the team estimates precisely. They know exactly what to do, can break into tasks and estimate each. Price is more accurate, often lower.

Same with timeline: vague spec equals uncertainty, which means a buffer in the plan. Precise spec means plan without buffer, which means realistic timeline you can trust. Also, detailed specs enable fixed-price work. Without one, the honest model is Time & Material, because nobody can guarantee the scope. Time and materials is a risk for the client.

Questions

Is a specification mandatory for app development?

Formally you can work without one, but then scope and acceptance rest on verbal agreements - the main source of conflicts and rework. Even a short 2-3 page spec already protects both sides and makes the estimate fairer. We recommend: always write a spec, even if it seems unnecessary. It is an investment that pays back many times.

Who should write the specification - the client or the contractor?

The best option is jointly. The client describes the business goal and constraints, the team translates that into technical requirements and checks feasibility. If a contractor offers to write the whole spec for you, make sure you understand and confirm every point. A signed spec is a legal document, the basis for assessing work completion.

Where can I get a specification example?

You can take the structure from this article (9 sections) as a template and fill it for your project - that's enough for most mobile and web apps. There is no universal correct example: what matters is not form but measurability of requirements. If you need more detailed guidance, ask your contractor for examples - experienced teams usually have templates for different project types.

How does the specification affect development cost?

Directly. With a vague spec the team adds a risk buffer and quotes high; with a precise one they estimate concretely and usually more accurately. A good spec reduces cost 20-30% by reducing rework and clarifications. A detailed spec also enables fixed-price work instead of Time & Material.

What is discovery and do I need it?

Discovery (analysis phase) is when the team works with you to break down your idea, check realism, draw diagrams and produce a spec. Takes 2-4 weeks, costs 10-20% of development budget, but pays back immediately because the spec becomes accurate and rework is less. We recommend for first projects: it is an investment that saves money later.

How long does it take to write a spec?

Depends on complexity. For a simple landing - a couple hours. For a medium web app - several days. For a complex system (bank, marketplace) - several weeks. But remember: time spent on a spec saves you 2-3 times more time later, because there is no rework and long clarifications.

Can you change the spec during development?

Yes, you can. But each change has a cost: either timeline slips or budget grows or other features get cut. So it is important to lock down at least MVP requirements in the spec and agree how changes are handled (Change Request Process). Good contractors welcome clarifications if they are documented and agreed by both sides.

Read next
Back to blog