Software architecture - alexanderteplov/computer-science GitHub Wiki
- Expert developers' shared understanding of the system design.
- The decisions that are hard to change.
- The important stuff. Software architecture forces us to recognize what is really important and how to deal with it.
© Martin Fowler
- software elements (modules)
- relations among them (connections and communication protocols)
- properties of both elements and relations (quality attributes)
- constraints
- Identify Stakeholders (to communicate with)
- Understand the Problem, Functional Requirements (solve a valid business problem or have a recognizable return on investment (ROI))
- Identify Design Elements and their Relationships (boundaries and context of the system)
- Evaluate the Architecture Design (Non-Functional Requirements, quality attributes, constraints)
- Prioritize quality attributes (trade-off analysis, suffer ones for others)
- Transform the Architecture Design (quality attributes oriented - optimization of solutions using various patterns)
- Document the results (to facilitate communication between stakeholders)