There is a clear difference between Software Architecture and the Software Design. As the developers, we should know little bit about the software architecture and lot more on Software Design.
Software architecture will be defined by usually experienced developers who have good knowledge on existing implementation, and have understanding on the existing issues. It will convert software quality attributes such as scalability, manageability, modularity, extensibility, testability etc.. in to solutions which will meet technical and business requirements.
This is why different architecture patterns like Microservices, Even-Driven, Server-less etc.. exist to solve common architectural problems.
Just because we follow good software architecture patterns like Microservices, Event-Driven does not mean our software design and implementation come out good. We have to adapt good design principals and patterns in our implementations too.
Here I want to emphasis on the Software Design which we tend to forget as we go and we only focus on high level Software Architecture.
- S- Single Responsibility Principal
- O- Open Closed Principal
- L- Liskov Substitute Principal
- I- Interface Segregation Principal
- D- Dependency Inversion Principal
This is where design patterns comes in to picture. There are dozens of existing design concepts for most of the problems we have. We do not need to reinvent the wheel. We can model our problem and decide what pattern to use when. It is not straight forward as it says sometimes, there are pros and cons of different patterns, but choosing the correct pattern is the key. You may refer wikipedia’s “classification and list” section.