There is a difference between working software and good software. What determines the quality of a software product is the set of requirements.
Requirements are the features that a software application or system delivers on. There are two kinds of requirements:
- functional requirements - these are what the program does.
- non-functional requirements - these dictate the manner in which the program delivers on the functional requirements.
Functional requirements
Our primary goal in making software is to ensure that it does what we promised that it would do. Functional requirements are the features that, when absent, will definitely be noticed by the user. If we fail to fulfill these requirements then our software fails to meet even the bare minimum of what is expected.
A program not delivering on its functional requirements is like a chair with only one pair of legs.
Non-functional Requirements
These separate the sheep from the goats. Non-functional requirements are the features that determine how your software is perceived by the users. These are the features that, when present, make your users go “Hey I didn’t know apps could be so good!”.
A program not delivering on its non-functional requirements is like having the aforementioned chair not having a cushion. Of course, the customer can sit on it but it isn’t exactly a comfortable experience.