Text 3A7AAA
Software architecture is a complex topic. Due to its
complexity, our profession has produced a variety of definitions,
each more or less useful depending on your point of view. Here is
a definition from my first book, Journey of the Software
Professional: “A system architecture defines the basic “structure”
of the system (e.g., the high level modules comprising the major
functions of the system, the management and distribution of data,
the kind and style of its user interface, what platform(s) will it run
on and so forth)”.
This definition is pretty consistent with many others.
However, it lacks some important elements, such as specific
technology choices and the required capabilities of the desired
system. A colleague of mine, Myron Ahn, created the following
definition of software architecture. It is a bit more expansive and
covers a bit more ground than my original: “Software architecture
is the sum of the nontrivial modules, processes, and data of the
system, their structure and exact relationships to each other, how
they can be and are expected to be extended and modified, and on
which technologies they depend, from which one can deduce the
exact capabilities and flexibilities of the system, and from which
one can form a plan for the implementation or modification of the
system”.
We could extend these definitions from the technical point
of view, but this wouldn’t provide a lot of value. More than any
other aspect of the system, architecture deals with the “big picture”.
The real key to understanding it is to adopt this big picture.
Moreover, while these definitions are useful, they are far too
simplistic to take into account the full set of forces that shape, and
are shaped by, an architecture. In truth, I doubt that any single
definition of software architecture will ever capture all of what we
believe to be important.
Luke Hohmann. Defining software architecture. In: Beyond
software architecture: creating and sustaining winning
solutions. Boston: Addison-Wesley, 2003, p. 1-2 (adapted).