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 |
Class/module |
SOLID |
Mid-level components |
Component cohesion: REP, CCP, CRP Component coupling: … |
High-level components |
… |
Resources
- Bob Martin, Clean Architecture (2017).
- Mark Richards and Neal Ford, “Software Architecture Fundamentals: Understanding the Basics.” (2014)
- There’s a 4-part video series.
- Part 1: Understanding the basics
- Part 2: Beyond the basics
- Part 3: Soft skills
- Part 4: People skills
- There’s a 4-part video series.