Non-Functional Requirements In Software Development

Users typically have expectations about how well the software applications should perform in terms of performance level, ease of use, availability, how fast its functionalities execute, how frequently it is likely to fail, how secure it is against unauthorized access, and how successfully it handles unexpected situations if they may occur.

These features or properties of the system are referred to as quality attributes of Non-functional Requirements or Quality of Service Requirements. So, let’s discuss what is a Non-Functional Requirement (NFR) and the main types of non-functional requirements.

What are non-functional requirements in Software Development?

Requirements analysis is a critical process that determines the success of a system or software development project. Functional and non-functional requirements are the two main types of requirements. Both describe specific features that a product must have in order to meet the needs of stakeholders and the business itself.

Performance and Scalability

Performance and scalability are the two most important non-functional requirements that no system can do without. Since they go together, we have grouped them into one section.

Performance

This requirement is perhaps one of the most common NFRs and states that all systems must be designed and built to at least an acceptable level of performance.

When looking at areas such as latency, load, and resource usage, performance can be degraded due to numerous reasons such as too many API calls, poor caching practices, and heavily loaded third-party services. Therefore, it can be a good idea to pay attention to these areas when trying to ensure consistently high performance, including using separate task queues to ensure end-user experience is not impacted.

For instance: The web page displaying customer data should load in five seconds or less if the internet connection is 30 Mbps or faster.

Scalability

Scalability refers to the extent to which the solution can evolve to meet the increasing workload. The increased workload can be related to the number of user requests, events, data, network traffic, and/or other factors.

The system must be scalable, which may mean expanding the hardware/IT infrastructure resources with faster processors, additional servers, additional storage, improved network capacity, or using software-specific approaches such as code and performance optimization, data compression, and other similar techniques.

For instance: The system should be able to handle an additional load of up to 5,000 users per month over the next six months without any noticeable drop in performance.

Portability and compatibility

Portability and compatibility are two more important factors in the world of non-functional requirements.

Portability

The portability of a system refers to how well it performs in one environment versus another. It typically includes hardware, software, or other platform specifications. It determines the extent to which operations performed through one platform are run on another. In addition, it specifies how well system elements can be used and interact from two distinct environments.

For instance: A user may purchase a new cell phone model and download a mobile application that was previously installed on their previous device. If the application performs as well on the new phone as it did on the old one, it is highly portable. To improve portability, you can design your applications as a software developer to work properly on multiple devices.

Compatibility

A system's capacity refers to the amount of storage it provides. Some applications allow users to customize and save settings based on their preferences.

For instance: If you set your cell phone to vibrate when receiving incoming calls, the device will usually remember the change. A device with a large storage capacity allows a user to customize more settings or store large files such as lengthy documents or videos.

Portability Non-functional requirements are typically based on preliminary market research, field research activities, or analytics reports on the software and devices owned by the target audience. It is quite simple to define compatibility and portability when working in a corporate environment and the software will be accessed through a documented list of devices and operating systems.

Reliability, Maintainability, Availability

While these three types of requirements are typically documented separately, we have grouped them together in one section because they approach the same problem from different perspectives. Another consideration of these requirements is that they are extremely difficult to express in terms of calculation. Furthermore, many system providers do not document them at all. Let's see

Reliability

Highly dependable technology continues to function with the same or similar efficiency after extended use. Here are three methods for determining a device's dependability:
  • Percentage of the probability of failure: To determine a system's reliability, look at the percentage of the probability of failure, also known as the failure rate. If the percentage is higher, the system is more likely to work normally after extensive use.
  • The number of critical failures: To assess a system's reliability, keep track of the number of critical failures it encounters during testing. If the number of failures is low, the system is working properly.
  • Time Between Critical Failures: Tracking the time between critical failures can help you understand the reliability of your system. When critical faults occur sporadically, it means that the system is operating normally most of the time.
For instance: The database upgrade process should be designed so that if one of the upgrades fails, all associated upgrades are rolled back

Maintainability

A maintainable system must be inexpensive to maintain over its expected lifetime and may include additional requirements such as convertibility, extensibility, and interoperability.

In addition to several technical approaches to ensure maintainabilities, such as high cohesion/loss coupling, SOLID principles, use of standard API formats and clear document interfaces, it is important to monitor code and architecture metrics to see where they may arise problems and improvements are needed.

For instance: The system should be extensible to add new product categories, where some or all of the current functionality can be extended to the newly added product category.

Availability

Availability is a broad requirement type that includes additional NFRs/QARs such as reliability and resiliency. This set of NFRs states that the system should be available for use as much as possible and that downtime should be kept to a minimum
Aspects of availability addressed during the investigation include (but are not limited to) periods when availability is essential to achieve business objectives, the effects of system downtime, scheduled maintenance periods, and notifications during system downtime.

For instance: System availability must be at least 99% on weekdays from 9:00 am to 6:30 pm Pacific Time.

Security

When processing sensitive information such as personal data or financial data, security includes other NFRs such as confidentiality and authentication to ensure that this information is protected by default.

Many software engineering tactics can be used to protect your data, such as encrypted integration points, encryption at rest, and clean intrusion, and can be integrated into key processes through additional protocols and regular vulnerability/opportunity reviews learning.

Ultimately, what's more important is that you understand your legal and compliance needs upfront (in collaboration with an external expert if needed) and communicate them clearly to your development team so they can work together to put in place any necessary actions to maintain the required security levels.

For instance: Only users with administrator rights can create new customer accounts and assign them data access rights.

Localization

The location attribute defines how well a system or element of it fits into the context of the prospective local market. A localized app has features that correspond to the geographic location of its users, including things like:
  • Languages
  • Coins
  • Measure, such as pounds vs kilograms
  • Time zones
For instance: The date format must be a month.day.year.

Usability

Usable systems are easy to use for as many people as possible, whether they are end users of a website or administrators and content editors working with a backend system. Accessibility is another crucial element when considering system usability, especially if your target audience has specific needs or a low level of digital literacy.

Investing in user experience (UX) activities is essential to provide a usable and accessible system and to define a minimum level of accessibility. Tactics such as creating an interactive style guide, prototyping solutions, and performing usability testing can further address these needs.

For instance: 99% of metadata entry users who have been trained for 1 hour in the use of the metadata management system should be able to successfully complete the product form in one attempt.

Non-functional Requirements Document

There is no standardized document that is developed specifically for non-functional requirements. However, this doesn’t mean that you can’t build non-functional requirement-specific documentation within your own process. Instead, non-functional requirements are typically included within a larger document type.

Several requirements documents exist which are built to highlight specific details of a project. For example, documents can be built for business requirements (BRD), technical requirements (TRD), and numerous other aspects of requirements management.

In relation to the documentation process, non-functional requirements are usually included within functional requirements documents (FRD), product requirements documents (PRD), and software requirements specifications (SRS) documents. Here are key to remember when setting and documenting the requirements for software quality.
  • Make them measurable and testable.
  • Do not combine two requirements into one.
  • Link NFR with business objectives.
  • Consider third-party limitations.
  • Consider architectural limitations.
  • Look for existing standards and guides.