Code should be...
- Code readability - code that is easy to read by others
- Code maintainability - code that is easy to modify or extend by others
- Code reliability - code that runs without failure
- Code testability - code that can be measured and observed during development
Good, Cheap, Fast [Link]
- Good user experience
- Cheap maintenance
- Fast performance

SOLID Principles
- S — Single-responsiblity principle
- O — Open-closed principle
In short, inheritance fulfils the second principle.
- L — Liskov substitution principle
can more easily be switched out with either implementation.
- I — Interface segregation principle
Make small client specific interfaces
- D — Dependency Inversion Principle
https://itnext.io/brutally-solid-typescript-ba745585f440
Pair Programming