I keep seeing the term "x10 developer" pop up recently, and I think it's misleading and leads to a rock-star / primadonna culture that benefits no one.
"x10 developers" are, in fact, proficient developers, who are experienced with their stack and problem domain. Once you get to this point, you can still find room to optimize - some people are inherently more focused or talented and you can always gain more experience, but the difference between developers who are proficient at what they do will never be a x10 multiplier - it will be closer to a variation of 30-40% in productivity. In some extreme cases (super experienced, focused, and naturally gifted), you might even reach x2 times productivity over a baseline proficient developer (I've seen it in action).
On the other hand, you have developers who are simply not proficient. They either have no aptitude for programming at all, or are so inexperienced that progress is very slow as they are learning everything as they go. Those are the "1/10 developers" and they make proficient developers (i.e, professionals) seem like x10 developers.
1/10 developers in the wild
Several months ago, I was involved in a venture where I was brought in to replace the previous CTO. They were just in the middle of a transition from a homebrewed framework into a popular open-source one, which I was intimately familiar with. Left behind was a developer who was highly recommended by the CEO (through word of mouth from the previous CTO). He was studying for a Ph.D in computer science at the time.
That developer was spearheading the framework transition for the previous 6 weeks prior to my arrival. Going over what he had accomplished for those 6 weeks, it appeared that he hadn't done much at all. It looked to me like the results of 2 hours of work, tops. Though I already had my doubts, I gave him the benefit of the doubt - maybe it was his lack of experience with this framework, or lack of attention / mentoring from the guy I was replacing. I would try and bring him up to speed and see if he can catch up.
I started assigning small tasks and providing guidance to see if he can up his productivity to reasonable levels. He was getting stuck frequently, and I had to literally spell out solutions for him and walk him through it. After a couple of weeks or so of this, it became apparent that I was spending (way) more time assisting him than he was saving us with the code he was writing. The code he was writing was decent, working code - he was just writing it very, very slowly.
We finally let him go after 3 weeks, during which the amount of actual code he wrote would've taken me 1 hour, tops. He seemed like a smart person and he did understand the basic principles of programming, but getting real-world features implemented was not something he could do, at this point. In the end, the feature he was working on for 3 weeks was removed and replaced with something else - the rewrite took me about 30 minutes (for a more expansive feature).
Not everybody can be a professional developer
I cannot blame inexperience alone for this - I have previously tutored junior developers at our previous firm into self sufficient, productive developers within a couple of months (with steady progress in between). You can tell when someone "gets" it and when someone doesn't. People who don't are the "1/10 developers", that some put as the bar of performance for everyone else.
Next time you want to add a productive member to your team, you don't need to hunt for that mythical "x10 developer" - you just need to find someone who can develop a small feature using your environment and stack in reasonable time, while writing code that makes sense.
(On behalf of all the quotes I spread throughout this post, I apologize)
Reading through the comments, it seems there's some confusion about what my intention with this post was. I never meant to bring down or ridicule anyone - the developer I mentioned was a very smart and amiable person, just not a good fit for doing software development. My intention was to point out the meaningless of the "x10 developer" term, and I parodied it with the equivalent term "1/10 developer" (hence the quotes around those terms throughout the post).
My point is this - not all people representing themselves as programmers can actually write useful code. People know this phenomenon as the fizzbuzz test, but some people who can still get by this test and make their way to dev teams, will never be proficient developers. This creates the illusion that people who are proficient at what they do are "x10 developers". That was what I was trying to convey with this post.
Others said that those "x10 developers" are developers who solve problems that have x10 effect on project progress (they advance the project one month ahead in schedule with a small addition, for example). My question is this - wouldn't all proficient developers (with the relevant experience) put in front of those problems - produce the same results? (in a time span that is in the 30-40% variation range)