- Chapter
- Chapter 1 — What Are Architecture Quality Attributes?
- Prerequisites
- Book 7 Volume I (requirements, constraints)
- You will be able to
- Define a quality attribute precisely, distinguish functional and quality requirements, express a quality as a scenario with a response measure, decide whether a requirement is architecturally significant, and explain how qualities rather than features drive structure
- Covers
- Definition · Functional vs quality requirements · Quality attribute scenarios · Architecture significance
On this page
- 1. Concept / Definition
- 2. Why It Exists
- 3. Core Concepts
- 4. How It Works Internally — From Stakeholder Need to Design
- 4A. Deep Dive — Qualities Are Properties of the Whole System
- 5. APIs / Features / Syntax — Capturing Qualities
- 6. Practical Examples
- 7. Common Problems & Mistakes
- 8. Performance & Production Considerations
- 9. Architecture & Design Considerations
- 10. Interview Questions & Answers
1Concept / Definition
A quality attribute (QA) is a measurable or testable property of a system that indicates how well the system satisfies the needs of its stakeholders — beyond the fact that it performs its functions. Examples: latency of checkout, availability of payments, time to add a new payment rail, time to detect a security breach.

| Term | Meaning | Example (ShopNow) |
|---|---|---|
| Functional requirement | What the system must do | Customer can place an order |
| Quality attribute | How well it must do it | Checkout p95 ≤ 800 ms at 1,500 orders/s |
| Constraint | Decision already made, not negotiable | Must run on AWS in India (data localisation) |
| Quality attribute scenario | Testable statement of a QA | Source, stimulus, environment, artifact, response, measure |
| Architecturally significant requirement (ASR) | Requirement that shapes the architecture | 99.95% checkout availability during sales |
| Common names | Note |
|---|---|
| Non-functional requirements (NFRs) | Widely used, but suggests they are optional — they are not |
| "-ilities" | Informal: scalability, availability, maintainability… |
| Quality requirements / quality characteristics | ISO/IEC 25010 terminology |
| Architectural characteristics | Richards & Ford terminology |
2Why It Exists
Early software projects specified features in detail and qualities in one sentence ("the system shall be fast and reliable"). Systems then passed functional tests and failed in production — slow under load, down during peaks, impossible to change. The quality attribute concept exists to make those properties explicit, prioritised and verifiable so they can be designed in, not discovered late.

| Problem without explicit QAs | Consequence |
|---|---|
| "Fast" means different things to business and engineering | Arguments at go-live, rework |
| Qualities discovered in production | Expensive retrofits (see Topic 1.2) |
| No priorities between qualities | Design optimises the wrong thing |
| No way to test architecture decisions | Opinions instead of evidence |
| Hidden qualities (operability, deployability) | Toil, slow delivery, burnout |
3Core Concepts
3.1 Definition
A good definition has three parts: a property (latency, availability, lead time), a stakeholder who cares about it, and a measure that shows whether it is achieved. Without the measure, the attribute is an opinion.
| Part | Question | Example |
|---|---|---|
| Property | What quality? | Availability |
| Stakeholder | Who cares, and why? | Head of e-commerce — lost sales per outage minute |
| Measure | How do we know? | Successful checkout requests / total, rolling 30 days ≥ 99.95% |
| ISO/IEC 25010 characteristic | Maps to Book 8 attributes |
|---|---|
| Performance efficiency | Performance, scalability |
| Reliability | Availability, reliability, recoverability |
| Security | Security |
| Maintainability | Maintainability, modifiability, testability |
| Usability (interaction capability) | Usability |
| Flexibility / portability | Deployability, operability (partly) |
| Functional suitability, compatibility | Mostly functional scope, interoperability |
3.2 Functional vs Quality Requirements

| Aspect | Functional requirement | Quality requirement |
|---|---|---|
| Answers | What? | How well? |
| Scope | Usually one feature | Cross-cutting, many features |
| Verification | Pass/fail test case | Measurement against threshold under conditions |
| Changes | Frequently, per sprint | Less often, but costly to change late |
| Architectural impact | Low–medium | High — drives style, tactics and technology |
| Example | "Customer can cancel an order" | "Cancellation reflected in stock within 5 s, 99.9% of the time" |
Some requirements look functional but hide a quality: "the admin can export all orders" becomes architecturally significant when "all" means 400 million rows and the export must finish in under 10 minutes without slowing checkout.

