avatarAli Zeynalli

Summary

The web content outlines the essential skills, knowledge areas, and roles of a Software Architect, emphasizing the importance of both technical and social expertise.

Abstract

The article "How to Become a Strong Software Architect" provides a comprehensive roadmap for individuals aspiring to the role. It categorizes Software Architects into various types, such as Solution, Enterprise, Domain, and Functional, each with distinct responsibilities and skill sets. The piece underscores the necessity of a deep understanding of data structures and algorithms, proficiency in the current tech stack, and adherence to clean coding practices. It also highlights the importance of Object-Oriented Programming (OOP), design patterns, S.O.L.I.D. principles, and system design knowledge. The article suggests resources like books on algorithms, clean code, and software architecture, and emphasizes the value of documentation and certifications. It concludes by acknowledging the time and effort required to become a Software Architect and provides links to relevant articles for further reading.

Opinions

  • The author believes that Software Architects are "Super Senior Developers," suggesting a high level of expertise and experience is required for the role.
  • There is an emphasis on the balance between technical and business skills, with a graph illustrating the relationship between the two for different architect roles.
  • The article suggests that while writing algorithms from scratch is rare, understanding them is crucial for making informed technical decisions.
  • Clean coding is presented as a priority, with performance, memory usage, and adherence to OOP techniques being key considerations during code reviews.
  • Design Patterns, as introduced by the "Gang of Four" (GoF), are considered vital for effective object-oriented design.
  • The S.O.L.I.D. principles and Cohesion/Coupling Principles are regarded as fundamental for software component design and high-level system design.
  • System Design is recognized as a critical skill, with Domain-Driven Design as a starting point and various architecture patterns to be familiar with, depending on the project.
  • Documentation is highlighted as an indispensable part of a Software Architect's duties, with tools like draw.io, plantUml, yEd, and MS Visio recommended for creating diagrams and documentation.
  • Certifications, such as the Certified Professional for Software Architecture (CPSA®) by iSAQB®, are acknowledged as valuable but not strictly necessary for success in the field.

How to Become a Strong Software Architect

Roadmap of a Software Architect

Photo by Danist Soh on Unsplash

Software Architects are senior level actors in software development team. It takes time and experience to become the one. The skills and knowledge that you need to accumulate are cross-functional. Besides having challenges first of all in technical sphere, this position also demands from architects to have a well-established social skills. Before starting to look at master plan for becoming a software architect, let us have a glance at typical types of software architects:

  • Solution Architect/Software Architect — low-level architect that is usually previous or active senior software engineer. He/She is in charge of technical design and architecture of a product with link to business people. Often leads developers.
  • Enterprise Architect — high-level architect that has overall “Big Picture” of a product with less information in details. This position mostly appears in very big complicated software products even sometimes just right after CTO.
  • Domain Architect — this is a popular form of software architects that are seen in multiple companies. The purpose of this position is to be an architect of specific use case, tech stack. For Example: cloud architects are responsible for a given cloud supplier. Data Architects are in charge of database operations, design, coordinations. Mobile Architects are taking care of mobile version of a software product. This counting can be very long…
  • Functional Architect — this type of architects are mainly in charge of business side, being less informed about technical world. Mostly this people are experienced business analysts that design and lead business logic of a software product.

We can extend this list further, since each company might have different name for a specific position. The roles and responsibilities of above given software architecture positions can vary from company to company but essence is the same. Take a look at following graph to have a better understanding in which relation different architect roles stand in respect to technical/business skills and knowledge.

Business versus Technical relation graph

Master Plan:

One thing should be till now crystal clear: Software Architects are Super Senior Developers (usually…) except those who really come from business background. I tried to list different topic areas out, in which software architects should be comfortable:

1.Data Structures and Algorithms — the very basic fundamentals of programming should be no problem for Software Architects. DTs such as Arrays, Queues, Stacks, LinkedLists, different types of Trees, Graphs should not only be familiar to a Software Architect, but he/she also should be able to recognise right moment where to use which DT. Well established Software Architect should know different algorithmic techniques like Searching, Sorting, Recursion, Dynamic Programming etc. In daily life, no architect writes for example “Merge Sort” algorithm from scratch, or discovers a new data structure. But knowing basics help them to make a right technical decision in especially pull request reviews.

Introduction to Algorithms

Bonus: Introduction To Algorithms is the perfect allrounder book to master DTs and Algos.

2.Tech Stack — whether it is backend or frontend, Software Architect must know currently used tech stack very well. Learning syntax of a specific programming language is the easiest think. But gaining experience is what it takes time. Different libraries and frameworks that software product bases are also valuable assets to know.

Clean Code

3.Clean Coding — getting a software system to work is not the ultimate goal what Software Architect targets. Every time Software Architect makes a code review first questions that come to his/her mind are: 1. Can I make this code more performant? Can I make this code to take up less memory? Do clean code standards are applied correctly? Can I make use of different OOP techniques? Bonus: Clean Code will definitely help you improve your refactoring skills.

4.OOP — Object Oriented Programming offers great possibilities to make software system more flexible, effective and readable. Experienced Software Architects are using those techniques regularly. (if tech stack suitable…)

Design Patterns

5. Software Design Patterns — speaking of OOP, we should not forget the importance of different Design Patterns that where firstly gathered and introduced by GoF. Knowing these Design Patterns will for sure help you make your software system better use of object oriented design. Bonus: take a look at this book for more information.

Clean Architecture

Bonus: following principles can be acquired from R.C.Martins famous book: Clean Architecture.

6. S.O.L.I.D. Principles — these component principles are fundamental techniques that need to be taken into account in software component design. Experienced Software Architect will quickly recognise violations in code, if he/she mastered these principles.

7. Cohesion/Coupling Principles — Principles like REP, CRP, ADP etc. are vital principles for a Software Architect especially when constructing, bundling plugins together/apart. So these techniques copes with more high-level design.

Software Architecture in Practice

8. System Design — There are plenty of Software Architecture patterns like: Master-Slave, Client-Server, Microservices, Model-View-Controller, Unidirectional Architecture depending on backend or frontend projects. Of course it is impossible to know all of them. But depending on a project, Software Architect should be master of underlying design. The very basics starting point is Domain Driven Design. Bonus: take a look at this book for more theory.

9. Documentation — this is a vital point in Software Architects daily work. Drawing different UML Diagrams, ARC42 documentation is inevitable part of this position. There are plenty of tools such as:

  • draw.io — free and easy-to-use tool
  • plantUml — plugin for IDEs like Eclipse, Intellij. Very useful and my favourite tool, drawing through scripting.
  • yEd — handy tool, available as a desktop app.
  • MS Visio — rich functionalities, but not Free!

10. Certificates — There not much certification alternatives for Software Architects that are globally renown but nevertheless, there is the International Software Architecture Qualification Board (iSAQB®) that offers the Certified Professional for Software Architecture (CPSA®) certification scheme. CPSA® certifications are globally recognised.

So becoming a Software Architect takes time and effort, as you can see from above list. But it is pretty doable :).

If you are interested in more Software Architecture topics take a look at below list.

Relevant Articles:

  1. Software Architecture Patterns for Front-End Development
  2. Software Architecture Cheat Sheet for Daily Usage
  3. How to apply Component Cohesion Principles to Spring Boot Application
  4. How to apply SOLID Software Design Principles to Spring Boot Application

P.S. You can connect with me on twitter or linkedin.

Software Architecture
Software Design
Software Engineering
Software Development
Programming
Recommended from ReadMedium