What is it?

In Software Engineering, requirements are descriptions of functionalities of the system, how it’s offered and its restrictions. A well established set of requirements describes the user’s needs and all business logic that should be implemented into the system.


Types of requirements

Requirements can be divided into two types:

  • Functional requirements

    Descriptions of the services that the system must offer, how it should act given some inputs, and so on. It also states what the system cannot do. It’s a high level overview.

  • Non-functional requirements

    Restrictions and descriptions of how the system should attain its functional requirements. Normally, it’s more specific to a use-case or component and contains specifications to follow.


Gathering requirements

Requirements can be gathered through interviews with the end user, where the development team can question the user about its use cases, objectives, and possible scenarios that could happen. Another great way to gather requirements is to immerse a member of the development team into the routine of the user. This way, the developer can absorb little details that could otherwise be unknown to the user.


Writing requirements

After gathered, all requirements can be documented using multiple methods, like natural language, templates (like an Excel spreadsheet), graphical notation (like diagrams and UML), and mathematical notation.