I have found this article in several posts on SO. I find myself falling into the 6th archetype; the "Theoretician".
It defines the "Theoretician" as:
The Theoretician knows everything there is to know about programming. He or she can spend four hours lecturing about the history of an obscure programming language or providing a proof of how the code you wrote is less than perfectly optimal and may take an extra three nanoseconds to run. The problem is, The Theoretician does not know a thing about software development. When The Theoretician writes code, it is so “elegant” that mere mortals cannot make sense of it. His or her favorite technique is recursion, and every block of code is tweaked to the max, at the expense of timeliness and readability.
The Theoretician is also easily distracted. A simple task that should take an hour takes Theoreticians three months, since they decide that the existing tools are not sufficient and they must build new tools to build new libraries to build a whole new system that meets their high standards. The Theoretician can be turned into one of your best players, if you can get him or her to play within the boundaries of the project itself and stop spending time working on The Ultimate Sorting Algorithm.
Even when working on what should be a simple project, I tend to get bogged don in trying to over engineer everything from scratch(This probably explains why I wasted about 2 years trying to make an operating system from scratch. But even I saw that it was pointless eventually).
What can help me to avoid doing this? And stick to KISS principles?