Universal Principles of a Beautiful Architecture
Escrito por gacevedo el 1 de Septiembre de 2009
In the past systems were usually lonely applications which had run in the same way, maybe for years. Nobody requested changes, or even nobody knew that systems could be subject to changes. The techniques used to develop software were simple, because systems were simple and less demanding.
Today, systems are too complex and are no longer alone. Now the software cohabit with other pieces of software in many different machines even communicated through different types of media. Actually, is hard to say in what type of devices a software is running. It could be your laptop, desktop PC, iPod, car or even your washing machine or your clock. We have distributed systems, embedded systems or just sharing services trough a corporate network.
In the present time we depend on systems for so many tasks that its performance, reliability and quality are too much important to everyone, not only system administrators or programmers.
Oh! and of course our needs change all the time and software is subject to improvement, fixing or even functionality changes. Therefore the architecture becomes to be a fundamental part of Software Engineering. But what architecture is?
Architecture
Architecture is a term that has several meanings depending on what field are we talking about. Besides the differences, there are several things in common among the different disciplines. Particularly, an architecture can help assure that the system satisfies the concerns of its stakeholders, and it can help deal with the complexity of conceiving, planning, building, and maintaining the system.[1]
In all disciplines, architecture contributes to solve one common problem: to assure that the building, bridge, or system has the properties and behaviors that we want, when it has been built. Also architecture give us the idea of structures, defined by components and their relations. Of course each discipline has its own sets of components and relations among them.
Principles
According to Stephen J. Mellor, in the book “Beautiful Architecture”, there are universal principles which make an architect beautiful. Some of which I mention below:
- One fact in one place: avoid duplicity; common functionality should be factored out into separated modules. Be aware of changes.
- Automatic propagation: maintain consistency and correctness; propagation must be carried out automatically at construction time.
- Architecture includes construction: an architecture must include not only the runtime system but also how it is constructed.
- Minimize mechanisms: less code to write, verify, maintain and occupy memory.
- Construct engines: extensible systems rely on the construction of engines that are “programmed” by data provided by higher layers and that implement multiple application functions at a time.
- O(G), the order of growth: consider the direction of likely growth and account for it.
- Resist entropy: beautiful architecture are preserved over time. Changes will be consistent with it and not increase system entropy.
Whenever we are evaluating or designing an architecture we should consider these principles to tell if the architecture in question is ugly or beautiful.
Further in this blog, I’m going to review different aspects of Software Engineering, specially concepts of Software Architecture. Comments?
[1] Diomidis Spinellis, Georgios Gousios. 2009. Beautiful Architecture: Leading Thinkers Reveal the Hidden Beauty in Software Design. Sebastopol, CA: O’Reilly Media, Inc.

