Software architecture
High-level structure and organization of software systems: components, interactions, styles, documentation, quality goals, trade-offs, and its role in development and maintenance.
Overview
Software architecture is the set of fundamental structures of a software system and the discipline of creating these structures. It identifies the system’s main components, their responsibilities, and the relationships and interactions among them. Beyond diagrams, architecture captures the key design decisions, constraints, and trade-offs that affect system qualities such as performance, scalability, security, and maintainability.
Image gallery
1 ImageCore elements and characteristics
An architecture typically describes components (modules, services, layers), interfaces, data flows, and deployment venues. It also addresses nonfunctional requirements — sometimes called quality attributes — that guide choices: for example, whether the system must prioritize low latency, easy evolution, high availability, or strict security. Good architecture communicates intent to developers, operations teams, and stakeholders and provides a basis for estimating risk and cost.
Common architectural styles
Architectural style names group recurring patterns of organization and interaction. Typical styles include:
- Layered (n-tier) — separation by responsibility such as presentation, business logic, and data storage.
- Client–server and distributed — components run on different machines with well-defined protocols.
- Service-oriented and microservices — systems built from small, independently deployable services.
- Event-driven and message-based — components communicate by events or messages, supporting loose coupling and asynchronous processing.
- Model–view–controller (MVC) — common in interactive applications to separate concerns.
Documentation, views, and evaluation
Architectures are documented with multiple views to address different stakeholder concerns: logical views for functional structure, development views for module organization, process views for runtime behavior, physical views for deployment, and scenario-based descriptions for key use cases. Structured evaluation methods examine whether an architecture meets requirements and where risks lie; architecture reviews aim to expose trade-offs and potential changes before implementation.
Importance, history, and practical effects
The notion of software architecture emerged as systems grew larger and more complex. Treating architecture as a first-class activity helps teams control complexity and manage long-term evolution. Because architecture decisions are broad and foundational, changing them late in a project can be costly. Conversely, a well-chosen architecture enables incremental development, clearer maintenance, and more predictable scaling.
Distinctions and notable facts
Software architecture differs from low-level design and implementation: it focuses on coarse-grained structure and critical decisions rather than code-level algorithms. Architects balance competing goals and communicate constraints to developers and managers. For practical guidance and further reading, see additional resources.
Questions and answers
Q: What does software architecture refer to?
A: Software architecture refers to the high-level components that a software is made of and how they interact with each other.
Q: What is the function of each component in a software system?
A: Each component in a software system has a well-defined function.
Q: What is an interface in a software system?
A: An interface is a point of communication or interaction between different components of a software system.
Q: Why is it important to make choices when using a certain architecture for a system?
A: It is important to make choices when using a certain architecture for a system because changing it later on may be difficult and expensive.
Q: What does high-level components mean in software architecture?
A: High-level components in software architecture refer to the overall structure of the system, including its major parts and how they relate to each other.
Q: How does software architecture play a role in the development of a software system?
A: Software architecture plays a critical role in the development of a software system, as it determines how the system will be structured and how its various components will interact with one another.
Q: What are some potential risks associated with changing the architecture of a software system?
A: Some potential risks associated with changing the architecture of a software system include introducing new bugs or issues, causing delays or cost overruns, and disrupting user experience.
Related articles
Author
AlegsaOnline.com Software architecture Leandro Alegsa
URL: https://en.alegsaonline.com/art/91573