Skip to Main Content
Back to blog

// GUIDE · REQUIREMENTS · BEFORE THE QUOTE

An app requirements document: a filled-in template that shows what to define

Not a feature list. A document a developer can price and a manager can sign off.

  • 12 min read
  • By OneZero

// THE SHORT ANSWER

In one paragraph

A good app requirements document answers six questions: who the users are and what each one may do, what the main flow is from start to finish, which states every entity has and who moves it between them, what is in the first version and what is explicitly out, how every screen looks when it is empty or when something fails, and what has to be true for a requirement to count as done. This page contains a filled-in example for a field-service app — an illustrative scenario, not a client project — and a downloadable template with the same sections left blank. A document like this is what makes quotes comparable.

// TL;DR

The short version — what the document must contain

SectionWhat it answersWhy it changes the quote
Goal and measureWhich operational problem is solved and how you'll know it workedDecides what is essential and what can wait
Users and permissionsEvery role, what it needs and what it can seeEach extra role = more screens, permissions and tests
Flow and statesSteps from start to finish and who moves between statesThe basis for the data model, notifications and reports
Scope and exclusionsWhat is in version one and what is explicitly notPrevents quotes that price different products
Screens and edge statesWhat's on every screen, including empty, error and no-permissionMost development time goes into the edge states
Acceptance criteriaWhen a requirement counts as done, incl. network failure and double-tapWhat testing, delivery and payment milestones rest on

Requirements, specification and design: the difference, and who each one is for

The three terms get mixed up in vendor conversations, so it helps to separate them by the question each deliverable answers and by who is supposed to read it.

DeliverableAnswersWho reads itWhen it's enough
Requirements documentWhat the product must enable, for whom, and what counts as successBusiness owner, product owner, the vendor pricing itFor first quotes and deciding whether to proceed to a full spec
SpecificationHow every screen, flow, field and exception behavesDesigner, developer, testerBefore development; usually written together with the chosen vendor
UX/UI designHow it looks and feels, and the order of actions on screenDeveloper, product manager, test usersAfter requirements and flows are settled
The example on this page is a first-version requirements document — the stage that lets you request quotes, not a full technical spec.

The example product: a field-service app

A (fictional) service company wants to move ticket intake, technician scheduling, status updates and visit summaries into one system. Today these happen over phone calls, messages and separate files. The goal of version one: every ticket has an owner and a clear status, with nobody chasing anyone.

Proposed product measures

Measures go into the document so you can later tell whether the product did its job — not to promise an outcome. In the example: share of tickets that get scheduled, time to first update, share of visits with a complete summary, and the number of updates still happening outside the system. There is no baseline and no improvement claim here — those are measured only after launch.

Users and permissions

This table is usually the section with the biggest effect on the quote: every additional role brings screens, permissions, tests and sometimes a separate app.

RoleWhat they needAccess in version one
Service managerSee workload, assign work, review closuresAll company tickets, scheduling and basic reports
CoordinatorOpen and coordinate ticketsCreate, update visit details, schedule within their permission
TechnicianKnow where to go and report what was doneOnly tickets assigned to them; status updates and summaries
System adminManage users and settingsUsers, roles and system values
The end customer is not a user in this version. A customer portal is a future extension that needs its own document — exactly the kind of decision that prevents arguments over the quote.

The main flow

  1. A coordinator opens a ticket with customer, service address, fault type and description.
  2. The service manager assigns a technician and a visit window.
  3. The technician sees their ticket list and confirms they received the job.
  4. The technician opens the ticket, updates its status and documents the work.
  5. The technician submits a summary with the outcome and any follow-up.
  6. The service manager reviews and closes, or sends it back for completion.

Ticket states

new → scheduled → accepted → in_progress → pending_review → closed. Exceptional states: cancelled, and waiting_parts when a part is missing. Transitions depend on role: a technician does not close a ticket, a coordinator does not approve a summary. Cancelling never deletes history. This state list is what the developer turns into a data model, notifications and reports — which is why it's worth more than ten lines of "the system shall allow".

Scope of version one

  • Sign-in, access recovery and user management in a way that fits the chosen infrastructure.
  • Ticket list with search by ticket number and filters by status, technician and date.
  • Create and edit a ticket, with required fields separated from optional ones.
  • Assign a technician and a visit date.
  • A mobile view for the technician with the job details and only the actions allowed to them.
  • Status updates, work notes and visit photos — where needed and permitted.
  • Completion summary and send-back for completion.
  • An operational history of key changes (who, what, when).
  • Notification on assignment and on significant changes, through one agreed channel.
  • A basic admin screen and data export for authorised users.

Out of initial scope

Billing and payments, a full inventory system, automatic routing, a call centre, an end-customer app, full offline operation, AI-based diagnosis, automatic integration with every ERP. Each needs its own decision and pricing. The exclusions section is often the most useful one in the document: it prevents three quotes from pricing three different products.

Example screens — including empty and failure states

A screen described only in its "everything works" state is half a screen. In practice most development and testing time goes to empty states, errors and missing permissions — so they appear here from the start.

ScreenMain contentActionsEmpty or failure state
My tickets (technician)Number, general location, visit window and statusOpen, filter, limited updateNo jobs; loading failed with retry
Ticket detailsNeeded service info, contact details by permissionConfirm receipt, start work, summariseNo permission; ticket reassigned while viewing
Visit summaryOutcome, work done, follow-up neededSave draft, submit for reviewMissing required field; upload failure without losing the text
Ticket management (manager)List, scheduling and statusOpen, assign, approve closureFilter with no results; conflicting updates by two users

