architecture-handbook

Communicate into the future

Architecture Decision Records (ADRs)

Standard ADR Structure/Template

This tamplate is available at /templates/000-PROPOSED-adr-template.md

Best Practices

Architecturally Significant Decisions

In the world of software architecture, we often say that “everything is a trade-off,” but an Architecturally Significant Decision (ASD) is where those trade-offs become permanent landmarks. For a mid-level engineer, the distinction between a “design choice” and an “architectural decision” is primarily defined by:

The Core Definition An ASD is a choice that has a measurable impact on the software’s non-functional requirements (the “ilities”—scalability, maintainability, security) and is disproportionately expensive to change later. While choosing a variable name is a minor detail, choosing between a relational database and a document store is an ASD. If you change your mind about the database six months into production, you aren’t just refactoring code; you’re migrating data, rewriting persistence layers, and potentially upending your deployment strategy.

Characteristics of an ASD To identify an ASD, look for decisions that:

As you progress through an engineering career towards lead and principle engineer, or technical architect. Your role shifts from “how to implement” to “why this way.” You are no longer just solving a ticket; you are navigating residual risk. An ASD isn’t necessarily about “big” things; it’s about “hard-to-change” things.

A good architect doesn’t make these decisions in a vacuum. They document them using Architecture Decision Records, which capture the context, the options considered, and the “why” behind the final choice. This prevents “architectural drift” where the team forgets the original constraints and starts fighting the system’s own design.