Wordspecs

Blog

Product spec template: what to include, with an example

Private beta. Access is by waitlist, and paid plans open when the beta ends. Join the waitlist.

A product spec is useful when people can find what they need in it quickly. A template makes that dependable. Below are the sections most teams need and what belongs in each, followed by a complete worked example for a fictional feature.

Header

Product, owner, status and version. The owner is a role or team, such as "Billing product manager", so the spec still points somewhere after a person changes jobs. Status is one of Draft, In review or Approved.

Summary

Two or three sentences: what you are building and what changes for the user. If someone reads only this, they should still know what the spec is about and whether it concerns them.

Problem

What is going wrong today, and for whom. Describe the situation the user is in, with specifics such as the screen they use and the step where it breaks. Leave the solution out of this section.

Goals and non-goals

Goals say what success looks like, in terms a user would recognize. Non-goals say what you are deliberately not doing in this spec. Writing non-goals early prevents most scope arguments later.

Requirements

A table with an ID, one requirement per row and a priority. A common scale is Must, Should and Could. Must means the release does not ship without it. Should means it goes in unless there is a clear reason not to. Could means it goes in if the work fits. Each row should be something a tester can mark as pass or fail.

Success metrics

Measurable and time-bound. A good metric has a target, a time frame counted from release, and a named source. If you cannot measure it, say how you will find out. "Users like it" is not a metric.

Open questions

Things you need an answer to before or during the build, each with an owner. A visible list is better than hidden doubts.

Release plan

How the feature reaches users: internal use, a limited beta, general availability. Each stage needs a condition for moving on, written so you can check it.

Worked example: saved searches

The example below fills in the template for a fictional feature. Tallybird, the invoicing app, is made up, and so are the numbers, targets and roles.

Summary. Saved searches let a user store a set of invoice list filters under a name, such as "Overdue, Client North", and reopen it from the sidebar in one click. Results are fetched each time a saved search is opened, so invoices created after saving show up. Each user can keep up to 20 saved searches.

Problem. Users who check overdue invoices each week rebuild the same three filters (status, client and date range) every time. Nothing in the invoice list remembers them. A user who leaves out one filter sees a different list without noticing.

Goals.

Non-goals.

Requirements. Each row is one decision.

IDRequirementPriority
SRCH-1A user can save the current invoice list filters under a name of 1 to 40 characters.Must
SRCH-2A user can open any saved search from the sidebar with one click, and the invoice list shows its saved filters applied.Must
SRCH-3Results for a saved search are fetched when it is opened, so an invoice created after saving appears in the results.Must
SRCH-4A user can rename or delete their own saved searches. Deleting asks for confirmation in a dialog with a Delete button.Must
SRCH-5A user can keep up to 20 saved searches. Saving a 21st shows the message "You have 20 saved searches. Delete one to save another." and saves nothing.Must
SRCH-6A saved search is visible only to the user who created it. A request for another user's saved search returns a 404 response.Must
SRCH-7A user can pin up to 3 saved searches so they sort above the others in the sidebar. A fourth pin shows a message and does not pin.Should
SRCH-8If a saved search filters on a client that has been archived, the search still opens, shows a notice naming the archived client, and applies its other filters.Could

Success metrics.

Open questions.

Release plan.

Vague vs testable

A requirement is testable when a tester can run a check and get a clear pass or fail.

Vague requirementTestable rewrite
Saved searches should load quickly.The first 50 results appear within 2 seconds at the 95th percentile for an account with 10,000 invoices, measured over 20 runs on the staging test account.
Users should be able to manage their searches.A user can rename or delete any saved search they own from its sidebar menu in 2 clicks or fewer, and a deleted search is gone after a page reload.
The filter labels should be easy to understand.Each applied filter shows as a label in the form "Field: value", such as "Status: Overdue". A tester can match every label to a field name in the filter list of the spec.
Other users' data should stay private.A request for a saved search that belongs to another user returns a 404 response, checked by an automated test on each saved search endpoint.

How much template to use

Match the template to the size of the change.

Some parts are never skipped, whatever the size: the owner and version in the header, the non-goals, a priority on every requirement, and an owner on every open question. Those are the parts reviewers ask about first.

The SaaS product spec sample on the home page follows this layout with a fictional "Snooze and Reminders" feature. In Wordspecs, the same sections are a template, so every spec your team writes has them in the same order.

Related: saving your own spec-sheet templates.

Join the waitlist