Skip to main content

Fundamentals of Software Architecture

19. Architecture Decisions

An anti-pattern:

  • Andrew Koenig defines it as something that seems like a good idea when you begin, but leads you into trouble.
  • a repeatable process that produces negative results

Covering Your Assets anti-pattern

It occurs when an architect avoids or defers making an architecture decision out of fear of making the wrong choice.

How to overcome Covering Your Assets?

  • Wait until the last responsible moment to make decision, waiting until you have enough information to justify and validate your decision, avoid fall into the Analysis Paralysis anti-pattern.
  • continually collaborate with development teams to ensure decisions are feasible for implementation.

Groundhog Day anti-pattern

It occurs when people don’t know why a decision was made, so it keeps getting discussed over and over and over.

How to overcome Groundhog Day?

Important to provide both technical and business justifications for the decisions.

Business justifications

  • cost
  • time to market
  • user satisfaction
  • strategic positioning

Email-Driven Architecture anti-pattern

It occurs where people lose, forget, or don’t even know an architecture decision has been made and therefore cannot possibly implement that architecture decision.

How to overcome Email-Driven Architecture?

  • To provide a link to the single system of record.
  • Only notify those people caring about the decision

Architecturally Significant

Michael Nygard mentioned architecturally significant decisions affect the structure, nonfunctional characteristics, dependencies, interfaces or construction techniques.

  • Structure: impacting the patterns or styles of architecture being used
  • nonfunctional characterics: important for the application or system being developed or maintained.
  • dependencies: coupling points between components and/or services within the system, impact overal scalability, modularity, agility, testability, reliability, etc.
  • Interfaces refer to how services and components are accessed and orchestrated, usually through a gateway, integration hub, service bus, or API proxy.
  • construction techniques refer to decisions about platforms, frameworks, tools, and even processes that, although technical in nature, might impact some aspect of the architecture.

References

Fundamentals of Software Architecture (Ford & Richards, O'Reilly 2020).