Knowing Which Technique To Use
When you learn a new technique that greatly improves your productivity, it is hard to see when it does not apply. Usually you learn it within a specific context, often just a single project. It is hard to see what causes the technique to be less effective, even harmful. Ten years ago it was like that with objects. If someone asked me when not to use objects, it was hard to answer. It wasn’t that I didn’t think that objects had limitations – I’m too cynical for that. I was just that I didn’t know what those limitations were, although I knew what the benefits were.
Refactoring is like that now. We know the benefits of refactoring. We know they can make a palpable difference to our work. But we haven’t had broad enough experience to see where the limitations apply
– Martin Fowler, Refactoring