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.
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