Thanks for mentioning the over-engineering aspect. Some of my peers, that I usually refer to as 'the academics', often over-think, over-analyze, and over develop their solutions. They want to develop the perfect solution that will stand for all time, and will rebuke any and all criticisms. 6 Months later they might have a prototype if they haven't gotten stuck on some unsolvable. I often find this group is terrible at things like unit testing and refactoring. It is like it is above them. 40 years later they wake up in the fortran dept and realize the whole world is above them.
The other group, the 'clock-punchers', will do exactly as told, have nothing to prove, and in turn are extremely agile. They think simply so things like unit tests and prototypes come very easy to them. They aren't attached to their ideas in the same way, so they can switch tracks quickly. As a reward, they get experience on lots of frameworks, languages, and trends. Maybe they will never be head architects, but they make a crap load of cash, don't get weekend calls, and don't develop the cynicism that a lot of the heavyweights do.
My team needs both, but you only need a couple of the former group to solve the big issues. The latter will get your project finished. Thinkers never seem to finish anything, In their minds, there is ALWAYS something more to be done.