Software Architecture Guide

Mục lục bài viết

What is architecture?

People in the software world have long argued about a definition of
architecture. For some it’s something like the fundamental organization of
a system, or the way the highest level components are wired together. My
thinking on this was shaped by an email exchange
with Ralph Johnson, who questioned this phrasing, arguing that
there was no objective way to define what was fundamental, or high level
and that a better view of architecture was the shared understanding that
the expert developers have of the system design.

A second common style of definition for architecture is that it’s “the design
decisions that need to be made early in a project”, but Ralph complained about this
too, saying that it was more like the decisions you wish you could get right early
in a project
.

His conclusion was that “Architecture is about the important stuff. Whatever that
is”
. On first blush, that sounds trite, but I find it carries a lot of richness. It
means that the heart of thinking architecturally about software is to decide what is
important, (i.e. what is architectural), and then expend energy on keeping those
architectural elements in good condition. For a developer to become an architect,
they need to be able to recognize what elements are important, recognizing what
elements are likely to result in serious problems should they not be controlled.