Definition: “The low-level details and the high-level structure … (that forms) a continuous fabric that defines the shape of the system.”

The goal of software architecture:

To minimize the human resources required to build and maintain the required system.

—Bob Martin, Clean Architecture.

Impacts of good architecture

  • Code is easy to change.
  • Improved developer productivity (including new employee onboarding)
    • For example, developers know where in the structure to begin adding code.
    • Developers can determine which patterns are most effective for the code they need to add.
  • Code is easy to test.
  • Code is easier to read.

The process of architecture

  • Not a point in time where you can “get it right” once and for all. Instead, it’s a constant process.
  • Tension between the desired behavior and the structure that will enable future behavior changes.
  • Behavior: What the software does that meets the requirements of the stakeholders. (making or saving money)
  • Structure: “software must be soft—that is, it must be easy to change.” (also making or saving money, but in a more long-term way)

How do you make it soft (easy to change)

Level of detail

Principles to apply

Functions, lines of code

Clean Code



Mid-level components

Component cohesion: REP, CCP, CRP

Component coupling: …

High-level components