Recently a colleague gave me an interesting definition of Software Architecture he heard at a conference. It was something like:
Software Architecture is the sum of all decisions made for a software product.
Maybe this is true in some way, but I’d prefer a definition that emphasizes the overview aspect of architecture. In the IEEE standard “1471-2000 – IEEE Recommended Practice for Architectural Description for Software-Intensive Systems” a definition can be found that emphasizes this aspect:
The fundamental organization of a system, embodied in its components, their relationship to each other and the environment, and the principles governing its design and evolution.
Sounds good, however, I miss the aspect that a software architecture doesn’t suddenly appear out of nowhere. It is more a process than an entity. A process that never ends, the Architecture constantly changes and erodes during a product’s lifetime. It is the outcome of a tremendous amount of communication and also used in communication to a lot of stakeholders. I found a definition with more regards to this aspect in the “Microsoft Application Architecture Guide, 2nd Edition”:
Software application architecture is the process of defining a structured solution that meets all of the technical and operational requirements, while optimizing common quality attributes such as performance, security, and manageability. It involves a series of decisions based on a wide range of factors, and each of these decisions can have considerable impact on the quality, performance, maintainability, and overall success of the application.
Well, after all I’m still not 100%ly confident with this definitions. What would be your definition ?