Effective Software Architecture Design addresses architecturally significant requirements, effectively. A structured process should be followed to bring consistency and ensure effectiveness of architecture design.
There are few good books on software architecture design. One of my favorite is Software Architecture in Practice, 3rd Edition.
The process, I follow is simple 4 steps process,
- Identify ASRs (Architecturally Significant Requirements)
- Identify Design Options to Address ASRs
- Balance the Impact of Design Options
- Finalize and Record the Design Decisions
Identify ASRs (Architecturally Significant Requirements)
Identify ASRs is the first step to effective software architecture but, not so easy as in most of the cases, ASRs are not readily available. Eliciting ASRs are not as simple as functional/business requirements. ASRs may not be all functional and understood by the stakeholders so need more effort and learning curve for the stakeholders before they can suggest the ASRs. ASRs are the requirements which are most critical and have wide spread impact on the system’s Architecture. Here is some info from Wikipedia.
The ASRs include,
- Business Drivers
- Functional Requirements
- Quality Attributes
Identify Design Options to Address ASRs
Identify Design Options to Address ASRs is next step to design the architecture. In this step, Architect selects design options to address one or more ASRs. Here, we should understand that a design option will impose constraints and limit the choices for future design options so identifying the initial design decisions will have major impact on the shape of the architecture.
So, start with the design decisions which can address most important ASRs for the system. Generally, It starts with Identifying the architectural approaches i.e. architecture styles such as Monolith, Layered, SOA etc., which will shape the system’s overall structure and guide the rest of the design and also limit the options for ex. If we select SOA then we should be following SOA design patterns and guidance to address rest of the ASRs.
Balance the Impact of Design Options
Balance the Impact of Design Options is about comparing the design options and choosing the ones, which minimize the negative impact on each other. It also about reducing the impact of design decisions, which are too good to be handled by the system.
So, balancing is an act of satisfying most important ASRs while making trade-off decisions. Every design decision has positive impact on some of the ASRs but negative impact on others for ex. performance and security contradict to each other most of the time for ex. encryption improves the security but reduces the performance.
The process of making trade-offs is to balance the impact by removing/reducing the negative impact of design decisions on high priority ASRs.
Finalize and Record the Design Decisions
Finalize and Record the Design Decisions, once the design options are compared and balanced to have the right mix of design options to address ASRs. These should be finalized and recorded for the Architecture.
Thank You and Happy Reading !