- SOLID - Single Responsibility, Open-Closed, Liskov, Substitution, Interface Segregation, Dependency Inversion
- KISS - Keep It Simple, Stupid
- DRY - Don’t Repeat Yourself
- YAGNI - You Aren’t Gonna Need It
- SOC - Separation of Concerns
Something is open for extension/change by consumers without having to change the source code or public interface.
Functionality can be altered by the consumer by means of passing configurations and dependencies.
Can be over engineering, could introduce unnecessary complexity.
Framework kind of software.
Widely reused code, with larger consumer base.
When breaking changes are expensive, the extra complexity introduced by making things configurable and dynamic is more likely to pay off.
There is only one thing a function or method does.
There is only one reason for something to change.
Maybe a change could have been avoided by allowing extendability, by config? Maybe too many things were hard coded?
Your expectations