Software Architecture and Architects

As a consultant, a question I got a lot is what is software architecture anyways? What should architecture do, what is the skillset it needs to have? So, first of all, I believe everybody in your team should be a software architect. That's the silicon valley way. Brazil has a huge demand and very few qualified people for us to work in that model which ends up having a few software architects per company. Hiring is extremely complicated, slow and difficult and easily you will pay a lot for someone who is not a proficient architect. However, develop these skills is a good idea for every engineer there are a couple of problems like A) Not everybody wants to be an Architect. B) It takes time. Companies dont have time and the demand is here; So this forces a pre-mature software architect exposure. At the end of the day, it does not mean this is a bad thing. Having opportunities is great for everybody but it all depends on how you develop and use your opportunities.  Going back to the basic questions, what is software architecture anyways?

What is Software Architecture

Architecture is about Big Rocks. Which means you won't fix all problems at the architecture level. Architecture is about the foundation. Foundation is about structure and important tech decisions like should we build the component in Rust or Go. Should we use Cassandra or Postgres? The structure can also be seen as design decisions like should we use Port and Adapters or MVC or We need to have these classes working on that way.

The Software Architect Skillset

There are several skills a software architect needs to have. Leadership is one of the main skills. You need to be able to provide Guidance for the engineers. Talk with the business and the customers in order to get Requirements and get ahead of problems before they happen. There other important problem-solving skills you need to have like Critical Thinking, System Thinking. A solid architect knows architecture models like Soa, Microservices, Serverless, Monolith, Actors, Seda, EDA, and so on and on... A solid architect knows Design patterns like Gof, OOP patterns, FPpatterns and principles, REST, EIP, EAI, and much more.  Architecture is about Trade-offs, a software architect needs to be able to evaluate trade-offs properly.

algorithms, Data Structures, Databases, and Cloud computing are must-have skills for a proficient architect. DevOps engineering is not optional, there is no way to design a solution and does not automate, add observability and think and operate properly in production.

I always believed engineers are smart and you should threaten them as smart people. I never like the idea that all problems should be handled on the architecture and all Jars and problems should be abstracted away from the engineers, this is non-sense.

It's super important to know what not to do and what technology not use and why. At the end of the day it boils down to use-cases and proper homework. Thinking about the nature of things helps a lot.

Video

I recorded a video talking about: Architecture and Architects and I hope you guys like it.


Architecture and Architects from Diego Pacheco on Vimeo.


On the video I will be also answering the following questions:
 - Do you want to be an arch?
 - Should the Arch CODE? Powerpoint architect?
 - Java Architect Vs Software Architect
 - How much experience do I need to have?
 - How to Improve? How to become an Arch?

Take care! Stay Home, Stay Safe.

Cheers,
Diego Pacheco

Popular posts from this blog

Kafka Streams with Java 15

Rust and Java Interoperability

HMAC in Java