This chapter defines terms about what software architecture is and isn’t.

The dimensions of software architecture

Software architecture is defined by four (4) dimensions: architectural characteristics, architectural decisions, logical components, architectural style.

Architectural characteristics

Architectural characteristics describe what aspects of the system the architecture needs to support. Some example architectural characteristics are:

  • Performance
  • Availability
  • Scalability
  • Extensibility
  • Agility
  • Interoperability
  • Fault tolerance
  • Feasibility

Architectural decisions

Architectural decisions include important choices that have long-term or significant implications for the system, e.g. the kind of database being used, the number of services, and how services communicate with each other.

Architectural decisions define the why in a software system and provide guides for the development team to make future choices, specifying constraints and limitations on the implementation of current or future features.

Logical components

Logical components describe the building blocks of the system’s functionality and how they interact. Logical components perform some sort of function and hold the source code for each business function.

Architectural style

Architectural style defines the overall physical shape and structure of the software system. The following are examples of architectural style:

  • Microservices
  • Layered architecture
  • Event-driven architecture

How are software architecture and design different?

Software architecture is concerned with the structure of the solution - services, databases, and how services communicate with each other and the user interface.

Software design is concerned with the implementation of logical components or services in the solution - using things like Unified Modeling Language (UML) diagrams to explain inheritance, design patterns, methods, etc.