Jump to content

Software architect

From Wikipedia, the free encyclopedia

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]
  1. ^ "Software Architecture". Software Engineering Institute. Carnegie Mellon University. Retrieved 29 June 2022.
  2. ^ a b c Fundamentals of Software Architecture: An Engineering Approach. O'Reilly Media. 2020. ISBN 978-1492043454.
[edit]