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?"
Finding the right balance between those is the Art of Design.
Since ageism is a hot topic now: This is one point where experience pays off. The graybeard has acquired a better gut feeling when something is necessary and when it is not.
This is why I frequently ask up the chain to confirm requirements in a "is it ever possible we might want to do X?" way quite often. Getting outright "no"s will often help to simplify your design and if it comes back to bite you in the ass, you just tell them you asked and will now need additional time to redesign and refactor.