|
| 1 | +--- |
| 2 | +# Feel free to add content and custom Front Matter to this file. |
| 3 | +# To modify the layout, see https://jekyllrb.com/docs/themes/#overriding-theme-defaults |
| 4 | + |
| 5 | +layout: default |
| 6 | +redirect_from: /is-my-decision-significant-one-pager/ |
| 7 | +--- |
| 8 | +# "Is My Decision Architecturally Significant?" One-Pager |
| 9 | +Over and over I end up creating a page that helps folks figure out if they are about to make an architecturally significant decision (and hence, write an ADR). The following is content I've evolved over the years that you can cut and paste. |
| 10 | + |
| 11 | +# One-Pager - Use this as Inspiration |
| 12 | +It is vitally important to document architecturally significant decisions, but when is your decision significant enough to start an Architectural Decision Record (ADR)? |
| 13 | + |
| 14 | +This page lists the criteria that indiate if your decision is architecurally significant (and must be captured as an ADR). |
| 15 | + |
| 16 | +## What makes a Decision Architecturally Significant? |
| 17 | +If a decision meets _one or more_ of the following critertia, it is architecturally significant and therefore must be recorded as an ADR. |
| 18 | + |
| 19 | +Significant "Architectural" decisions are decisions that affect one or more of the following five criteria: |
| 20 | +* **structure**: the arrangement of the parts of a software system, what each part does, and how those parts interact (or not) |
| 21 | +* **non-functional characteristics**: the ways that the overall system must operate, and qualities it must embody, |
| 22 | +* **dependencies**: the systems and services that you rely on to offer your service that you do not control, |
| 23 | +* **interfaces**: the services you offer to others, |
| 24 | +* **construction techniques**: the ways you deliver, run, and evolve your systems. |
| 25 | + |
| 26 | +These criteria are covered in more detail in the following sections. |
| 27 | + |
| 28 | +Note: A decison is significant if it meets one or more of the criteria, irrespective if the decision is in a new area, or if it re-visits a previous decision. Revisits can arise because of changing circumstances or because a certain period of time has passed and a previous decision requires reconsideration. Remember, it is always fine to decide "we'll just leave it as is, for now". This deciding not to do anything is good practice. These should also be documented. |
| 29 | + |
| 30 | +### Structurally Significant Decisions |
| 31 | +A decision is significant if it relates to either: |
| 32 | +* the placement of function (where some logic or responsibility for something is located) |
| 33 | +* OR the decision to start (or stop) using a new design pattern or a higher-level architectural pattern |
| 34 | + |
| 35 | +For simplicity's sake, "design pattern" here means the widely known and reusable solutions for commonly observed problems in software structure in the following books: |
| 36 | +* Design Patterns by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides (O’Reilly) ([Pattern list](https://en.wikipedia.org/wiki/Design_Patterns#Patterns_by_type)) |
| 37 | +* Further works built on this, namely the Pattern-Oriented Software Architecture series (Wiley) ([Pattern list](https://en.wikipedia.org/wiki/Pattern-Oriented_Software_Architecture)) |
| 38 | +* Martin Fowler’s Patterns of Enterprise Application Architecture (Pearson Education) ([Pattern list](https://martinfowler.com/eaaCatalog/)) |
| 39 | +* Eric Evans’s Domain-Driven Design: Tackling the Complexity at the Heart of Software (Addison-Wesley) ([Pattern catalogue](https://www.domainlanguage.com/wp-content/uploads/2016/05/DDD_Reference_2015-03.pdf) in the DDD Reference) |
| 40 | +* Gregor Hohpe and Bobby Woolf’s Enterprise Integration Patterns (Addison-Wesley) ([Pattern list](https://www.enterpriseintegrationpatterns.com/patterns/messaging/toc.html)) |
| 41 | +* Bill Wilder’s Cloud Architecture Patterns (O’Reilly) (Pattern list not available) |
| 42 | + |
| 43 | +If additional pattern catalogues need to be added to this list, please comment here so everyone can see them. |
| 44 | + |
| 45 | +### Non-Functionally Significant Decisions |
| 46 | +An architectural decision is significant if it alters our ability to meet one or more Non-Functional Requirements. |
| 47 | + |
| 48 | +### Dependency-Significant Decisions |
| 49 | +A decision is significant if there will be either: |
| 50 | +* a completely new dependency, |
| 51 | +* OR (for an existing dependency) you upgrade by a major version with the same vendor, |
| 52 | +* OR there is a complete vendor change (even if they are offering the same dependency) |
| 53 | + |
| 54 | +### Interface-Significant Decisions |
| 55 | +A decision is significant if you offer: |
| 56 | +* a new API on your interface, |
| 57 | +* OR you make any change in your API that would constitute a major version upgrade for your consumers |
| 58 | + |
| 59 | +### Construction Technique-Significant Decisions |
| 60 | +A decision is significant if you bring: |
| 61 | +* a new construction technique to a production environment (such as canary releases or blue-green deployments) or as a step in the pipeline(s) |
| 62 | +* OR to a production-like environnent (one that others rely on to get their work done efficiently) |
0 commit comments