Software design patterns
A personal opinion on design patterns.
When to use them?
Most code base follow design patterns, even those that are considered to have a high degreed of technical debt. Design patterns are used to solve recurring problems in the business domain. Often time, they are present in the programming languages of choice, for example (c#): extensions methods, Linq, IoC, etc.
Use design patterns to simplify the business domain, avoid accidental complexity.
When to refactor?
Refactoring is an ongoing work in progress. Business evolve, so the source code too. Refactor to patterns following the above guidelines.