When a building architect designs a building, they think about what the user will see. They think about the distance. They know these things going to affect human behavior.
For example, everyone understands that you incentivize your employee to live healthier if you place healthy food inside an office shared space. Everyone understands that employee will talk their boss more often if the boss keep his room door open.
It is the same for software architecture.
Let say you design a programming language that you can inherit a class with a single
: character, and you can do class composition by writing 4-5 lines of code.
What kind of incentive did you create?
That's why we need to keep shouting Composition over inheritance, and it will never become a habit on a large scale.
I know that a mediocre architect designs everything by the book, and a great architect designs a building based on human incentive and behavior.
Great software architects don't just follow best practices.
Great software architects understand human incentives and human behavior. They love it.
Those architectural patterns out there, MVC Pattern, Strategy pattern, Factory pattern, Reactive programming, etc., create a specific way of thinking and specific incentive.
We should not choose any of them because they are cool, but we should choose any of them because we want to incentivize a specific way of solving a problem.
We should talk less and less about what is good architecture, and more about what kind of incentive does this architecture create?
Sadly, only few software engineer I met in my career talking about software architecture and design patterns in these terms. And I have an enjoyable conversation with all of them.