Search Knowledge

© 2026 LIBREUNI PROJECT

Software Architecture / Foundations

Quality Attributes & Tradeoffs

Quality Attributes & Tradeoffs

Quality attributes are the real language of architecture. SEI’s architecture-evaluation work treats qualities such as performance, modifiability, availability, and security as scenario-driven concerns, not as vague labels. Users rarely ask for “hexagonal architecture” or “event sourcing”; they ask for a service that is fast during campaigns, safe during fraud attempts, recoverable after mistakes, understandable by support, and cheap enough to operate.

Quality attributes are also in tension. Caching may improve latency while weakening freshness and increasing invalidation complexity. Strong consistency may simplify user promises while reducing availability during partitions. Fine-grained services may improve team autonomy while increasing runtime coordination. Security controls may reduce risk while adding latency and operational friction. Senior architecture is the discipline of naming these tensions before they become surprises.

Code
left to right direction
rectangle "Quality Attribute Scenario" as Scenario
rectangle "Stimulus\nWhat happens?" as Stimulus
rectangle "Environment\nUnder what conditions?" as Environment
rectangle "Response\nWhat should the system do?" as Response
rectangle "Measure\nHow good is good enough?" as Measure

Scenario --> Stimulus
Scenario --> Environment
Scenario --> Response
Scenario --> Measure
Stimulus --> Response : triggers
Environment --> Measure : qualifies
Quality Attribute ScenarioStimulusWhat happens?EnvironmentUnder what conditions?ResponseWhat should the system do?MeasureHow good is good enough?triggersqualifies

Scenarios Beat Adjectives

”The system must be scalable” is not an architectural requirement. It is a mood. A quality attribute scenario turns a mood into something designable: during a flash sale, with ten times normal traffic, checkout accepts orders at p95 latency below 400 ms while preserving payment correctness and shedding non-critical personalization.

The scenario has a stimulus, environment, response, and measure. It also has a business meaning. A reporting system may tolerate minutes of delay because correctness and auditability dominate. A trading system may accept complex infrastructure to reduce tail latency. A public health system may prefer graceful degradation and data integrity over feature richness. Quality attributes are not universal priorities; they are expressions of what failure would cost.

Code
rectangle "Checkout Flash Sale Scenario" as S {
rectangle "Stimulus\n10x traffic spike" as A
rectangle "Environment\nCampaign active, inventory constrained" as B
rectangle "Response\nAccept paid orders, defer recommendations" as C
rectangle "Measure\np95 checkout under 400 ms; no duplicate charges" as D
}
A --> C
B --> C
C --> D
Checkout Flash Sale ScenarioStimulus10x traffic spikeEnvironmentCampaign active, inventoryconstrainedResponseAccept paid orders, deferrecommendationsMeasurep95 checkout under 400 ms; noduplicate charges

Tactics Are Smaller Than Patterns

Patterns name larger arrangements. Tactics are smaller design moves that influence a quality attribute. For availability, tactics include redundancy, heartbeat, failover, circuit breaking, health checks, and graceful degradation. For modifiability, tactics include information hiding, stable interfaces, dependency inversion, module ownership, and automated compatibility tests. For performance, tactics include caching, batching, asynchronous processing, indexing, precomputation, partitioning, and admission control.

The distinction matters because architects often debate patterns when the real work is choosing tactics. You do not adopt microservices to get availability. You apply redundancy, isolation, deployment independence, and operational practices that may or may not require services. You do not adopt domain-driven design to get modifiability. You create boundaries, language, ownership, and dependency rules that let a domain change without dragging unrelated concepts behind it.

Code
left to right direction
rectangle "Availability" as Availability
rectangle "Modifiability" as Modifiability
rectangle "Performance" as Performance

rectangle "Redundancy" as Redundancy
rectangle "Graceful Degradation" as Degradation
rectangle "Stable Interfaces" as Interfaces
rectangle "Dependency Rules" as Dependency
rectangle "Caching" as Caching
rectangle "Admission Control" as Admission

Availability --> Redundancy
Availability --> Degradation
Modifiability --> Interfaces
Modifiability --> Dependency
Performance --> Caching
Performance --> Admission
AvailabilityModifiabilityPerformanceRedundancyGraceful DegradationStable InterfacesDependency RulesCachingAdmission Control

Tradeoff Surfaces

A tradeoff surface is the area where one quality improves at the expense of another. Senior architects make the surface visible so stakeholders can choose knowingly. For example, a product team may ask for real-time dashboards. The architecture choices include direct reads from the transactional database, replicas, event streams, materialized views, or a separate analytical store. Each choice expresses a tradeoff among freshness, load isolation, correctness, cost, and implementation effort.

When tradeoffs stay technical, decisions drift. The business may say “real time” but mean “fresh enough for a manager to notice a bad campaign within five minutes.” That difference changes the architecture. A five-minute tolerance may avoid a fragile live query path and allow a resilient materialized view. Architecture quality improves when technical choices are linked to business tolerances.

Code
left to right direction
database "Transactional DB" as OLTP
queue "Event Stream" as Stream
database "Materialized View" as View
rectangle "Dashboard" as Dash
rectangle "Tradeoff\nFreshness: seconds to minutes\nIsolation: high\nComplexity: moderate" as Tradeoff

OLTP --> Stream : domain events
Stream --> View : projection
View --> Dash : query
Tradeoff .. Dash
Transactional DBEvent StreamMaterialized ViewDashboardTradeoffFreshness: seconds to minutesIsolation: highComplexity: moderatedomain eventsprojectionquery

Prioritization Under Scarcity

Most systems cannot maximize every quality. The architecture should state the top qualities and the qualities that are intentionally secondary. This is not negligence; it is honesty. A prototype may optimize learning and reversibility over scale. A regulated financial platform may optimize auditability and correctness over speed of feature variation. A media site may optimize read latency and cost over strict consistency for comments.

Prioritization should be revisited as the system matures. Early systems often need modifiability and fast learning. Growing systems need operability and reliability. Mature systems need governance, migration paths, and cost control. The same architecture that helps a team learn may become dangerous when traffic, compliance, or dependency count grows.

Practice

Write three quality attribute scenarios for one product: one user-facing, one operational, and one change-oriented. For each scenario, list two tactics that improve it and one quality attribute that could get worse. Then decide which tradeoff you would accept now and which metric would tell you that the decision needs review.

References & Further Reading