Software Requirement Specification
A (functional) requirement is a single thing that the software has to do. For example: "Send a confirmation email when a new user signs up" is a functional requirement.
Requirement specification involves defining the intended functionality of the software and potential constraints on its operation.
Product Discovery
Step one in building your software project is to understand what its requirements are. This process is called Product Discovery.
Software projects involving several people start out with very different impressions on how the end product will need to be. Your primary goal during product discovery is to expand on and unify those visions into one cohesive vision. This happens through extensive discussing, questioning, sketching, $\dots$ among all parties involved: management, developers, customers, etc.
The specification document
The specification of the software system is one of the most important documents to connect the stakeholders.
Stakeholders
Developers, investors, customers, managers, $\dots$, any person with a specific interest in and knowledge of the software product to be specified.
Software companies often have a template document for software specification. In this course, we will give you a template that contains the following sections:
-
Problem Statement: A few sentences that describe the problem you are trying to solve. In other words, state why this software project is needed.
-
Potential Clients: Identify those who are affected by this problem and would benefit from the proposed solution (i.e. the potential users of the software you are going to build).
-
Proposed Solution: A few sentences that describe how your proposed software solution will solve the problem stated above.
-
Functional Requirements: List the requirements that software needs to have in order to solve the problem stated above. It is useful to group the requirements into those that are essential (must-have), and those which are non-essential (but nice-to-have).
-
Software Architecture & Technology Stack: Will this be a Web/desktop/mobile (all, or some other kind of) application? Would it conform to the Client-Server software architecture? What programming languages, frameworks, database, $\dots$ will be used to develop and deploy the software?
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.