Rationale
I wrote other books like Building Scala Applications, Principles of Software Architecture Modernisation, and Continuous Modernization. This book is on similar themes, however this is not a traditional book. It is an open source Git book. It is online and you do not need to pay.
The tool I am using here is very nice. It allows you to search the whole book. In any page, just type / on your keyboard and start typing what you want to search for. Also, because this book is written based on markdown, it is very easy to link any page because you have a link per page.
Because I am using Git, I have a history of all changes. Because this is made with software, I can update the book, so the book is versioned. Look at the footer of every page and you will see the version of the book.
This is a way for me to give it back. For free. I hope you enjoy it.
What is a Software Architect?
A software architect is a person that makes decisions or influences decisions about the software structure, the technologies to be used, the patterns to be followed, and the practices to be adopted. A software architect is responsible for the overall design and quality of the software system. A software architect codes, does code reviews, mentors developers, leads technical discussions, defines standards and guidelines, evaluates technologies, and ensures that the software meets the requirements and goals of the business.
I like to think about a software architect as a Monk and Rockstar. An architect also goes DEEP in the technology, understands the details, the trade-offs, the pros and cons of different approaches. An architect also goes WIDE in the technology landscape, understands the trends, the best practices, the patterns, the anti-patterns, the tools and frameworks available.
What is Architecture?
Software architecture is the high-level structure and organization of a software system. It defines the components, modules, and their interactions, as well as the principles and guidelines that govern the design and development of the software. Software architecture encompasses both the technical and non-technical aspects of the system, including performance, scalability, security, maintainability, and usability.
In other words, software architecture is code. But not only code, but the decision on what to do and what not to do. Software architecture is about making choices that will impact the software system in the long term.