I have to confess that I am probably a level 2 programmer, and the only thing that stops me is pair programming and code reviews. I always start out with good intentions, but the little "what if?" devil on my shoulder whispers things like "What if you need to change that dependency?" and off I go creating an AbstractFactoryFactoryManagerServiceInterface. At the time, his comments just sound so sensible and wise. The only way for me to snap out of it is when the "good programming fairy" is on my other shoulder (probably my colleague) saying "Do you really think that's necessary?"