The SOLID principles of Object Oriented Design include these five principles:
SRP – Single Responsibility Principle
LSP – Liskov Substitution Principle
ISP – Interface Segregation Principle
DIP – Dependency Inversion Principle
Generally, software should be written as simply as possible in order to produce the desired result.
However, once updating the software becomes painful, the software’s design should be adjusted to eliminate the pain.
Often, these principles, in addition to the more general Don’t Repeat Yourself principle, can be used as a guide while refactoring the software into a better design.
References
Agile Principles, Patterns, and Practices in C# – Hardcover, Amazon.com – Robert C. Martin, Micah Martin
SOLID Principles of Object Oriented Design – Pluralsight Online Training – Steve Smith