Software architecture is fundamentally about facilitating technical communication between project stakeholders.

  • Is there ambiguity?
  • Is it accurate?
  • Is it precise?

Architectural views are focused on specific subsets of elements or relationships. These views focus on specific concerns or scenarios but can overlap. Maintaining consistency is important here.

Example

We can draw similar diagrams for deployment, or event driven architectures.
Deployment diagrams have:

  • Nodes: Something that can host software
  • Artifacts: software executables, data files, etc Sequence diagrams have:
  • Messages
  • Lifelines
  • Participants
  • Activation bars: Shows when each participants is active Communication diagrams have:
  • Messages
  • Sequence numbers
  • Objects
  • Start and end states
  • Transition states
  • Transitions Activity diagrams have:
  • Activities: non-atomic executables
  • Forks
  • Joins
  • Decisions
  • Merges
  • Flows

Prescriptive architecture dictates how the system will be built as conceived (a priori) and descriptive architectures captures how the system was actually built as implemented (a posteriori).

Architectural Degradation

This is when there is drift (changes that are not captured in the current architecture but do not violate it) and erosion (changes that violate the current architecture).