John Mitchell recently posed a question on his blog asking about the difference between design and architecture. He argues that, when people use the term architecture, they are just talking about design. I
Between "design" and "architecture", "design" is easier to express and comprehend.
For most of us, design is a somewhat coarse-grained structure of the software. It usually describes the relation between various artifacts in the software. For example, one design might describe relationships between interfaces, classes etc. Another design for a different software may describe a more coarse-grained view of the software in terms of components, services, data sources, their relationships etc. In both cases, designs tend to be express the designers’ intent of how various bits and pieces of software may look like.
Architecture is a different kind of a beast. When you ask someone to explain the architecture of their software, he or she might draw a few boxes with lines or arrows between those boxes. This is not architecture. Such a diagram can at best express a highly coarse-grained structure of the software. We might as well call it "boxitecture". Its granularity may be too coarse to be useful to guide an implementation, and hence may not be called design. My observation is that, people use their understanding of the design of the software to express some higher-level view as boxes and lines, and tend to call it architecture.
As a concept, architecture may be too broad to define. Most software pundits use different kinds of views (use case, network etc.) to describe architecture. But those descriptions tend to too academic to adequately capture the essence of architecture. Any description of "architecture" should describe the set of rules and constraints behind the design, and answer questions on performance, scalability, extensibility etc. Roy Fielding describes this notion with "architectural styles" in his
To summarize, design is not architecture. Boxes and lines don’t either describe architecture. Architecture is more than just the structure of the software and the data flow. Whatever description used to describe architecture should adequately describe the rules/constraints underlying the software design.