1. DRY
    1. Don’t Repeat Youself
  2. DIE
    1. Duplication Is Evil
  3. KISS
    1. Keep It Simple, Stupid
      1. do not complicate! Create the most understandable solutions, apply design patterns and not reinvent the wheel.
  4. SOLID
    1. Single responsibility principle
      1. A class should have one and only one reason to change, meaning that a class should have only one job.
    2. Open/closed principle
      1. Objects or entities should be open for extension, but closed for modification
    3. Liskov substitution principle
      1. Let q(x) be a property provable about objects of x of type T. Then q(y) should be provable for objects y of type S where S is a subtype of T.
    4. Interface segregation principle
      1. A client should never be forced to implement an interface that it doesn't use or clients shouldn't be forced to depend on methods they do not use.
    5. Dependency inversion principle
      1. Entities must depend on abstractions not on concretions. It states that the high level module must not depend on the low level module, but they should depend on abstractions.
  5. YAGNI
    1. You Ain’t Gonna Need It
      1. implement only the necessary tasks and abandon the excess functionality
  6. Duplication of the same code should be avoided.