Software Architecture

What is Software architecture?
Software architecture is the process of defining a structured solution that fulfils all of the technical and operational requirements, while optimizing common quality attributes such as performance, security, and manageability.

Architectural decision is based on several factors

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.
Architectural decision includes the selection of the structural elements and their interfaces by which the system is composed.

Consider the following high level concerns when thinking about software architecture:
• How will the users be using the application?
• How will the application be deployed into production and managed?
• What are the quality attribute requirements for the application, such as security, performance, concurrency, internationalization, and configuration?
• How can the application be designed to be flexible and maintainable over time?
• What are the architectural trends that might impact your application now or after it has been deployed?
Software architectural documents need to be simple and to be created with different views based on requirement of viewers which can be business analyst, software developers, tech leads.

Role and Goal of Software architecture
Application architecture seeks to build a bridge between business requirements and technical requirements by understanding use cases, and then finding ways to implement those use cases in the software.
The goal of architecture is to identify the requirements that affect the structure of the application.
Good architecture are good leaders too, which need to gain team respect and can guide through technical implementation.
Software architecture should have quality of communication, collaboration, clarity and simplicity.
A good design is flexible enough to be able to handle the natural drift that will occur over time in hardware and software technology, as well as in user scenarios and requirements.
Keep in mind that the architecture should:
• Expose the structure of the system but hide the implementation details.
• Realize all of the use cases and scenarios.
• Try to address the requirements of various stakeholders.
• Handle both functional and quality requirements.
• Be visionary.

Take first step to become Software Architecture:
As in an initial step towards adapting role of Software Architecture you need to achieve more technical breadth.
In order to gain more technical breath is to convert stuff that you know but you don’t know to stuff that you know.
Stuff that you know – which you do everyday things you are expert in.
Stuff that you know, you don’t know – which you have heard from somewhere that is now a days in practice but you have never use it practically. For example you know about microservices but you have never coded any. Attend conferences and increase knowledge which in turn increases technical breadth.