Skip to content
Yakup Bugra Bozkurt
Go back

Software Architecture Notes – 2

What is software architecture

Software architecture refers to the high-level structure of a system, including its components and the relationships and interactions between them.

Whether its documented or not, good or bad, every software has an architecture.

Architecture represents the significant decisions that shape a system, where significance is measured by cost of change. Significant decisions are “architecture” and that everything else is design.

Design focuses on tactical decisions, addressing the finer details of implementation that are more flexible and can evolve as the project progresses.

Software architecture is about strategic decisions that balance trade-offs between competing architectural drivers while ensuring that the system can evolve in response to changing requirements.

Why software architecture is important?

Business & economics

Quality & risk management

Team & delivery

System evolution

Architectural thinking mindset

Architecture Characteristics (Quality Attributes)

Architecture characteristics, often referred to as non-functional requirements (NFRs), describe how well a system must behave rather than what it does. They serve as key metrics for evaluating a system’s success and strongly influence architectural and design decisions.

Identifying the right set of characteristics is a critical architectural activity, as they must align with both business goals and technical constraints.

Not all characteristics are equally important. Typically, 3–5 key characteristics should be prioritized in collaboration with stakeholders to reflect business drivers and constraints. Techniques such as MoSCoW analysis (Must/Should/Could/Won’t) or weighted scoring can help make priorities and trade-offs explicit.

Each architectural characteristic should be clearly defined, measurable, and supported by Architecture Decision Records (ADRs). Since many characteristics inherently conflict with each other (e.g., performance vs. scalability, security vs. usability), architecture is fundamentally about making informed trade-offs rather than optimizing a single dimension.

1. Operational Characteristics

These focus on how the system functions during runtime.

2. Structural Characteristics

These focus on the internal quality and ease of evolving the software.

3. Cross-Cutting Characteristics

These are pervasive concerns that affect both the operation and the structure of the system.

Trade-offs

In software architecture, there is no “best” solution—only a set of trade-offs. Trade-offs are unavoidable; the role of an architect is to make them explicit and intentional. Strengthening one characteristic often weakens another:


Share this post on:

Previous Post
Domain Driven Design (notes) -1- Business Domain
Next Post
A1 Level Bosnian-English Vocabulary