I tend to think of overengineering of a team member as the mistake of the team leader, unless you're really hiring a solo developer then you'd better pick an experienced one.
If you communicate your priorities properly, you put real emphasis on not creating unneeded code, people aren't stupid, they wouldn't do that. Most projects don't live in vacuum, and the difference between overengineered solution and a good solution depends on outside requirements, and that's the job of the team member to keep it on track.