The book is – as its title advertises – a handbook dealing with topics relevant for software architects. As to be expected from a handbook, many topics aren’t dealt with in depth. As a compendium of knowledge relevant for software architects the book does a very good job though.
Structure and Content
The book starts – after a short introductory text – by exploring in the first chapter what software architecture is about and what the job of a software architect encompasses. Software architecture is defined as “the structure or structures of a system, their elements, and the relationships between those elements” (p. 23, my emphasis) and the software architect’s job is described as a rather complex but also as a potentially “extremely rewarding” (p. 23) one.
The second chapter deals with the relationship between software architect, software architecture and organization. Some of the chapter’s topics are the various architect roles in an organization and their job descriptions (for example enterprise or security architect), development methodologies (waterfall vs. agile), office politics and risk management.
The third chapter is dedicated to the topics of understanding and modeling the domain (for example by using what Eric Evans named in his eponymous book Domain-Driven Design) and gathering the requirements while the fourth one describes important quality attributes of software products like maintainability, usability and testability.
The fifth chapter is longer then the previous ones and discusses how software is designed. Several processes for software architecture design like Attribute-Driven Design (ADD) or the Architecture Development Method (ADM) are described.
The sixth chapter is dedicated mostly to general design principles like the SOLID principles (Single Responsibility Principle, Open-Closed Principle, Liskov Substitution Principle, Interface Segregation Principle, Dependency Inversion Principle) popularized by Bob Martin or the YAGNI principle (an acronym for “You aren’t gonna need it”) popularized in the context of Extreme Programming (XP).
Ingenos book continues with more “hands-on” topics in the subsequent chapters where he presents architectural “patterns” like the layered architecture or the service-oriented one in chapter seven and microservice, serverless and cloud-native architecture in chapter eight.
Chapter nine, which deals with cross-cutting concerns, discusses among others dependency injection and aspect-oriented programming. Performance and security – both very important topics – are treated each in a separate chapter (chapters ten and eleven). The performance chapter deals among others with server-side caching, performance in a web context and database efficiency, while the security chapter discusses among others threat modeling, security risks and identity and access management (IAM).
Chapter twelve talks about documenting and evaluating architectures. Topics like decomposing an architecture into views, using the Unified Modeling Language (UML) for documentation and how do some processes for reviewing architectures look like (for example the Software Architecture Analysis Method or the Active Design Review) are dealt with.
The two subsequent chapters are dedicated to DevOps (chapter thirteen) and to legacy applications (chapter fourteen). Chapter fifteen deals with the necessary soft skills of an architect. The following topics are shortly discussed in this chapter: how to communicate, how to lead, how to negotiate and how to work with remote teams.
The final two chapters are dedicated to evolution: evolutionary architecture and evolution (improvement) of an architect’s skills. While “[b]ecoming a software architect is a great accomplishment” in Ingenos view, he emphasises that being one requires constant learning and improvement (p. 539).
You could say Joseph Ingeno’s Software Architect’s Handbook is shallow, since it often does not go into depth. You could also say it is boring, since an experienced developer would most probably not find anything new in it. I did not expect the book to be otherwise though. As a “handbook” I expected Software Architect’s Handbook to be broad and mostly shallow. It is a reference book I expected, one which summarizes everything (or at least the most important things) that is important to know as a software architect, and in this respect Ingeno’s book does not disappoint. From social aspects to architectural patterns, from functional and non-functional requirements to security, caching or documentation Software Architect’s Handbook covers a lot of topics. As a compendium of knowledge relevant for software architects Software Architect’s Handbook does a very good job.
Software Architect’s Handbook: Become a successful software architect by implementing effective architecture concepts
2018, 594 p., Softcover
Joseph Ingeno is a Software Architect and Senior Software Developer based in Florida, USA. He holds a Bachelor of Business Administration and a Master of Science – both in Computer Information Systems – from the University of Miami and a Master of Software Engineering from the Brandeis University.
Source: The information about the author is taken from the authors LinkedIn profile – retrieval date 31.08.2021.
Folgende Rezensionen könnten Sie ebenfalls interessieren:
- Carola Lilienthal – Langlebige Software-Architekturen – Technische Schulden analysieren, begrenzen und abbauen
- Kai Spichale – API-Design. Praxishandbuch für Java- und Webservice-Entwickler.
- Martin Fowler – Refactoring: Wie Sie das Design bestehender Software verbessern
- Michael Feathers – Effektives Arbeiten mit Legacy Code: Refactoring und Testen bestehender Software
- Bilgin Ibryam, Roland Huß – Kubernetes Patterns: Wiederverwendbare Muster zum Erstellen von Cloud-nativen Anwendungen
- Sam Newman – Microservices: Konzeption und Design