Solid

  • The single-responsibility principle - piece of software should have only one responsibility
  • The open–closed principle - things should be open for extension but closed for modification
  • The Liskov substitution principle - changing interface implementation should not brake software
  • The interface segregation principle - it is better to have more specialized interfaces than single big one
  • The dependency inversion principle - dependencies should be abstracted via interfaces

Further read:

https://en.wikipedia.org/wiki/SOLID