1. Single Responsibility
  2. Open / Closed principle
  3. Liskov substitution principle
  4. Interface segregation principle
  5. Dependency Inversion

1. Single Responsibility

There should never be more than one reason for class to change.

Issues

MassiveViewController

2. Open / Closed principle

Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.

consider instagram posts, at first it only consisted of photos but now it contains ads and videos.