Welcome to my notes.
On this small corner of the internet, I write about the various things that catch my fancy. From software, to organizational process, to poetry and music.
The Opportunity Cost of Non-functional Requirements
Wednesday, March 18, 2020
By Etin Obaseki
In Software Engineering, requirements are descriptions of what the system should do and how it should behave. Requirements also specify the constraints the system will operate under.
The process of Requirements Engineering is extremely important and often sets the tone for the rest of the Software Development Lifecycle regardless of the development model (Waterfall, Agile, etc.) in use.
Requirements are divided into:
- Functional Requirements which are concerned with what the system should do.
- Non-functional Requirements are concerned with how the system should be.
Non-functional Requirements (also called quality attributes) are the major concern of Software Architecture.
Opportunity Cost of Quality Attributes
Most quality attributes in building information systems have a triangular relationship where as you lean towards any two, you forgo more of the third.
Consider an example with regards to cybersecurity and performance in in these systems. You can have:
Caching will improve performance and usability, but will introduce vectors for attack thus, compromising security.
Of course, there are patterns and techniques that invalidate cycles like these, but it helps to be aware of them.
You can have Personalization, apps, recommendations tailored to your taste and Portability, these preferences migrate with you as you move from one medium or device to another but Privacy will need to take a hit.
As we’ve said, there are ways to escape the cycle depending on how much we’re willing to re-architecture.
For example, with these 3 P’s, if the user had their own, self hosted service for managing Preferences and they could take that with them to other Platforms, then that would take care of the Privacy concern, since no third party would need to be involved.
References and Further Reading
- Wikipedia: Non-functional requirement https://en.wikipedia.org/wiki/Non-functional_requirement
- Software Engineering 9th Edition by Ian Sommerville: https://www.pearson.com/us/higher-education/product/Sommerville-Software-Engineering-9th-Edition/9780137035151.html