For the most part, I am able to distinguish between functional and non-functional requirements, but at times it is not clear for me.

For example, the following are non-functional but they seem functional to me:

The software must use SSL encryption for transmissions


The software must store the configurations in an XML file

Could you please help me with a rule of thumb that helps me make the distinction? Many thanks!

  • 2
    Who says that these aren't functional requirements?
    – Neil
    Commented Feb 15, 2019 at 7:46
  • 3
    These could be argued either way, and it's not generally necessary to categorize all requirements as functional or non-functional. But given that nonfunctional requirements typically address quality attributes, these requirements seem more functional as they require a capability and not a quality of the system.
    – amon
    Commented Feb 15, 2019 at 14:06
  • 1
    Is there some reason to differentiate other than academic purposes?
    – Dunk
    Commented Feb 15, 2019 at 23:05

2 Answers 2


Functional requirements describe the functionality that a system must offer to its users. All the other requirements are non-functional requirements.

With that in mind, you can ask yourself, if, for example, the requirement for storing configurations in an XML file is not satisfied (for example, the configurations are stored in a different format, like an .ini file), is there any functionality that is not available to any user of the system. If the answer to that question is yes, then you are dealing with a functional requirement. Otherwise, you are dealing with a non-functional requirement.
In this consideration, any person or external system interacting with the system you are building is a user.

  • 1
    Maybe the user wants to edit these configuration files. Maybe he has special tools for editing and validating XML but not .ini or JSON. Also, I don't believe functional requirements are always related to user needs. they can also be related to other systems your software needs to interact with. Commented Feb 17, 2019 at 10:24
  • 1
    @FrankPuffer, if a user loses the possibility to edit the configuration files with company-standard tool X, then the requirement to have the configuration files in XML is a functional requirement. Anyone or anything interacting with the system is a user in this case. That includes administrators and other software systems. Commented Feb 17, 2019 at 10:28

A common heuristic is if they end in -ility: Availability, flexibility, changeability, maintainability, adaptability etc.,

It’s a “non-functional” requirement (NFRs) - your system will still function without it but not as effectively.

Think scalability: Twitter still provides functionality if it’s running on a single machine but it can’t effectively cater that to billions of tweets.

NFRs are typically architectural requirements (rule of thumb) but do not directly support the “functional” requirements per se.

In theory you can deliver a piece of software without regards to NFRs but it’ll probably be of poor quality.

Functional: “how” NFRs: “how well

  • I disagree that NFR always increase the quality of the product. E.g.: i've had an NFR to use a file-based H2 instead of an Oracle DB simply because the customers Oracle Admin was in another departement. That H2DB didn't scale...
    – marstato
    Commented Feb 18, 2019 at 9:11
  • They don’t always. Just a rule of thumb. However, library swapping or technology changing are more “horizontally” impacting i.e. impacting all parts of the application. At that instant they’re probably NFRs in isolation. However, when you selected H2 initially it was never called out singly but was used to “support” implementation of requirements. You may mark these as “technology requirements”. But NFRs most commonly map to quality ones. Look up requirement “types and hierarchies” to see what’s clumped where. Whether you wish to clump the Oracle thing as NFRs is nitpicking IMHO
    – PhD
    Commented Feb 18, 2019 at 15:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.