Future-Proofing Design

The first thing about designing software is this: Design for change first and extensibility last. They’re different, and so is the mindset. Designing for change is about solid fundamentals. You know from experience that the later you make a change, the more expensive the change is. How do we reduce these costs? One way to…


Favor Composition Over Inheritance

Making code reusable through public class inheritance (PCI) is so convenient and easy that to say it should be avoided may sound a bit heretical. After all, isn’t this what OOP is about? And yet that’s the position I hold. To be clear, by PCI I refer to inheriting from an implementation class, not from…


Singletons are Evil

Singletons are evil. I hate them. No, “hate” is a strong word. I dislike them. They’re inherently easy to misuse. I guess the problem gets aggravated by the fact that the Singleton is the simplest of the Design Patterns to adopt and implement, so it tends to pop everywhere. I know because I’ve been there….