SWBR : Beautiful Architecture | Foreword
I am currently reading the book ‘Beautiful Architecture’, where in the leading thinkers reveal the hidden beauty in software design. I plan to give the gist learned from each chapter from this book, starting with wonderful foreword by Stephen J. Mellor. In the Foreword Mellor lists several traits of the high-performance, high-reliability and high-quality software systems. One important thing to note about is the the below given principles are interdependent.
In short Mellor summarises beautiful architectures as those which do more with less.
- One fact in one place
- Duplication leads to error, avoid it.
- Each fact must be a single, non decomposable unit.
- Each fact must be independent of all other facts.
- When change occurs, only one place need be modified.
- Beautiful architecture find ways to localise information and behaviour.
- Automatic propagation
- For efficiency’s sake data or behaviour needs to be duplicated.
- To maintain consistency and correctness, the propagation of these facts must be carried out automatically at construction time.
- Beautiful architectures are supported by construction tools that effect meta-programming, propagating one fact into many places where they may be used efficiently.
- Architecture includes construction
- Architecture should bot only contain runtime system, but how it is constructed.
- Focusing only on the runtime code is a recipe for deterioration of the architecture over time.
- Beautiful architectures are reflective. They are beautiful both at runtime and construction time, using the same data, functions and techniques to build the system as those that are used at runtime.
- Minimise mechanism
- Do not strive for the ‘Best’ solution.
- Beautiful architectures employ a minimal set of mechanisms that satisfy the requirements of the whole.
- Find the ‘Best’ in each case leads to proliferation of error-prone mechanisms.
- Adding mechanisms parsimoniously leads to smaller, faster, and more robust systems.
- Construct engines
- Extensible systems rely on construction of virtual machines-engines that are “programmed” by data provided by higher layers, and that implement multiple application functions at runtime.
- These engines are highly reusable and beautiful.
- O(G) order of growth
- Beautiful architectures should consider about the order of growth, just like we consider O(n) for algorithms.
- Beautiful architecture consider the direction of likely growth and account for it.
- Resist entropy
- Beautiful architecture establish a path of least resistance for maintenance that preserves the architecture over time and so slows the effects of the Law of System entropy.
- Law of System Entropy states that system become more disorganised over time.
- Maintainers must internalise the architecture so that changes will be consistent with it and not increase system entropy.