Software architect
A software architect is a software engineer responsible for high-level design choices related to overall system structure and behavior.[1]
It's software architect's responsibility to match architectural characteristics (aka non-functional requirements) with business requirements. For example: [2]
- Having a high customer satisfactions requires availability, fault tolerance, security, testability, recoverability, agility and performance in the system.
- Doing mergers and acquisitions (M&A) requires extensibility, scalability, adaptability, and interoperability
- Constrained budget and time requires feasibility and simplicity
- Faster time-to-market requires maintainability, testability and deployability.
Strategies for Software Architects to Handle Uncertainty
[edit]Software architecture and, subsequently, software architects inherently deal with uncertainties. It is the software architect's job to decide the size of architectural components, which can significantly influence a system's outcomes, both positively and negatively. Neal Ford and Mark Richards propose an iterative approach to address the challenge of identifying and right-sizing components. This method emphasizes continuous refinement as teams develop a more nuanced understanding of system behavior and requirements. [2]
The approach typically involves a cycle with several stages: [2]
- A high-level partitioning strategy is established, often categorized as technical or domain-based. Guidelines for the smallest meaningful deployable unit, referred to as "quanta," are defined. While these foundational decisions are made early, they may be revisited later in the cycle if necessary.
- Initial components are identified based on the established strategy.
- Requirements are assigned to the identified components.
- The roles and responsibilities of each component are analyzed to ensure clarity and minimize overlap.
- Architectural characteristics, such as scalability, fault tolerance, and maintainability, are evaluated.
- Components may be restructured based on feedback from development teams.
This cycle serves as a general framework and can be adapted to different domains.
See also
[edit]References
[edit]- ^ "Software Architecture". Software Engineering Institute. Carnegie Mellon University. Retrieved 29 June 2022.
- ^ a b c Fundamentals of Software Architecture: An Engineering Approach. O'Reilly Media. 2020. ISBN 978-1492043454.
External links
[edit]