Single Responsibility, Open-Closed, Liskov, Interface Segregation and Dependency Inversion to organise your code better