Unit 6: Architectural Decision Making

Architectural Decision Making is a critical process in the design of software systems. In this unit, we will explore key terms and vocabulary related to this process.

Unit 6: Architectural Decision Making

Architectural Decision Making is a critical process in the design of software systems. In this unit, we will explore key terms and vocabulary related to this process.

Architectural Decision: An architectural decision is a choice made by the software architect that has significant implications for the system being designed. These decisions can impact the system's performance, scalability, security, and maintainability. Examples of architectural decisions include the choice of programming language, the use of a particular database technology, or the decision to use a microservices architecture.

Architectural Decision Making: Architectural Decision Making is the process of identifying, analyzing, and making architectural decisions. This process involves considering various factors, such as functional requirements, non-functional requirements, constraints, and trade-offs. The goal is to make informed decisions that will result in a system that meets the needs of its users and stakeholders.

Architectural Decision Record (ADR): An Architectural Decision Record (ADR) is a document that captures the context, rationale, and outcome of an architectural decision. ADRs are used to communicate decisions to other members of the development team and to provide a record of the decision-making process. ADRs typically include information such as the decision's context, the options considered, the criteria used to evaluate those options, and the final decision and rationale.

Stakeholders: Stakeholders are individuals or groups who have an interest in the software system being designed. Stakeholders can include users, developers, testers, managers, and customers. Understanding the needs and constraints of stakeholders is critical to making informed architectural decisions.

Requirements: Requirements are the needs and constraints that the software system must meet. Requirements can be functional, such as the ability to perform a particular task, or non-functional, such as the need for the system to be secure or scalable. Understanding the requirements is critical to making informed architectural decisions.

Constraints: Constraints are limitations that must be considered when making architectural decisions. Constraints can include technological limitations, such as the need to use a particular programming language or database technology, or business limitations, such as budget or time constraints.

Trade-offs: Trade-offs are the compromises that must be made when making architectural decisions. Trade-offs involve balancing competing factors, such as performance and maintainability, or security and usability. Understanding the trade-offs involved in a decision is critical to making informed decisions.

Qualities Attributes: Qualities Attributes are non-functional requirements that describe how well a system performs. Examples of qualities attributes include performance, scalability, security, and maintainability. Understanding the qualities attributes that are important for a system is critical to making informed architectural decisions.

Design Patterns: Design Patterns are proven solutions to common design problems. Design patterns can provide a useful starting point for making architectural decisions, as they have been tested and refined over time. Examples of design patterns include the Singleton pattern, the Factory pattern, and the Observer pattern.

Anti-Patterns: Anti-Patterns are common pitfalls that can lead to poor design decisions. Anti-patterns can provide a useful warning sign of potential problems, and understanding them can help developers avoid making mistakes. Examples of anti-patterns include the Spaghetti Code anti-pattern, the God Object anti-pattern, and the Golden Hammer anti-pattern.

Architectural Styles: Architectural Styles are recurring solutions to common architectural problems. Architectural styles provide a high-level view of the system and can help guide the decision-making process. Examples of architectural styles include the Layered Architecture style, the Microservices Architecture style, and the Space-Based Architecture style.

Architectural Tactics: Architectural Tactics are specific techniques that can be used to achieve particular architectural goals. Architectural tactics can be used to address specific qualities attributes, such as performance or security. Examples of architectural tactics include caching, load balancing, and encryption.

Architectural Decision Matrix: An Architectural Decision Matrix is a tool that can be used to evaluate and compare different architectural options. An architectural decision matrix typically includes a list of criteria, such as performance, scalability, and security, and a rating system for each option.

Architectural Refactoring: Architectural Refactoring is the process of modifying the architecture of a system to improve its qualities attributes or to address new requirements. Architectural refactoring can involve changes to the system's structure, components, or interactions.

Architectural Debt: Architectural Debt is the cost of making suboptimal architectural decisions. Architectural debt can result from taking shortcuts, making compromises, or failing to consider long-term consequences. Architectural debt can be difficult and expensive to repay, so it is essential to consider the long-term implications of architectural decisions.

Architectural Erosion: Architectural Erosion is the gradual degradation of a system's architecture over time. Architectural erosion can result from incremental changes, shortcuts, or the accumulation of technical debt. Preventing architectural erosion requires ongoing maintenance and refactoring.

Architectural Review: An Architectural Review is a formal process for evaluating the architecture of a system. An architectural review typically involves a team of experts who evaluate the system's architecture against a set of criteria, such as performance, scalability, and security.

In conclusion, Architectural Decision Making is a complex and challenging process that requires a deep understanding of the system's requirements, constraints, and qualities attributes. By using tools such as Architectural Decision Records, Architectural Decision Matrices, and Architectural Reviews, developers can make informed decisions that will result in a system that meets the needs of its users and stakeholders. It is also important to consider the long-term implications of architectural decisions and to prevent architectural debt and erosion through ongoing maintenance and refactoring. By following best practices and using proven techniques, developers can ensure that their systems are well-designed, scalable, and maintainable.

Key takeaways

  • Architectural Decision Making is a critical process in the design of software systems.
  • Examples of architectural decisions include the choice of programming language, the use of a particular database technology, or the decision to use a microservices architecture.
  • Architectural Decision Making: Architectural Decision Making is the process of identifying, analyzing, and making architectural decisions.
  • Architectural Decision Record (ADR): An Architectural Decision Record (ADR) is a document that captures the context, rationale, and outcome of an architectural decision.
  • Stakeholders: Stakeholders are individuals or groups who have an interest in the software system being designed.
  • Requirements can be functional, such as the ability to perform a particular task, or non-functional, such as the need for the system to be secure or scalable.
  • Constraints can include technological limitations, such as the need to use a particular programming language or database technology, or business limitations, such as budget or time constraints.
May 2026 intake · open enrolment
from £90 GBP
Enrol