The Software Engineering discipline covers a variety of processes and techniques used to design, develop and maintain a piece of software.
The Design phase defines Functional Requirements (FRs), Non-Functional Requirements (NFRs) and sets the direction of development. At the end of this phase, Software Engineers can make an estimation of development time and costs.
Non-Functional Requirements (NFRs) are usually expressed as adjectives, such as portable, performable, maintainable and flexible. NFRs can be appointed by the organisation or external entities, such as clients and suppliers.
Functional Requirements (FRs) are usually expressed as verbs or product features, i.e., the network and server capacity and functionality, actions that users can perform in the application and how it works. FRs are mandatory and captured as Use Cases.