Software requirement specification

A requirement is a single thing that the software has to do.1

Requirement specification involves defining the intended functionality of the software and potential constraints on its operation.


Step one in building your software project is to understand what the requirements are.
This phase is also called Product Discovery.

The specification document

Make a copy of a template for project requirement specification.

  • The specification of the software system is one of the most important documents to connect the customer and the engineering team.

  • When you're capturing the requirements for a software system, you want to make sure that you write down all the requirements (not missing any functionality that the customer actually cared about). Moreover, make sure the requirements are consistent with one another, jotted down precisely and as concise as possible.

  • It is important to keep in mind that a software specification is an abstraction of what the system will end up being at the end. When you start implementing the system and get down to the lower level details, you'll realize that there are problems with the initial specification. That's okay; in fact there are often things that you couldn't actually have figured out in advance.

Best Practices

  • Software projects involving several people start out with very different impressions on how the app should be structured. Your primary goal is to expand on and unify those visions into one cohesive vision.

  • This happens through extensive discussing, questioning, sketching, ... All parties involved need to be at the table: management, developers, customers, ...

  1. In systems engineering and requirements engineering, functional requirements define what a system is supposed to do and non-functional requirements define how a system is supposed to be. In OOSE, requirement means functional requirement.