3.3 Quality Attribute Scenarios
A quality attribute scenario turns a quality into a testable statement using six parts. Chapter 2 covers scenarios in depth; here is the shape.

| Part | Checkout performance example |
|---|---|
| Source | 1,000 concurrent shoppers on mobile and web |
| Stimulus | Place orders at 1,500/s |
| Environment | Normal sale-day load, all AZs healthy |
| Artifact | Checkout service and its dependencies |
| Response | Order accepted and confirmed |
| Response measure | p95 ≤ 800 ms, errors < 0.1% over 5-minute windows |
3.4 Architecture Significance
Not every quality requirement shapes the architecture. An architecturally significant requirement (ASR) is one whose satisfaction depends on structural decisions — changing it later would require restructuring.

| Requirement | ASR? | Reason |
|---|---|---|
| Checkout 99.95% available during sales | Yes | Needs redundancy, multi-AZ, failover design |
| Product page p95 ≤ 300 ms at 20k rps | Yes | Needs caching layers and CDN |
| Order confirmation email within 60 s | Maybe | Async queue suffices; low structural impact |
| Button colour follows brand guide | No | Local UI change |
| Support staff access to PII audited 100% | Yes | Cross-cutting audit mechanism |
| Add a new payment provider in ≤ 10 dev-days | Yes | Needs ports/adapters design |

