Software Architect
Tags: architecture, architect, softwareengineering
Published: 2023-09-08 23:37:44


Software Architect is an expert developer who design software solutions from the ground up, making high-level decisions about each stage of the process including technical standards, tools, design principles, platforms to be used, etc., leading a team of engineers to create the final product.

A software architect makes high-level design choices and frames technical standards. This might include tools, software coding standards, or platforms to be used. To be effective, a software architect needs broad (and deep) technical knowledge to make good decisions.

An architect is expected to define the architecture decisions and design principles used to guide technology decisions within the team, the  department, or across the enterprise.

## Types of architect
Difference between the types of architect and the style that Dave Rice exemplifies.
1. **Architectus Reloadus** is the person who makes all the important decisions. The architect does this because a single mind is needed to ensure a system’s conceptual integrity. Often, such decisions must be made early on so that everyone else has a plan to follow. 
2. **Architectus Oryzus**, this kind of architect must be very aware of what’s going on in the project, looking out for important issues and tackling them before they become a serious problem. 

The most noticeable part of the architect's work is the **intense collaboration** and **guidance**. 

## Expectations of an Architect
Defining the role of a software architect presents as much difficultly as defining software architecture. Thus, we should focus on the expectations of an architect.

There are eight core expectations placed on a software architect, irrespective of any given role, title, or job description. The first key to effectiveness and success in the software architect role depends on understanding and practicing each of these expectations.

### Make Architecture Decisions

_An architect is expected to define the architecture decisions and design principles used to guide technology decisions within the team, the department, or across the enterprise._

An architect should guide rather than specify technology choices An architect should instead instruct development teams to identify the strengths and weaknesses of each framework, contextualize the problem to be solved, and let the team select the best fit for it.

For example, an architect should advice about the the strong a reactive-based framework for front-end web development, hence guiding the development team in making the choice between Angular, React.js, Vue, or any of the other host of reactive-based web frameworks.

### Continually Analyze the Architecture
_An architect is expected to continually analyze the architecture and current technology environment, and recommend solutions for improvement._

Architects must focus their energies on continually analyzing existing architectures to maintain or improve architecture characteristics as software evolves. An architect must holistically analyze changes in technology and problem domain to determine the soundness of the architecture.

### Keep Current With Latest Trends
_An architect is expected to keep current with the latest technology and industry trends._

The decisions an architect makes tend to be long lasting and generally difficult to change. Understanding and following key trends helps the architect prepare for the future and also helps the architect make the correct decision.

### Ensure Compliance With Decisions
_An architect is expected to ensure compliance with architecture decisions and design principles._

Ensuring compliance means that the architect is continually verifying that development teams are following the architecture decisions and design principles defined, documented, and communicated by the architect. 

### Diverse Exposure and Experience
_An architect is expected to have exposure to multiple and diverse technologies, frameworks, platforms, and environments._

An architect must at least be familiar with a variety of varying technologies. Most environments are heterogeneous, and at a minimum an architect should know how to interface with multiple systems and services, irrespective of the language, platform, and technology those systems or services are written in.

### Have Business Domain Knowledge
_An architect is expected to have a certain level of business domain expertise._

Effective software architects understand not only technology but also the business domain of a problem space. Without business domain knowledge, it is difficult to understand the business problem, goals, and requirements, making it difficult to design an effective architecture to meet the requirements of the business.

### Possess Interpersonal Skills
_An architect is expected to possess exceptional interpersonal skills, including teamwork, facilitation, and team leadership._

An architect is not only expected to provide technical guidance on the team, but also expected to lead the development teams through the implementation of the architecture. Leadership skills are at least half what it takes to become effective software architect, regardless of the role or title the architect has.

### Understand and Navigate Politics
_An architect is expected to understand the political climate of the enterprise and be able to navigate the politics._

Almost every decision an architect makes will be challenged. Architectural decisions will be challenged by product owners, project managers, and business stakeholders due to increased costs or increased effort (time) involved.

Architectural decisions will also be challenged by developers who feel their approach is better. In either case, the architect must navigate the politics of the company and apply basic negotiation skills to get most decisions approved.

## Resources
1. Fowler, M. (2003). Who Needs an Architect?. IEEE Computer Society. https://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
2. Richards, M. (2022). Software architecture patterns. 2nd Edition.

## Acknowledgments
- Cover image by [@kaleidico](https://unsplash.com/@kaleidico) on [Unsplash](https://unsplash.com/license)