In this post, we will learn about software architect.

This is a note for me while I’m reading the book “Head First Software Architecture” by Raju Gandhi, Mark Richards & Neal Ford.

TL;DR

  1. Software architect basics
  2. Know your capabilities ( current )
  3. The two law of software architecture
  4. Logical components

Okay, let’s go further the details

Know your capabilities

Architectural characteristics (the capabilities of an architecture) are the fundamental building blocks of any system.

Architectural characteristics are the nonfunctional requirements that define the behavior of a system. They are the qualities that define the system’s behavior, such as performance, scalability, availability, security, and maintainability.

Architectural decision present the problem domain

Architectural style are the decisions we make after doing a trade-off analysis of the architectural characteristics.

Architectural characteristics and logical components together help us decide on the architectural style.

Process architecture characteristics are where the software development process intersects with the architecture.

Modularity affects hwo architect partition behavior and organize logical building blocks.

Agility is a combination of testability, deployability, and modularity

Deployability is how easy it is to deploy the system.

Extensibility is how easy it is to add new features to the system. This may encompass architectural structure, engineering practices, internal design, and governance.

Decouple-ability is how easy it is to change the system without affecting other parts of the system.

Structural architecture characteristics affect the internal structure of the software system, including factors like the degree of coupling between components and the relationships between different integration points.

Security is the ability to protect the system from unauthorized access and to ensure the confidentiality, integrity, and availability of the system.

Maintainability is the ability to maintain the system over time, including the ability to fix bugs, add new features, and refactor the system.

Extensibility is the ability to add new features to the system without affecting the existing system.

Portability is the ability to run the system on different platforms.

Localization is the ability to adapt the system to different languages and regions.

Operational architectural characteristics represent how architectural decisions influence what operations team members do.

Scalability is the ability to handle increasing loads without affecting the system’s performance.

Availability is the ability to keep the system running and accessible to users.

Recoverability is the ability to recover from failures.

Robustness is the ability to handle unexpected inputs and conditions.

Performance is the ability to meet the system’s performance requirements.

Reliability is the ability to keep the system running without failures.

Cross-cutting architectural characteristics are those that affect multiple aspects of the system.

Security is the ability to protect the system from unauthorized access and to ensure the confidentiality, integrity, and availability of the system.

Legal and regulatory compliance is the ability to comply with legal and regulatory requirements.

Authentication / authorization is the ability to authenticate and authorize users.

Privacy is the ability to protect user data.

Accessibility is the ability to make the system accessible to users with disabilities.

Usability is the ability to make the system easy to use.

Summary

Some architectural characteristics are implicit: not explicitly started in requirements but are still important.

Architects should limit the number of architectural characteristics they consider to some small number, such as six or seven.

Learn to translate business requirements into architectural characteristics.

Some architectural characteristics overlap with operational concerns (such as scalability and availability) and cross-cutting concerns (such as security and privacy).

Some architectural characteristics come from domain or environmental knowledge, outside of the requirements of a specific application.