What is “Architecture”?
The term “software architecture” is really hard to nail down. Different people have been defining it differently since we began writing software. I am not going to be able to tell you exactly what it is, but I can give you an idea as to what people are saying. By understanding that no one agrees on what architecture means, you can throw out the term more carefully as you talk with other developers.
First, I want to share one my favorite “white papers.” I, for many years, didn’t know what people meant when they said architecture (actually, they probably didn’t either) but after reading this 3 page paper by Martin Fowler, I finally wrapped my head around it. The document is titled “Who Needs an Architect” and can be downloaded from the author’s site. The light bulb when on for me when I read these lines…
“Remember Johnson’s secondary definition: “Architecture is the decisions that you wish you could get right early in a project.” Why do people feel the need to get some things right early in the project? The answer, of course, is because they perceive those things as hard hard to change. So you might end up defining architecture as “things that people perceive as hard to change”
“There is no theoretical reason that anything is hard to change about software. If you pick any one aspect of software then you can make it easy to change, but we don’t know how to make everything easy to change. Making something easy to change makes the overall system a little more complex, and making everything easy to change makes the entire system very complex. Complexity is what makes software hard to change. That, and duplication.”
Finally, now that makes sense to me. I’d paraphrase it as “The parts of a software system that you need to get right, the first time.” In the article, there is a discussion about a building. They mention the basement. When you have a home, you can change the interior around, add new paint, take down a wall, put up a wall, even build a new addition. However, the basement is the foundation. It’s not going anywhere. You can modify a house, but you can’t modify the basement. The basement makes up the home’s “architecture,” (but don’t confuse the basement with a database.)
Different people have been defining it differently since we began writing software.
I made this pretty bold statement to start off this explanation. Well, I have the proof to back it up. The Software Engineering Institute has a website. At it, they bring together published Modern, Classic, and Bibliographic Definitions of architecture. They also allow the “community” to submit their own definitions. They have one to two hundred definitions from senior analysts, project managers, software architects, doctors, and other “really important people.” These definitions follow many different themes, from definitions around concrete software, to definitions based on only the concepts of the software. Check out this list of Community Software Architecture Definitions for yourself.
We’ll finish this off by sharing some content off of page 13 of a white paper titled Building Enterprise Architecture from Endava.com
Architecture is defined as a subset of the design. While it is difficult
to define which subset, the following definitions help:“The highest-level concept of a system in its environment.â€
(IEEE)The organization or structure of significant components, and
their interactions.An abstraction of a system’s implementation.
The parts or aspects of the design that are considered
important.The parts or aspects of the design that need to be
understood by many people, the shared understanding of
the system designThe decisions that are (or are thought to be) hard to change.
Another shining example of how many different definitions for Architecture there is.
Want to share your definition? What did you learn architecture to be?
Richard 7:36 pm on April 15, 2008 Permalink
Your basement analogy is a good one, but I think it’s more subtle than that. My house doesn’t have a basement, but it does have a foundation. Sure, I can change some walls around, but not all of them. I can make cosmetic changes all I want, turning a bedroom into a den, for example, and vice versa.
Other changes are more fundamental. I could not, for example, move my kitchen to another location without repiping most of the house. I can’t add certain walls unless I address the ductwork and airflow (to prevent freezing in a closed off space). I suppose I could simply replace the furnace with something more powerful to compensate, but it seems to me that would be the same thing as upgrading a server just to compensate for crappy inefficient code.
(I’m not a technical person, just someone who writes about technology)
White Paper Pundit » Blog Archive » Using White Paper Terms: Architecture 10:34 am on April 16, 2008 Permalink
[...] to author Martin Fowler, in a white paper entitled, “Who Needs an Architectâ€, he describes the term [...]
Development, Eclipse, Google, Web and other forecasts « Mantrid’s Weblog 5:42 am on April 25, 2008 Permalink
[...] It is hard to define what exacly an architecture actually is. Here are some ideas. [...]
Ocean 11:23 am on May 2, 2008 Permalink
You could just as well reverse the conclusion: architecture is those parts of the system that are most prone to change. This would make a bit more sense since the parts that don’t change often contribute very little value.
Dan Sickles 11:16 pm on March 8, 2009 Permalink
A recent article on this subject:
http://www.ibm.com/developerworks/java/library/j-eaed1/index.html