A Series of Tweets from Grady Booch on software architecture:
A thread regarding the architecture of software-intensive systems.
There is more to the world of software-intensive systems than web-centric platforms at scale.
A good architecture is characterized by crisp abstractions, a good separation of concerns, a clear distribution of responsibilities, and simplicity. All else is details.
You cannot reduce the complexity of a software-intensive systems; the best you can do is manage it.
In the fullness of time, all vibrant architectures must evolve.
Old software never dies; you must kill it.
Some architectures are intentional, some are accidental, most are emergent.
Meaningful architecture is a living, vibrant process of deliberation, design, and decision.
The relentless accretion of code over days, months, years and even decades quickly turns every successful new project into a legacy one.
Show me the organization of your team and I will show you the architecture of your system.
All well-structured software-intensive systems are full of patterns.
A software architect who does not code is like a cook who does not eat.
Focusing on patterns and cross-cutting concerns can yield an architecture that is smaller, simpler, and more understandable.
Design decisions encourage what a particular stakeholder can do as well as what constrains what a stakeholder cannot.
In the beginning, the architecture of a software-intensive system is a statement of vision. In the end, the architecture of every such system is a reflection of the billions upon billions of small and large, intentional and accidental design decisions made along the way.
All architecture is design, but not all design is architecture.
Architecture represents the set of significant design decisions that shape the form and the function of a system, where significant is measured by cost of change.