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).