Start simple
An important point that took me far too long to realize is that software architecture isn’t just something we define at the beginning of a software project that will take care of itself after. We can’t know everything we need to know to design a great architecture at the beginning of a project! The architecture of a software project can and should evolve over time to adapt to changing requirements.
This means that we won’t know which architecture style will be the best for the software project in the long run, and we might need to change the architecture style in the future! To make this possible, we need to make certain that our software is supple to change. We need to plant a seed of maintainability.
Maintainability means that we need to make our code modular so that we can work on each module in isolation and move it around in the code base, should the need arise. Our architecture needs to make the boundaries between those modules as clear...