Say you are about to build your first dream home. But a building is so complex! You’d be bombarded with a lot of requirements to figure out and plan things before you start. So as a first step, you’d bring in a person who has a track record of helping people figure out their needs. An architect!
An architect structurally breaks down the abstract idea of ‘home’ into its subunits and theoretically model it on papers. And when you throw some constraints at him like budget, climate conditions in your area, style requirements, material choices, etc, he’d accommodate for all this, sort things out, and hand you the design plan. The blueprint!
Now with this blueprint, you can ask the engineers and the builders to start their work with confidence. There will be no room for errors as everything has been thought through, laid out on paper, and all requirements have been met.
When building software, the process is the same.
Software architecture is the high-level art of planning, designing, and visualising a blueprint on how a software application should be built and operated, proactively assessing all stakeholders and risks involved.
In other words, software architecture is the process of designing a structured blueprint of required software components, their assembly, their properties like maintainability, scalability, interoperability, reusability, security, their relationships with one another, and finally tying it all to satisfy the business requirement and all its stakeholders.
But how is it actually visualised on paper?Remember how you draw flowcharts for simplifying complex logic? Similarly, for software architecture and planning, UML diagrams are widely used to model the architecture.
Architecture is a very critical process as most of the things an architect would decide in this phase will be a permanent inclusion of the software (with some breathing room and plasticity). Most of the decisions made in the architectural phase of a project are irreversible or costly to rollback. Exactly like building your home! 🤷🏻♂️ No room for failures!