About this series: People at conferences, training, and meetups often ask me what I would recommend learning X or Y. I’m always happy to give some suggestions depending on the person’s experience level. Unfortunately, this doesn’t scale very much, so here are my general recommendations on learning something effectively (from beginner to a more advanced level). This time: Software architecture.
There are over 100 definitions of “software architecture,” so I don’t try to invent my own. I especially like the one from Mark Richards, who said once, “Software architecture is the stuff you can’t google.” I think that describes the main problem of software architecture pretty well: You can’t take someone else’s ideas and apply them to your situation. Software systems are context-specific. Thus, software architecture is very individual.
The same is also true for getting started with learning software architecture. And to be honest: many things that you need to know come from experience. But we all have to start somewhere. That’s why you find here my personal TOP 5 learning recommendations to create and level up your knowledge around software architecture (without trainings, because I’m biased).
Top 1: Kenny Wong – Software Architecture
A (free) MOOC / video course on Coursera about the fundamentals of software architecture. The course covers very basic concepts and terms. With this knowledge, you can connect to more advanced topics you’ll find later on.
Top 2: Michael Keeling – Design It!
This book takes you through the fundamentals of software architecture. Michael guides you through a complete software project from the first ideas to the design in the first parts of the book. He connects the dots between business requirements and technical solutions. But even more interesting is the “Architect’s toolbox,” where Michael collected 38 activities that can help you in different situations.
Top 3: Len Bass, Paul Clements, Rick Kazman – Software Architecture in Practice
This book, first released in 1998, is a classic. I don’t recommend it because of the profound treatise of software architecture. I recommend it because of the concept of “architectural tactics.” These are fine-granular techniques that let you achieve certain quality characteristics(e.g., the tactic “Manage work requests” for more performance or “Exception handling” for improving availability). With plenty of lists full of architectural tactics, the authors give you a kind of a vendor’s tray where you can pick what you need to achieve a certain quality in your software system.
Top 4: Mark Richards – Architecture Monday
With a wide variety of videos, Mark also covers a wide variety of topics around software architecture. The contents are well explained, nicely visualized, and perfectly usable if you just want to quickly revisit or learn new topics.
Mark Richards is also one of the authors of the book Fundamentals of Software Architecture, which brings a fresh look at software architecture in today’s time.
Top 5: Gregor Hohpe – The Software Architect Elevator
Gregor is an experienced software architect and shares his experience in his book. The book is not specific to creating a suitable architecture for a software system. It’s more settled on a strategic level: enterprise architecture. Nonetheless, if you want to advance in your career as a software architect, I recommend looking at the kind of challenges you’ll be facing then.
A list of five resources for such a huge topic as software architecture is difficult. I wanted to build one possible path for beginners to get on a more advanced level. But there are many other fantastic resources out there that you might consider. I’ll add other great resources from time to time in this section. A few examples for now:
- Simon Brown: Software Architecture for Developers
- Software Engineering Podcast
- Conversations about Software Engineering
- Dave Farley’s YouTube Channel
If that’s not enough, take a look at some awesome lists around software architecture:
If you’re mainly working on legacy systems (who doesn’t?), you might also be interested in my awesome lists about legacy systems and software analytics: