knowledge-base

Architecture Decisions

Architecture decisions describe the rules for how a system should be constructed. These rules form the constraints of the system and informs the developers on what they can and cannot do.

Making architecture decisions involves gathering enough relevant information, justifying the decision, documenting the decision, and effectively communicating that decision to the right stakeholder.

Architectural decisions are about:

Architecture Decisions Example Image

Architecture Decision Anti-Patterns

As everywhere, anti-patterns tend to emerge. For architecture decisions, that’s no different.

When making decisions the Covering your Assets anti-pattern usually occurs, overcoming this anti-pattern usually results in the Groundhog Day anti-pattern. Overcoming that anti-pattern leads to the Email-Driven Architecture anti-pattern. As an architect you need to overcome all 3 of these anti-patterns.

Anti-Pattern: Covering your Assets

Cause

When an architects avoids or defers making an architecture decision out of fear of making the wrong choice.

Solution

Anti-Pattern: Groundhog Day

Cause

When people don’t know why a decision was made, so it keeps getting discussed over and over and over. This is because once an architect makes an architecture decision, they fail to provide a justification for the decision (or a complete justification).

Solution

Anti-Pattern: Email-Driven Architecture

Cause

Email is great for communicating, but is a poor document repository system.

Solution

Hi Ian, an important decision regarding the architectural style was made that directly impacts you. Please see confluence page…link

Technical Decisions

In general, technical decisions don’t contain technological decisions. However, this is not always the case. If a specific technology is chosen because it directly supports a specific architectural characteristic, then it’s an architecture decision.

Architectural Decision Records (ADR)

One of the most effective ways of documenting architecture decisions. Evangelized by Michael Nygard in a blog post.

Basic Structure

Store ADRs

Based on the scope you should store these ADRs appropriately. You can store them in a git repo, close to the source, if the ADRs are scoped to everything that is located in that git repo. Alternatively, on larger scopes, consider shared folders (e.g. OneDrive) or CMS’s.

Exceptions

An exception can be also named “a variance”.

There can be always a need for exceptions on any architectural decisions or rules. That is ok, this will always happen. However, you want to track and document these exceptions. See it as a “permit” to break a rule, that ideally must be explicitly approved. By documenting exceptions, one can track the why of the approval of the exception. If one would track the amount of exceptions, you can create more insight regarding your architectural decisions. Many exceptions can indicate that their might be issues with the existing rules/decisions. No exceptions can indicate that the rules/decisions are not relevant maybe or don’t touch important subjects. As always, one would like to see a balance.

Resources