#11 Improve Your Skills: Become A Better Software Architect
Developing skills in the area of software architecture is extremely important. After all, it is thanks to it that our applications work as they should. Explore the materials I have prepared for you.
Many people ask me how to get started in software architecture or how to improve their skills. Some tell me that making architectural decisions is impossible inside their team due to the organization’s culture.
Unfortunately, in most of the cases you describe, architecture is prepared by architects from the ivory tower and the development team is used only for execution.
I could go into clichés and say:
Change your job to one where you have an impact on software architecture.
However, this is often not so easy, especially in these times of mass layoffs.
In this case, what alternative do you have? A combination of various exercises, theory, practice, and familiarization with the experiences of others. You may hear or read on the Internet that this is useless and only practice during work counts. This is not quite true - the more you have to deal with various materials daily, the faster you will find that dream job.
I have collected various materials in this post:
books
articles
repositories
videos
and I have included people worth observing.
Practical exercise:
Without practice, you can read 1000 books, and it won't be enough.
Start with the application you develop daily. Try to find areas that can be optimized. Begin with small improvements—it can be extracting logic from a monster class to a separate one or applying some design patterns. Continue with more complex tasks—find the process that hurts you in the legacy app, check which code areas are related to it, and then extract it step by step. And so on.
Do architectural katas. Read the problem, analyze it, and plan architecture for a given problem. Please share it with others via GH or maybe even here on Linkedin. Where can you find it? For example, architecture katas from Neal Ford.
Develop your application—you may have an idea for a product you have been thinking of for a long time. Start it. When developing something from scratch alone, you touch many areas, such as authentication, data storage, migrations, API design, endpoints' security, encryption, or synchronous and asynchronous communication. This app may even evolve into your side income.
Books
Support practice with a pinch of theory.
The Software Architect Elevator by Gregor Hohpe
Architecture Modernization by Nick Tune
Software Architecture: The Hard Parts by Neal Ford & Co
Residues: Time, Change, and Uncertainty in Software Architecture by Barry O’Reilly
System Design Interview (both parts) by Alex Xu
Building Evolutionary Architectures by Neal Ford & Co
Fundamentals of Software Architecture by Neal Ford & Mark Richards
Designing Data-Intensive Applications by Martin Kleppmann
Learning Domain-Driven Design by Vlad Khononov
Domain-Driven Design by Eric Evans
Articles
Mastering Strategic Domain-Driven Design - a series of articles showing a complete path to tackling system design starting from scratch. Each article describes another part of strategic DDD.
How to design software architecture pragmatically? - an article written by Oskar Dudycz that describes the pragmatic approach to handling software architecture. I am a big fan of such an approach as it focuses on things you need, not the ones you might need.
NET Architecture: How To Structure Your Solutions—I accidentally found this article by James Hickey, and it is brilliant. It shows a 4+1 architectural view model and describes many architectural decisions.
Monolith to Microservices: How a Modular Monolith Helps - an article by Milan Jovanović that describes loosely coupled parts of the system, how a modular monolith can help you decouple your system, and how to communicate between modules.
Modular Monolith: A Primer - starts a series of articles on modular monolith. Authored by Kamil Grzybek. In my opinion, there is no better source of knowledge than this series.
Videos
Watch videos from conferences. They are usually free. Look at conferences branded by NDC, Devoxx, DDD Europe, and KanDDDinsky—I believe there is the highest chance of high-quality content, but don't limit yourself to just them.
Here are several that I enjoyed over the last few years:
Top 5 techniques for building the worst microservice system ever - William Brander - NDC London 2023
Don’t Build a Distributed Monolith - Jonathan "J." Tower - NDC London 2023
DDD in large product portfolios - Andreas Pinhammer - DDD Europe
Improving your Test Driven Development in 45 minutes - Jakub Nabrdalik - Devoxx
An Introduction to Residuality Theory - Barry O'Reilly - NDC Oslo 2023
The Art of Discovering Bounded Contexts - Nick Tune - Devoxx
So You Want to Build An Event Driven System? - James Eastham - NDC London 2024
Let's build the worst Event Sourcing system! - Oskar Dudycz - NDC London 2024
Debug your thinking - Laila Bougria - NDC London 2024
Bounded Contexts - Eric Evans - DDD Europe 2020
Follow others
Follow other engineers and architects (besides those mentioned above) who like to share their valuable knowledge with others.
Here are my recommendations:
One more thing
As some of you may already know, I plan to publish my book, “Ode To Software Architecture: A Pragmatic Guide For Software Architects,” in September this year:
When I started my career as a software architect years ago, I felt a bit confused. I did not know where to start or why some concepts excluded others. I had to look for mentors and materials and learn various things step by step. In this book, I decided to collect all the experiences so that you don't have to repeat my mistakes.
If you are interested, you can sign up for the list so as not to miss it.
How do you develop skills related to software architecture? Let me know!