TL;DR: A useful software specification covers eleven sections: goal and metrics, users and roles, main flows, screens, business rules, permissions, data and integrations, non-functional requirements, analytics, out of scope, and open questions. Below is a copyable template with a filled-in example for each section, taken from a CRM for a service company. Define permissions, business rules, accessibility and data integrity precisely. Leave interface choices that have several good answers for a working version.
What this document is for
Search for a software specification template and you mostly find a table of contents: empty headings with no hint of what goes under them. This one comes filled in, so you can copy the structure and see what a finished section looks like.
The specification is the document your team builds, tests and estimates from. It comes out of the discovery phase. If you run a tender, it becomes the attachment that lets every vendor price the same system. (Writing the tender itself is covered in our RFP guide.) This article covers the document itself.
Our running example is fictional: an air-conditioning service company with a 12-person call center, 2 dispatchers and 40 field technicians. Today everything runs on spreadsheets, phone calls and WhatsApp groups. The company wants a CRM that manages each service call from the first phone call to the invoice.
Use one test for every line you write. If a developer, a QA engineer and a product manager can each check it and agree on the result, it is a requirement. Otherwise it is a wish.
The template, section by section
1. Goal and success metrics
What to write: the business problem in two or three sentences, the goal, and two to four metrics with today's value, a target and a date. Metrics tell you whether the project worked. They also settle arguments about priorities.
Example: "Customers call the center to ask when the technician will arrive. Dispatchers schedule from a spreadsheet. Some repairs need a second visit because the technician arrived without the right part. Goal: manage every call in one place and let customers see the arrival time themselves."
| Metric | Today | Target | Measured |
|---|---|---|---|
| Calls closed on the first visit | 68% | 80% | 6 months after launch |
| Time from new call to assigned technician | 4 hours on average | 1 hour | 3 months after launch |
| "When will you arrive?" calls to the center | About 300 a week | Down 50% | 3 months after launch |
2. Users and roles
What to write: each type of user, how many there are, what they do in the system and on which device. These roles become the columns of the permissions matrix in section 6.
| Role | How many | What they do | Device |
|---|---|---|---|
| Call center agent | 12 | Open calls and book a time with the customer | Desktop |
| Dispatcher | 2 | Assign technicians and manage the day's board | Desktop, large screen |
| Field technician | 40 | See today's visits, document work, close calls | Android phone, sometimes with no signal |
| Service manager | 3 | Track exceptions, approve credits, read reports | Desktop |
| Customer | Thousands | Gets texts, tracks the visit, cancels if needed | Own phone, no login |
3. Main flows
What to write: for each flow, who starts it, what triggers it, the steps, the end state, and what happens when something goes wrong. Most specs skip the exceptions, and that is where schedules slip.
Main flow: a service call, end to end
- A customer calls. The agent finds them by phone number or creates a new customer.
- The agent opens a call: fault type, unit, address and urgency.
- The system suggests time slots by area and availability. The agent books one with the customer.
- The customer gets a text with the booking and a tracking link.
- The dispatcher assigns a technician or approves the system's suggestion.
- The technician taps "On my way," and the customer gets an update with an estimated arrival time.
- The technician records the repair, parts and photos, gets the customer's signature and closes the call.
- The system issues an invoice and sends it to the customer.
Exceptions to cover: a part is missing (the call moves to "waiting for part" and a return visit is booked), the customer isn't home, the customer cancels, and a technician calls in sick at 7 a.m. with six visits booked.
4. Screens
What to write: each screen, who uses it, what it lets them do and on which platform. At this stage, describe what the screen must allow. Its design can wait.
| Screen | Users | What they do there | Platform |
|---|---|---|---|
| Call queue | Agent, dispatcher | Search, filter, open a call | Web |
| Customer card | Agent, service manager | See history, units and service contract | Web |
| Dispatch board | Dispatcher | Assign calls to technicians by area and time | Web |
| My day | Technician | Today's visits and navigation to each address | Mobile |
| Close call | Technician | Notes, photos and signature, with or without signal | Mobile |
| Visit tracking | Customer | Status, arrival estimate, cancel | Mobile web, no login |
5. Business rules
What to write: each rule as a condition and a result, with an ID and an example. The ID lets tickets and tests point to the rule. A rule that says "per company policy" leaves someone to guess.
| ID | Rule | Example |
|---|---|---|
| BR-1 | A customer with an active service contract pays no visit fee. Parts are charged at the contract price list | Contract valid to Dec 31, visit on Dec 15: visit fee is 0 |
| BR-2 | A repeat visit for the same fault within 30 days is free and is flagged as a "callback" in the quality report | Unit fixed June 1, fails again June 20: free visit |
| BR-3 | A call closes only with at least one photo and the customer's signature, or a recorded reason for missing them | Customer refuses to sign: technician picks a reason from a fixed list |
| BR-4 | A credit above $150 needs a service manager's approval | A $100 credit: the agent approves it alone |
| BR-5 | An urgent call (no cooling, with a baby, an elderly or a sick person at home) is scheduled the same day, even if the technician's day is full | A call logged at 10 a.m. gets a visit before the end of the day |