4How It Works Internally — From Stakeholder Need to Design
| Step | Activity | Output |
|---|---|---|
| 1 | Identify stakeholders (customers, business, ops, security, developers) | Stakeholder map |
| 2 | Elicit concerns in their words ("sales must never stop") | Raw concerns |
| 3 | Map concerns to attributes | Attribute list |
| 4 | Write scenarios with response measures | Scenario catalogue |
| 5 | Prioritise by business value and architectural risk | Utility tree (H/M/L) |
| 6 | Select tactics and patterns for top scenarios | Design decisions, ADRs |
| 7 | Verify by analysis, tests and production metrics | Evidence |
| Stakeholder | Typical concern | Attribute |
|---|---|---|
| Customer | "Pages load instantly, orders never lost" | Performance, reliability |
| Head of e-commerce | "We must survive Big Billion Day" | Availability, scalability |
| CISO | "No card data breach, pass PCI audit" | Security |
| SRE lead | "I can see and fix issues at 3 a.m." | Operability |
| Product teams | "Ship a feature in days, not weeks" | Modifiability, deployability |
| QA lead | "Regression in hours, not weeks" | Testability |
4ADeep Dive — Qualities Are Properties of the Whole System
A quality attribute is rarely owned by one component. Checkout latency is the sum of network, edge, service logic, dependencies and database; availability is the product of every component on the path. This is why qualities are architectural: they emerge from how components are arranged and interact, not from any single piece of code.
| Emergent effect | Example | Architectural lever |
|---|---|---|
| Latency adds along a path | 5 sequential calls × 100 ms | Parallelise, cache, remove hops |
| Availability multiplies in series | 5 × 99.95% = 99.75% | Redundancy, fewer serial dependencies |
| Security is limited by the weakest link | One unauthenticated admin endpoint | Consistent enforcement at gateway + service |
| Modifiability limited by coupling | Shared DB tables across teams | Encapsulation, data ownership |
5APIs / Features / Syntax — Capturing Qualities
A lightweight way to keep qualities visible is to store them as a versioned quality requirements catalogue next to the code and link each entry to tests and dashboards.
# docs/quality/qr-catalogue.yaml (versioned with the architecture)
- id: QR-07
attribute: performance
artifact: checkout-service
scenario: >
1,500 checkouts/s from mobile+web shoppers during sale peak, all AZs healthy
response: order accepted and confirmed
measure: { p95_ms: 800, p99_ms: 1500, error_rate_max: 0.001, window: 5m }
priority: { business: H, risk: M }
verified_by: [ k6/checkout-peak.js, grafana/checkout-slo ]
owner: checkout-team// Instrumenting the artifact so the measure can be observed (Micrometer, Spring Boot 4)
@Timed(value = "checkout.place", histogram = true,
percentiles = {0.95, 0.99}, description = "QR-07 checkout latency")
public OrderConfirmation place(CheckoutCommand cmd) {
return checkout.complete(cmd);
}| Tool | Role for quality attributes |
|---|---|
| ISO/IEC 25010 | Checklist of characteristics |
| Quality Attribute Workshop (QAW) | Elicit scenarios with stakeholders |
| Utility tree | Prioritise scenarios |
| ADRs | Record which tactic satisfies which QR |
| Micrometer + Prometheus | Measure runtime qualities |
| k6 / Gatling | Verify performance scenarios before release |
| ArchUnit | Verify structural qualities (modifiability) |
6Practical Examples
6.1 ShopNow: two stakeholders, one word
The business said "checkout must be fast". Marketing meant "the pay button responds instantly on 4G phones"; engineering assumed "server time under 2 s". Writing QR-07 as a scenario exposed the gap: the agreed measure became p95 ≤ 800 ms server-side and ≤ 2.5 s end-to-end on a 4G device profile, which added a CDN and a lighter mobile payload to the design.
6.2 A hidden quality becomes significant
The requirement "support can search any order" looked functional. Asking about scale revealed 400M orders and a 2-second search target. It became an ASR and led to an OpenSearch read model fed by order events instead of SQL LIKE queries on the transactional database.
| Before analysis | After analysis |
|---|---|
| Functional: search orders | Performance scenario: p95 ≤ 2 s over 400M orders |
| Implementation: SQL query | Read model in OpenSearch via events |
| Risk: slows checkout DB | Isolated from checkout |
6.3 Same features, two architectures
| Quality profile | Architecture chosen |
|---|---|
| 100 orders/min, 99.5%, 6 developers | Single Spring Boot app, one PostgreSQL (Book 7, 9.1) |
| 100k orders/min, 99.95%, 12 teams | Microservices, Kafka, caches, multi-AZ (Book 7, 9.4) |
6.4 Worked example — classify requirements
Scenario. The product owner for ShopNow's coupon feature handed the architect a list of twelve "requirements". They mixed what the feature should do with how well it should do it, plus rules nobody could change, so the team could not tell which items should shape the architecture.
| Requirement | Type |
|---|---|
| Customer can apply a coupon | Functional |
| Coupon validation p99 ≤ 50 ms | Quality (performance) |
| Coupons stored in India region | Constraint |
| New coupon type in ≤ 3 days | Quality (modifiability) |
| All coupon changes audited | Quality (security/auditability) |
What it shows. Classifying each item separates three kinds of requirement. "A customer can apply a coupon" is functional: it describes behaviour. "Coupon validation p99 at most 50 ms" and "a new coupon type within three days" are quality requirements, for performance and modifiability, with measurable targets. "Coupons stored in the India region" is a constraint: a fixed boundary the design must respect, not a quality to trade off. Each category is handled differently: functions become features and tests, qualities become scenarios and tactics, and constraints narrow the solution space.
Takeaway. Classify requirements before designing. Quality requirements and constraints drive architecture far more than functional ones, and they are easy to lose when mixed into a feature list.
6.5 Worked example — from concern to scenario
Scenario. ShopNow's CISO said, "We must know quickly if someone abuses admin access." The statement was important but impossible to design or test as written.
| Concern (CISO) | "We must know quickly if someone abuses admin access" |
|---|---|
| Attribute | Security (detection) |
| Scenario | Admin account performs > 50 PII reads in 10 min (stimulus) → alert raised and account suspended (response) within 5 min (measure) |
| Tactic hinted | Audit logging + anomaly detection + automated response |
What it shows. The architect turned the concern into a quality attribute scenario. The attribute is security, specifically detection. The stimulus is an admin account performing more than 50 reads of personal data within ten minutes; the environment is normal operation; the response is an alert and automatic suspension of the account; and the response measure is within five minutes. The scenario is now specific enough to choose tactics, such as audit events streamed to a detection rule, and to test them with a simulated abuse.
Takeaway. Convert stakeholder concerns into six-part scenarios with measurable responses. A concern becomes architecture only when you can test whether the system meets it.
6.6 Worked example — significance scoring
Scenario. ShopNow's backlog contained dozens of quality requirements, and the architects could not analyse all of them in depth before the first release.
| Requirement | Value | Cost to change later | Significant? |
|---|---|---|---|
| Multi-region DR (RTO 1 h) | H | H | Yes — decide now |
| Dark mode UI | L | L | No |
| Checkout p95 ≤ 800 ms | H | M | Yes |
| Report export CSV/Excel | M | L | No |
What it shows. Scoring each requirement on business value and on the cost of changing the design later shows which ones are architecturally significant. Multi-region disaster recovery with a one-hour recovery time is high on both, so it must be decided now, because retrofitting it is very expensive. A checkout p95 of 800 ms is high value with moderate change cost, so it is also significant. Dark mode and CSV or Excel export are low on change cost, so they can be handled later without affecting the architecture.
Takeaway. Focus architecture effort on requirements with high value and high cost of change. Everything else can be decided later, when more is known.
6.7 Worked example — verifying QR-07
Scenario. ShopNow's quality requirement QR-07 states that checkout must keep p95 latency under 800 ms at 1,500 requests per second. Previously, nobody checked it until customers complained during a sale.
// k6 thresholds encode the response measure (verified in CI before each release)
export const options = {
scenarios: { peak: { executor: 'constant-arrival-rate', rate: 1500, timeUnit: '1s',
duration: '30m', preAllocatedVUs: 2000 } },
thresholds: {
'http_req_duration{name:checkout}': ['p(95)<800', 'p(99)<1500'],
'http_req_failed{name:checkout}': ['rate<0.001'],
},
};What it shows. The k6 script encodes the requirement directly. A constant-arrival-rate scenario generates exactly 1,500 requests per second for 30 minutes, regardless of how fast the system responds, which matches real open traffic. Thresholds on the p95 duration and on the error rate turn the response measure into a pass or fail result. The test runs in CI against a production-like environment before each release, so a regression blocks the release instead of reaching customers.
Takeaway. Make quality requirements executable. A requirement checked automatically on every release is a guarantee; one written only in a document is a hope.
6.8 Worked example — interview answer structure
Scenario. In interviews, ShopNow asks candidates, "What is a quality attribute, and why does it matter to an architect?" Many answer with a list of words such as scalability and security.
| Step | Answer fragment |
|---|---|
| Define | "A quality attribute is a measurable property of how well the system serves stakeholders." |
| Contrast | "Functions say what; qualities say how well — and they drive the architecture." |
| Example | "Checkout p95 ≤ 800 ms at 1,500/s during sales, all AZs up." |
| Significance | "It's significant because meeting it needs caching, async and multi-AZ design." |
Why it works. The structure in the table builds a complete answer in four steps. Define it as a measurable property of how well the system serves its stakeholders. Contrast it with functional requirements: functions say what the system does, qualities say how well, and qualities drive the architecture. Give a concrete example, such as checkout p95 at most 800 ms at 1,500 requests per second, and the tactics it led to. Close with how the quality is verified, such as load tests in CI and production dashboards.
Takeaway. Answer with a definition, a contrast, a measurable example and how you verify it. That shows you can apply quality attributes, not just name them.
7Common Problems & Mistakes
| Mistake | Symptom | Better practice |
|---|---|---|
| Adjectives instead of measures | "Fast, scalable, secure" | Scenario with response measure |
| Treating NFRs as optional | Cut when schedule slips | Prioritise ASRs with business owners |
| Ignoring design-time qualities | Slow delivery after year one | Include modifiability, testability, deployability |
| One global number | "99.99% for everything" | Tier by business criticality |
| No owner | Nobody watches the metric | Owner + dashboard + alert |
| Qualities decided by technology fashion | "We need Kafka" | Start from the scenario, then choose tactics |
8Performance & Production Considerations
| Consideration | Practice |
|---|---|
| Qualities change with growth | Review the catalogue each quarter and before big events |
| Production is the final judge | Every runtime QR has a dashboard and alert |
| Test environments differ | Record environment assumptions in scenarios |
| Cost of measurement | Histograms and sampling instead of per-request logs |
| Regression | Automated thresholds in CI (k6, ArchUnit) |
9Architecture & Design Considerations
| Principle | Implication |
|---|---|
| Architecture is chosen for qualities | Start design sessions with the top 3–5 scenarios |
| Qualities conflict | Expect trade-offs (Chapter 4) |
| Qualities are emergent | Reason about paths, not components |
| Significance guides effort | Spend architecture time on ASRs |
10Interview Questions & Answers
What is a quality attribute?
A quality attribute is a measurable property that describes how well a system performs its functions for its stakeholders, rather than what those functions are. Examples include performance, such as checkout latency; availability, such as uptime per month; scalability; security; modifiability, such as how quickly a new coupon type can be added; and operability. Each quality attribute must be expressed with a measure and a target to be useful, for example p95 latency at most 800 ms at 1,500 requests per second. Quality attributes are the main drivers of architectural decisions, because they determine structure, technology and trade-offs.
How do functional and quality requirements differ?
A functional requirement describes what the system must do: a behaviour or feature, such as "a customer can apply a coupon". A quality requirement describes how well the system must do it, under which conditions, with a measurable target, such as "coupon validation completes within 50 ms at p99 under peak load". Functional requirements are verified by testing behaviour; quality requirements are verified by measurement, such as load tests, availability monitoring or change-lead-time tracking. Two systems with identical functions can need completely different architectures because their quality requirements differ.
Why is "non-functional requirement" a weak term?
The term "non-functional requirement" defines these requirements only by what they are not, which suggests they are secondary, optional or a technical detail to address later. In reality, qualities such as performance, availability and security usually drive the architecture more than features do, and they are expensive to retrofit. The term also groups very different concerns under one vague label, making them easy to skip in planning. "Quality attribute requirements" or "quality requirements" puts them on equal footing with functional requirements and encourages expressing them with measurable targets.
What is a quality attribute scenario?
A quality attribute scenario is a structured way to make a quality requirement concrete and testable. It has six parts: the source of the stimulus, such as users or an attacker; the stimulus itself, such as 1,500 checkout requests per second; the environment, such as normal operation or a degraded zone; the artifact affected, such as the checkout service; the response, such as processing orders; and the response measure, such as p95 at most 800 ms. Writing scenarios turns vague statements like "fast" or "secure" into targets that can guide design decisions and be verified.
What makes a requirement architecturally significant?
A requirement is architecturally significant when it has high business value and would be expensive to satisfy later if the architecture ignored it. Other signals include wide impact across many components or teams, very strict response measures, such as sub-10 ms latency or five-nines availability, and novelty, where the team has no proven approach. For example, multi-region disaster recovery with a one-hour recovery time is significant, because adding it later would require restructuring data and deployment. Significant requirements get explicit analysis, tactics and ADRs early; the rest can be handled incrementally.
Give an example of a functional-looking requirement that is really a quality.
"Support agents can search all orders" sounds like a simple feature. But at ShopNow's scale of 400 million orders, with a requirement that results appear within two seconds, it becomes a performance requirement that shapes the architecture. It may require a dedicated search index, data partitioning, asynchronous indexing from events and careful access control. The functional statement hides the hard part. Asking about data volume, response time and concurrency for every important feature reveals quality requirements hidden inside functional ones.
Why are qualities called emergent?
Quality attributes are emergent because they arise from how components interact, not from any single component. Latency adds up along a request path: if checkout calls three services in sequence, their latencies combine, and the slowest dependency shapes the total. Availability multiplies: a request that depends on four services each available 99.9% of the time is available only about 99.6% of the time. So a quality cannot be guaranteed by optimising one part; it must be designed and measured end to end, considering dependencies, call patterns and failure handling.
How do you keep qualities from being forgotten after design?
Keep qualities visible throughout the system's life. Maintain a versioned catalogue of quality requirements with scenarios, owners and targets. Link each significant requirement to the ADRs and tactics that address it. Encode measurable targets as automated checks, such as k6 thresholds in CI and fitness functions in the build. Track them in production with dashboards, SLOs and alerts, each with a named owner. Review the catalogue when requirements or load change. When qualities are measured continuously, regressions are caught early instead of being rediscovered during incidents.
How do you elicit qualities from non-technical stakeholders?
Avoid technical jargon and start with business impact. Ask questions such as "What happens to the business if checkout is down for an hour?" or "How long can a customer wait before abandoning?" and collect stories of past failures and frustrations. Translate the answers into quality attribute scenarios with measurable targets, then confirm the numbers with the stakeholders, explaining the cost of stricter targets. For example, a merchandiser's complaint that "prices take too long to change" becomes a modifiability scenario. Stakeholders know their priorities; the architect's job is to make them precise.
How would you explain to a CTO why two teams need different architectures for the same feature?
Show that the same feature serves different quality requirements in each context. For example, product search for customers must handle 2,000 requests per second with p95 under 300 ms during sales, while search for support agents must cover all historical orders with results in two seconds for 50 concurrent users. These scenarios lead to different tactics: a cached, replicated read model versus a deep historical index. Present the scenarios side by side, the tactics each requires and their cost. The CTO can then see that the difference comes from business needs, not team preference.