More on this book
Community
Kindle Notes & Highlights
Started reading
August 14, 2018
Architecture is a hypothesis, that needs to be proven by implementation and measurement. —Tom
The only way to go fast, is to go well.
When software is done right, it requires a fraction of the human resources to create and maintain.
The goal of software architecture is to minimize the human resources required to build and maintain the required system.
The measure of design quality is simply the measure of the effort required to meet the needs of the customer. If that effort is low, and stays low throughout the lifetime of the system, the design is good. If that effort grows with each new release, the design is bad. It’s as simple as that.
The developers may think that the answer is to start over from scratch and redesign the whole system—
The reality is less rosy: Their overconfidence will drive the redesign into the same mess as the original project.
Every software system provides two different values to the stakeholders: behavior and structure. Software developers are responsible for ensuring that both those values remain high.
To fulfill its purpose, software must be soft—that is, it must be easy to change.
From the stakeholders’ point of view, they are simply providing a stream of changes of roughly similar scope. From the developers’ point of view, the stakeholders are giving them a stream of jigsaw puzzle pieces that they must fit into a puzzle of ever-increasing complexity.
EISENHOWER’S MATRIX
I have two kinds of problems, the urgent and the important. The urgent are not important, and the important are never urgent.1
The first value of software—behavior—is urgent but not always particularly important.
The second value of software—architecture—is important but never particularly urgent.
This challenge is doubly important if you are a software architect. Software architects are, by virtue of their job description, more focused on the structure of the system than on its features and functions. Architects create an architecture that allows those features and functions to be easily developed, easily modified, and easily extended.