Does it work? How does it work?

Functional and Non-functional requirements are different aspects that are both needed for a project to work well. They describe stuff that the software should do and how to do it. Different programs will not only have different requirements, they will vary the amount of focus put into each of these requirement categories.

Functional requirements are those that specify what the program will do. These are specific goals that the final product has to do. Functional requirements tend to be very specific to the program being developed. In many cases, these are the main aspect a consumer will care for. Functional requirements are what makes a program itself. Programs with the same or similar are considered to achieve the same thing.

Non-functional requirements are, according to Lawrence Chung from UT Dallas, “a software requirement that describes not what the software will do, but how the software will do it, for example, software performance requirements, software external interface requirements, design constraints, and software quality attributes”. He also mentions they are much harder to test.

Some examples of software with similar functional requirements are Windows and Linux distributions. As OS’es they try to achieve largely the same thing, including allowing users to run other pieces of software. In this case, even some non-functional requirements are the same, like achieving good performance. Still, some non-functional requirements differ greatly. Being open source is a clear example.