Non-Functional Requirements

Non-Functional Requirements

Brief Introduction

Let’s say you are building a website that allows users to book flight tickets. The requirements for the functioning of your website are simple: The user should be able to search for available flights with appropriate filters, select any flight, and make payments to book the flight.

While these are enough requirements for the system to function, you should also care about user experience. Users who visit your website expect certain things when browsing today’s modern websites. For example: the user should be able to load the page in under 2 seconds. If your website takes more than 10 seconds to load, then even though your website will load at 10.1 seconds, the user will get frustrated and move away to other websites.

Similarly, making payments to book the flight is a functional requirement of the system. However, the payment should be secured enough that it does not leak the user’s bank account details or other sensitive data is a non-functional requirement of the system.

While Functional requirements tell what a system is supposed to do, Non-functional Requirements define how the system should operate including things like speed, security, reliability, data integrity, etc.

Another example to consider is sending an email after a successful booking is a functional requirement whereas sending an email within 1 minute of a successful booking provides a good customer experience and thus it’s a non-functional requirement.


(Sponsored)

A big shout out to the sponsor for this edition who help to run this newsletter for free ?? Multiplayer auto-documents your system, from the high-level logical architecture down to the individual components, APIs, dependencies, and environments. Perfect for teams who want to speed up their workflows and consolidate their technical assets.

Types of Non-functional Requirements

To put it into a more formalized approach to analyzing non-functional requirements, here’s a short list with a detailed description:

(FR = Functional Requirement, NFR = Non-functional Requirement)

  1. Performance: We are in the 21st century. Today’s users have very short attention spans. Thanks to Reels and Shorts. Our websites or apps should have the best optimizations possible so that they load very quickly and do not cause frustration. Thus, loading the website is an FR while loading it in under 2 seconds is an NFR.
  2. Scalability: If you’re working on fulfilling user needs, your product will get popular and through different channels, your growth is bound to happen. The scalability aspect considers how much increase in the number of users can be handled comfortably before degrading the performance of the website/app.
  3. Reliability: If you are handling a decent big enough system, there’s a good chance that you will have a distributed system i.e. consisting of multiple nodes because you cannot store or serve everything from a single node. Due to any reason if some of your data nodes can’t talk or replicate data to the other, your system should behave as expected which means it should be fault tolerant. The system should be reliable in a way that the data would still be consistent before and after the partition between nodes.
  4. Security: No one in the world is completely safe from digital hackers around the world. Even Big tech firms get data leak outages where the user’s privacy gets compromised. Our systems should use all the latest protocols like Firewalls, and the latest HTTP protocol to avoid breaching techniques like DDoS attacks, SQL injection, etc. The user’s data security is paramount, something that the system should operate on, and thus it’s a non-functional requirement.

Some important NFRs sketched using Multiplayer

There’s a whole list of other Non-functional requirements like usability of the app/website, compliance with GDPR rules for Europe, etc. I would keep them out of the scope of our discussion for now as they are a little bit more specific.

Why discussing Non-functional requirements while designing a system is important?

Primarily because of two important reasons:

  1. User-Satisfaction: Remember, user experience is always the topmost priority for any product. There are a lot of things under the non-functional requirements umbrella that directly lead to user satisfaction like less website load time, smooth transitions for good UX, fast payments, etc. If user satisfaction is high, word of mouth does its job and your product goes viral.
  2. Cost-effectiveness: When you think about non-functional requirements, you think about what are the expectations of the user. When you think in that direction, you keep yourself away from unimportant features, make less or minimal resource investments in those areas, and think about how to provide the best user satisfaction at the least cost possible. All these contribute towards good profitability of the company.

Case Study: Video Streaming platform

Let’s say you think about designing a video streaming platform. The following will be considered as the non-functional requirements of the platform:

  1. If the user bandwidth is degrading, then the video platform should automatically change the quality of the video so that the video does not get stopped. The ability to play the video should always hold priority compared to playing the video in high quality.
  2. If there is any data center outage or something similar, the users should still be able to find and play the video i.e. the system should be fault tolerant. We should probably consider solutions like automatic failover to support fault tolerance.
  3. The video platform should be highly available. There should be no downtime for the users coming to the website. Load balancing across multiple servers is a popular way to achieve high availability.
  4. The platform should be able to support 10,000 concurrent users with video playing latency of less than 5 seconds.
  5. The player on the platform should provide seamless playback and no interruptions while the video is being played. We can also show how much video is buffered to set the right user expectations.
  6. The video platform should recommend good videos based on the user’s history to drive more user engagement.
  7. The video platform should use geo-based servers like CDN(s) to deliver high-quality video to the user’s device with less latency.

By addressing these NFRs, we will be able to build a streaming platform that delivers a high-quality video streaming experience.

Comparison between Functional and Non-Functional requirements

At last, I would like to put in some examples for a clear distinction between functional requirements and non-functional requirements.

FR vs NFR sketched using Multiplayer



That’s it, folks for this edition of the newsletter. Hope you liked this edition. I wanted to explore more around Semantic Search but will reserve that for the future editions.

Please consider liking ?? and sharing with your friends as it motivates me to bring you good content for free. If you think I am doing a decent job, share this article in a nice summary with your network. Connect with me on Linkedin or Twitter for more technical posts in the future!

Curious Engineer is a reader-supported publication. To receive new posts and support my work, consider becoming a free subscriber.

See you all in the next one!

Kartik Kaushik

Front end Devloper

3 周

Useful articles thanks for Sharing it Vivek Bansal

Utkarsh Mishra

Software Engineer | NodeJs | Typescript | ReactJs | AWS | Java

3 周

I think in the case study, the bandwidth point should be included in the Functional requirement. What you think Vivek Bansal

要查看或添加评论,请登录

社区洞察

其他会员也浏览了