Software Architect — I

Hari Prasad
ReDive
Published in
5 min readNov 17, 2021

Do you know what are the roles and responsibilities a software architect plays? Do you even know about the actual definition of an architect? Even you do a google search about Software architect, you get different definitions and they explain certain roles and responsibilities which were defined by a specific organization. And it varies across different organization. So who is a software architect really?

Architecture is about the important stuff… Whatever that is. — Ralph Johnson

The base of this article is from the book, “The Fundamentals of Software architecture” written by Mark Richards & Neal Ford. I do recommend to learn from this book. The one which I have explained here are some of the snippets from the actual book.

Fundamentals of Software Architecture — Image from Thoughtworks.com

What is a Software Architecture?

In order to understand fully about an architecture of a system, one should be familiar with the

  • Architectural Characteristics
  • Architectural decisions and
  • Design principles

Architectural characteristics define the success criteria of a system. For e.g. Availability, Reliability, Performance, Deployability, Testability, Scalability, Security, etc.,

Architectural decisions define the design decisions the architect takes, along with trade-offs. If one cannot implement an architectural decision at some part of the system due to some constraint, then it is called a Variance.

Everything in software architecture is a tradeoff. — First law of Software Architecture

Why is more important than How — Second law of Software Architecture

Apache Kafka — Event queues

Design principles differs from the architectural decisions. It is a guidance that the development team should leverage. Architect will not decide the technology but only the design which they should be achieving. For e.g. consider the architect provides a guidance to the development team that they should be implementing an event queuing mechanism (follows Pub/Sub pattern) for microservices which handles database transactions, where the network connection is not reliable and event queuing can prevent the loss of transaction by queuing the transactions in an event log and later publishes the transactions once the network connection is established. The development team can choose the best event queue technology available or the one they have knowledge.

Expectations of an Architect

Defining the role of an architect is difficult to allocate him in a confined space. There are some expectations defined by the author as below.

  • Make architecture decisions
  • Continually analyze the architecture
  • Keep current with latest trends
  • Ensure compliance with decisions
  • Diverse exposure and experience
  • Having business domain knowledge
  • Possess interpersonal skills
  • Understand and navigate politics :smirk:

Nothing in a software world is static. An architect may design a system to meet certain criteria, but that design must survive the changes driven by the business requirements. So he must develop an Evolutionary architecture. How can he validate that the changes doesn’t affect the existing architectural characteristics, decisions and design principles? Using Fitness functions. It is a metric which tells whether the architecture still holds its abilities even after the change is made. For every change pushed by the developer, the CI system should run the fitness function to validate the architecture.

Fitness Function

Analyzing Trade-offs

As a software developer, he/she is expected to have technical depth over the technology he/she knows or experienced with. A developer is not expected to have knowledge over different technologies as he should be able to implement business solutions and solve critical issues in an application which is developed using a preferred technology. But it is a developer’s choice to have knowledge in multiple technologies (e.g. Full stack developer).

Every software programmer knows about certain technology stuff. But he also knows about the lack of knowledge in certain technologies. Also he might lack knowledge in the technology stuffs which he even not aware off.

As a Software Architect, he/she is expected to have technical depth in a particular technology but also should have technical breadth over wide range of available technologies, to know about the pros and cons of different technologies and analyze the trade-offs in choosing a particular technology for an architectural solution.

Architecture is the stuff you cant google — Mark Richards

One should know about multiple solutions existing for a certain problem and also the trade-offs in using each one of them. Consider the architect decides to use pub/sub pattern. For this there are multiple solutions existing,

  1. Streaming the data
  2. Event aggregation
  3. AMQP
  4. publishing Topics (MQTT)

For each of the solution, he/she should be able to analyze the pros and cons and guide the development team in implementing the best solution which is satisfying the characteristics of a business problem.

Technical Breadth and Depth

Metrics

There are certain metrics like LCOM (Lack of cohesion in methods), afferent /efferent Coupling, varieties of Connascence, Abstraction and Instability which were explained in detailed within the book. I would recommend to read it than to be explained here. May be you can search over these concepts to learn about the fitness functions and metrics which deals with the success criteria of an architecture.

There is nothing called a generic architecture. One cannot define it as it is an anti-pattern and it has its own complexities in maintaining a complete characteristics in a single architecture.

Remember, An architecture is about trade-offs.

--

--

Hari Prasad
ReDive
Editor for

Hari is a software professional with an experience of morethan 13 years in software industry. Wishes to be updated in latest technological trends.