a component of a system should behave in a manner consistent with how users of that component are likely to expect it to behave
make it work, make it right, make it fast
- S - Single-responsiblity principle
- O - Open-closed principle
- L - Liskov substitution principle
- I - Interface segregation principle
- D - Dependency Inversion Principle