The Interface Segregation Principle (ISP) with explicit interface implementation
The project I am currently working on is a product development project. Our daily work is to add features (or fixing bugs) to our code base which has been around for over 10 years, this is why I’ve been encountering legacy code daily. As one might imagine, when the maintainability and testability of a project of this caliber is low-prioritized, refactoring becomes near impossible after a point. There are of course exceptions to this, some subsystems do renew themselves periodically, lucky for them!