Product Discovery

Step one in building your software project is to understand its requirements. This process is called Product Discovery.

Functional Requirement: A functional requirement refers to a specific task that the software needs to perform.

For example, here is a functional requirement for TinyURL: The app should generate a shorter and unique alias for a given (long) URL.

In addition to functional requirements, you should also consider non-functional requirements.

Non-Functional Requirement: Non-functional requirements define how a system should behave, whereas functional requirements define what the system should do.

For example, here is a non-functional requirement for TinyURL: The system should be highly available. If the service is down, even briefly, all URL redirections will fail.

During product discovery, it is important to engage with all stakeholders and involve them in the process of defining software requirements.

Stakeholders: Developers, investors, customers, managers, and any individual with a specific interest in and knowledge of the software product to be specified.

When multiple people are involved in a software project, they often have different ideas about how the end product should be. The main objective of product discovery is to expand on and consolidate these different visions into one unified vision. This is achieved through extensive discussions, questioning, sketching, and involving all parties, including management, developers, and customers.

Product Discovery leads to the creation of a "software requirements specification."

Software Requirements Specification

A software requirements specification involves defining the intended functionality of the software and any potential constraints on its operation.

Software companies often have a template document for software specifications. This specification is one of the most important documents for connecting stakeholders. In this course, we will provide you with a template for it.

It is important to remember that a software specification is an abstraction of what the system will ultimately become. As you start implementing the system and delve into the lower-level details, you may encounter issues with the initial specification. That is normal; there will be challenges that you couldn't have predicted in advance!

Appendix: Requirement Specification Template

Please use this template to document your proposed software project requirements.

Examples: CourseReVU App, Open-Piazza App

Problem Statement

A brief description of the problem that the software project aims to solve and why it is needed.

Proposed Solution

A brief description of how the proposed software solution will address the problem stated above.

Potential Clients

Identification of the individuals or groups who are affected by the problem and would benefit from the proposed solution. These are the potential users of the software.

Functional Requirements

A list of the essential (must-have) and non-essential (nice-to-have) requirements that the software needs to fulfill in order to solve the stated problem.

Software Architecture & Technology Stack

Description of the type of application (web, desktop, mobile, etc.) and any specific software architecture that will be followed. Mention the programming languages, frameworks, databases, and other technologies that will be used to develop and deploy the software.

Similar Existing Apps

A list of similar applications to the one being developed, highlighting how the proposed app is different from the existing ones.