Full original post here

5 principles of software architecture that help software architects make effective decisions:

1. SOLID principles
a) Single Responsibility Principle:
Each system capability (e.g. service/module/API) should have only one responsibility

b) Open-Closed Principle:
It is preferable to extend a system behavior, without modifying it.

c) Liskov Substitution Principle:
Given two distributed components with the same contract, one should be replaceable with another component with the same contract without altering the correctness of the system.

d) Interface Segregation Principle:
Interfaces/contracts must be as fine-grained as possible and client-specific

e) Dependency Inversion Principle:
High-level modules should not depend on low-level ones; they should both depend on abstractions.

2. The principle of Least Astonishment: leverage the pre-existing knowledge of users to minimize their learning curve when using a module

3. The principle of Least Effort: Everyone tends to follow the path that is as close to effortless as possible. So, aim for a strong start by putting the right architecture & expectations in place.

4. The principle of Opportunity Cost: The opportunity cost of a choice is what we give up to get it. To make a good economic decision, we want to choose the option with the greatest benefit to us but the lowest cost.

5. The principle of Last Responsible Moment: Don’t make a premature decision but instead delay commitment and keep important and irreversible decisions open until the cost of not making a decision becomes greater than the cost of making a decision.

7 min read