Software Architecture

Software Quality Attributes, Non-Functional Requirements and Better Software Architecture

Andrei Gridnev
6 min readJan 2, 2019
Photo by Josue Isai Ramos Figueroa on Unsplash

Read the updated version of this article.

When designing software architecture for a new product, it is often difficult to evaluate available design options and choose the optimal one. That often happens because it is unclear for the developers what criteria they should use to make design decisions and why.

Some developers rely on their previous engineering experience and personal preferences in practices, technologies, tools and patterns. The issue is that each dev team member has different preferences, opinions and assumptions. As a result, it may be difficult to reach consensus within a team and agree on some decisions. Arguing over subjective opinions and preferences may not only damage relationships between coworkers, but also won’t necessarily lead to the software architecture optimised for achieving the business goals.

What can developers do to make architecture design decisions more objective? One option would be to:

  1. start with investigating the non-functional requirements for the product,
  2. understand which software quality attributes it should be optimised for,
  3. then use that knowledge to choose the architecture options that allow their product to meet all the business requirements.

Before we move on, let me first clarify what non-functional requirements and quality attributes are.

Non-functional requirements are the criteria for evaluating how a software system should perform rather than what it should do. An example would be a requirement for a web API endpoint response time to be under 200ms.

When we say that a software product should be “secure”, “highly-available”, “portable”, “scalable” and so on, we are talking about its quality attributes.

In other words, a software product must have certain quality attributes to meet certain non-functional requirements.

A couple of examples.

Example 1: a product must be able to stream video content to 0.5–1M concurrent users 24/7 all over the world. These non-functional requirements…



Andrei Gridnev

Software engineer, manager since 2002. Engineering management, leadership, software architecture, high-performing teams, professional growth.