A complete requirement: REQ-01 submit visit summary

This is what one requirement looks like when it is written all the way through. Notice that most lines deal with what happens when things don't go to plan — that is exactly what separates a realistic quote from one that grows mid-project.

“As a technician assigned to a ticket, I want to submit a visit summary so that the service manager can approve closure.”

— REQ-01 — the requirement statement

Preconditions: the user is signed in, the ticket is assigned to them, and the state allows reporting. The summary includes an outcome and work notes; a photo is a field conditional on the spec decision, not automatically required.

Acceptance criteria

  1. After a successful save the data exists on the server and the ticket moves to pending_review.
  2. Double-tapping "submit" does not create two summaries or two notifications.
  3. If the network fails there is no success message, and the entered text stays in the form for a retry.
  4. Another technician cannot submit or read the summary by changing an id in the URL or the request.
  5. If the assignment changed while the form was open, the server re-checks permission and returns a clear explanation.
  6. The service manager sees who submitted and when, can approve or send back, and the event is recorded in the history.
  7. No summary text, customer address or contact details appear in analytics events.

REQ-02 reassignment (in brief)

A service manager can replace the technician before closure. The change is recorded with user and time. The previous technician loses active access and the new one receives the job according to the defined policy. A screen left open by the previous user does not grant them permission on the next request.

Boundaries that must be written down

Network and data

This version requires a network connection for server actions. A local draft can be kept, but full offline operation must not be promised without designing sync, conflicts, expiry and protection on shared devices. Every file has allowed types and sizes, access permissions and a retention policy. Personal data is not written to general logs and not sent to analytics tools.

Integrations and dependencies

Before pricing, find out: is there a CRM or ERP, do interfaces and documentation exist, is there a test environment, who holds the credentials, what is the quality of customer data, and who approves changes. In version one you can choose manual entry or a defined import, and leave continuous integration for a later phase. Third-party services and connection details are not considered available until verified.

The delivery package

Code and credentials per the agreement, setup instructions, role documentation, dependency list, test scenarios, release process, backup and restore, and a list of items left for later. Define who pays for infrastructure and accounts, who operates them, and what maintenance covers after launch.

Questions left open for the specification

A good requirements document doesn't pretend everything is known. It marks what still needs deciding — which is exactly what lets a vendor price with visible assumptions instead of guessing.

  • How many companies or operating units are included, and is data separation required between them?
  • Is a store app required, or can we start with a mobile-friendly web interface?
  • Which devices and network conditions do technicians actually work in?
  • Which summary fields are really needed, who approves, and what is the correction process?
  • What data exists today and how is it migrated?
  • What support is required and how are emergencies handled?

How to use the document to get comparable quotes

  1. Fill in the goal, the users and the exclusions first. These three sections move the quote the most, and need no technical knowledge.
  2. Write the main flow as a numbered list and the states as a list. If you're unsure about a state, write an open question instead of guessing.
  3. For every screen add one line on its empty state and one on its failure state. That's enough for a serious vendor to price correctly.
  4. Write one requirement all the way through, like REQ-01, and ask every vendor to respond to it. The difference in answers will tell you more than the price.
  5. Send the same document to every vendor and ask each quote to state what's included, what isn't, and which assumptions were made about the open questions.

What this document does not do: it does not replace a full specification with a designer and developer, it does not decide architecture, and it does not price itself. Once the quotes are in, the next step is usually UX specification and interface design with the chosen vendor — where requirements become screens, flows and a spec you can build from. What our specification and design phase includes

And if your next question is what this should cost — our app development cost guide breaks the cost drivers down along exactly these sections: number of roles, backend, integrations, testing and uncertainty. How much app development costs in Israel in 2026

// FAQ

Frequently asked questions

  • What's the difference between a requirements document and a specification?+
    A requirements document says what the product must enable, for whom and what counts as success — enough to request first quotes. A specification describes how every screen, field and exception behaves, and is usually written with the chosen vendor before development.
  • How detailed does the document need to be to get a quote?+
    Enough for a vendor to count roles, screens, states and integrations and understand what is excluded. The example on this page is roughly the right level: ten sections, one requirement written through, and a list of open questions. If a section is missing, say so rather than leaving it blank.
  • Can the template be used for a web system or an internal tool, not just an app?+
    Yes. The sections — users, flow, states, scope, screens and acceptance criteria — are the same. What changes is whether the product lives in the app stores, the browser or both, and that is one of the open questions the template asks you to answer.
  • The field-service example — is that a project you delivered?+
    No. It is an illustrative scenario written specifically to explain the structure of a requirements document. There is no client, live system or outcome data behind it. Our real projects are on the work page, with a description of what we actually built.
  • What happens after the requirements document exists?+
    Usually one of two things: either you collect first quotes and choose a vendor, or you run a short specification and design phase to close the open questions before committing to development. In a good document, the open-questions section is what decides which path fits.

Last reviewed:

By OneZero

// LET'S TALK

Building an MVP, SaaS, marketplace or AI-mobile product?

Make the architecture decision before you pick a framework by hype — it affects hiring, speed, burn, maintenance, scalability and future rewrites.