Whenever i was in a new development project,i have seen this.People show few diagrams with box and line notations and explain something about the architecture of the system that we are going to build. The ceremony of the architecture is short lived with a few diagrams and one or two useless sessions.Sometimes it is really frustrating that people explain the architecture of the technology we are going to use rather than the software architecture of our system.
If you try to find out what is software architecture You can get "n" number of definitions. Or else you may define as "Software architecture is a part of a activity in our process to fill the documents","Software architecture is the thing we consider when an entropy of our system is out of control".
Ok, Let's have a look at one authoritative definition from SEI people(Len Bass,Paul Clements,Rick Kazman). "The Software architecture of a program or a computing system is the structure or structures of the system which comprises the software elements, the externally visible properties of those elements and the relationship among them".The externally visible properties means what kind of service it exposes,the fault handling mechanisms, usage of shared resource etc...
To put it simply, Software architecture is the communication of explicit and documented design decisions to solve particular or set of business goals.It consists the software structures,collaborations and dynamics between them. Moreover it helps us to identify the non-functional requirements with the presence of functional requirements.Usually these non-functional requirements and denoted as the "ilities" of the system.These are the quality attributes such as performance, Usability, Configurability, Maintainability, Extensibility, Security, Availability, Scalability, Modularity, Interoperability, Testability and any other "ility" you are really interested when building systems.
And why software architecture is important?
It improves the communication between stakeholders.
Early design decisions.
Transferable abstractions of the system - Transferable abstractions means that you have derived some appropriate abstractions from your system. These can be transferable or reusable in some other contexts outside of the system or other system.
The best thing about software architecture is you can get it before building the system. What is best in it? We all know that business goals produces requirements and requirements produces software architecture.Imagine that if you give some identical requirements to two different persons will they build the same system. The answer is "No". Even if the systems built satisfy the same purposes there may be some difference between them in terms of structures, collaboration and dynamics.
So now you have the two systems built and how do you choose which one is better?. Based on some quality attributes and analysis, you have chosen one system is the best. But this is not the right choice in the production environment and you cannot create better systems based on trial and error by evaluating once they are built.
So if you have the software architecture you can evaluate it in the presence of prioritized scenarios and identify how well the architecture satisfies particular quality goals and find out how the quality goals interact.So that you can identify risks earlier rather than building the system and then identifying the risks later.
Happy architecting...