3 Pillars of Architecture
Join the DZone community and get the full member experience.
Join For FreeI’ve
spent some time thinking a bit more deeply about a few of my recent
posts on software architecture, and have come to the following
revelation.
Architects architect architecture!
Don’t let the triviality of this statement undermine its depth. While each of the three words are variations of the same thing, each have different contextual meaning. Let’s tease the statement apart to see what I mean.
- Architects - Humans create software architecture, and for architecture to be effective, we must also be able to understand the architecture. In Eliminate Architecture, I cited a definition of architecture that introduces the social dimension. Architects signify the social pillar.
- Architect - The way we arrive at architecture is through some process or series of steps. We might create diagrams or software architecture documents. We might write a little code (proofs, spikes, prototypes) to determine the viability of architecture. There are many different activities we perform as we create the architecture. Architect signifies the process pillar.
- Architecture - In Modularity and Architecture, I offered up a few industry definitions of architecture. Common keywords that span definitions include components, composition, interfaces, subsystems, and structure. Architecture signifies the technology pillar.
To ensure balance, we must give attention to each of the three pillars. Additionally, each pillar is related to the other. For instance, ignoring the social pillar impacts the other two in unexpected ways.
The Social Pillar
Turtles and Architecture
generally focused on the social pillar of software architecture, but
also talked a bit about how the technology pillar can increase
understanding, visibility, and transparency. The general sentiment is
that architects must focus on more than just concepts and developers
must focus on more than just code. There is a middle ground that
demands attention, as well.
I used a visual similar to what’s at right (click to enlarge) to illustrate the middle ground. It also illustrates how aspects of the technology pillar can help increase understanding and transparency of architecture. Increased understanding of the architecture hopefully leads to improved structural quality (technology pillar) and transparency of the process (process pillar).
The Technology Pillar
Architecture All the Way Down
primarily focused on the technology pillar. The visual at right (click
to enlarge) illustrates this view. Again, we see the huge gap that
exists if we fail to emphasize the importance of modularity. The
rightmost portion illustrates how modularity fills the gap -
architecture all the way down. Of course, other gaps are also created
if we ignore any of the other aspects, such as class design. Note that
as we move from services to modules to packages and classes, we
increase the granularity along the way. Our classes should not be as
fine-grained as our modules, nor our modules as fine-grained as our
services.
Additionally, each entity solves a different type of problem (or provides a different type of advantage), as illustrated by the bars at the bottom. All are units of composition, but only services and modules are units of deployment. Services are reused through distributed computing, whereas module reuse is constrained by process boundaries. The technology pillar affects the other pillars. An inflexible rigid architecture makes it difficult for people to understand and communicate (social pillar) and inhibits how quickly we’re able to respond to change (process pillar).
The Process Pillar
The
process pillar is one that I’ve not spent much time discussing.
Certainly, it’s important though, and includes various aspects like
deferring commitment to significant architectural decisions,
evolutionary and emergent architecture, and reversibility. The visual
at right illustrates the process pillar (click to enlarge). It’s not as
descriptive as the other diagrams, I admit. Anyone have something
better that illustrates the process pillar?
I did talk a little about these ideas in Agile Architecture, Lean Principles. But certainly more needs to be fleshed out surrounding the process pillar. This tends to be where most spend their time when discussing agile architecture, but the other pillars are certainly important. The process pillar affects the other pillars. A bad process accompanied by bad practices results in an inflexible architecture (technology pillar) that noone is able to understand (social pillar).
Opinions expressed by DZone contributors are their own.
Comments