Skip to content
On this page

Product Discovery

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

Functional Requirement

A (functional) requirement is a single thing that the software has to do.

For example, here is a functional requirement for TinyURL: Given a URL, the app should generate a shorter and unique alias of it.

You may also want to look at similar applications[1] to get a better idea of the core requirements and perhaps some ideas for extra "nice-to-have" features that might be missing from existing applications.

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

Non-Functional Requirement

Non-functional requirements define how a system is supposed to be whereas functional requirements define what a system is supposed to 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 the URL redirections will start failing.

If you are pursuing the "entrepreneur track," product discovery will be a harder task. Software projects involving several people start with very different impressions of 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, ... among all parties involved: management, developers, customers, etc.

Stakeholders

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

During product discovery, you must speak with all the stakeholders and involve them in defining the software requirements.

INFO

Product Discovery results in "software requirement specification."

Software Requirement Specification

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

Software companies often have a template document for software specifications. The specification of the software system is one of the most important documents to connect the stakeholders. In this course, we will give you a template for it.

It is important to keep in mind that a software specification is an abstraction of what the system will end up being in 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; there will be challenges that you couldn't have anticipated in advance!


  1. Here are some similar apps to TinyURL: bit.ly, ow.ly, short.io. ↩︎

Released under the MIT License.