The 10X Developer In You
gklst.tumblr.com
gklst.tumblr.com
Software isn't just about flow. It's about managing complexity. I'm better at managing complexity than some guys by a factor of 10. And I've worked with people who are better than me by that same factor of 10.
We aren't all made equal. This is "everyone is a winner" nonsense, and it's not how the real world works. I agree with all of the article's arguments, but the conclusion is a non sequitur.
It's kind of funny that everybody in Hacker News knows that they themselves are easily 10x more productive than the bad programmers they have encountered in their careers, but still can't imagine that there can be a similar gap between them and the best.
Just think about experience alone (which is just one aspect of the 10x difference) and you can easily spot tasks where 10x-50x productivity differences are possible even between smart people. E.g. Imagine that you are faced with a task that essentially requires you to write a small compiler, but that is not obvious from the outset. If you are a smart and productive web dev, but you have never studied or written compilers, you can easily spend a few weeks with the task until you realize that you need to study compiler tech and write one to solve problem well. You can easily spend a few months with the whole endeavor. On the otherhand, an experienced 10x dev who has written many mini-compilers for DSLs in his career, can spot the need immediately and implement it in a few days. And on the otherhand, a less gifted individual can spend two years with the problem in his safe corporate job and never solve the problem. Here you already have infinite difference in the productivity between the best and the worst and easily 25x productivity between smart web dev and the experienced guy.
Now, you can argue that was just one specific problem, but one commonality of 10x programmers is that they have done a lot of different kind of programming, which makes them faster to try even more stuff so their experience is accumulating even faster.
Corporate jobs can turn people into reliable adders (1.0 - 1.3 | scale here: http://michaelochurch.wordpress.com/2012/01/26/the-trajector... ) but almost never provide the autonomy that would enable an engineer to become actually good (1.5+) because that requires multiplier-scale insights: "investment" contributions that make future work simpler, more beautiful, easier to perform. Few companies are willing to pay for that stuff. (So they end up paying more, because those multiplier needs happen emergently, anyway, and are poorly performed. http://michaelochurch.wordpress.com/2012/12/14/the-unbearabl... )
I think one of the major problems is that software engineers want rationality and fairness, but you can't "play nice" in most corporate environments and actually learn anything. Unless you work in a rare type of company (cf. Valve) you have to either get political and clobber the project allocation game into submission, or steal away large amounts of time to learn stuff on your own.
That is exactly what I was thinking about. What makes me faster than less able programmers often is previous experience on related topics and sheer variety of problems already solved.
When the hints combine, paths open and the boost can easily be 10x or more. This is a large part of what makes me enjoy programming. Nailing it fast.
When I'm forced to work on something I don't think maters, I'm not a 10x developer. I'm really obsessed with code quality, so any task that involves refactoring, I am 10x or even 50x. If the task is to track down a complex bug in a PHP system, and I'm under strict orders to not refactor anything (which is common), then I will be a 0.01x developer. With my personal projects, I'm always 10x or more.
I don't think it has anything to do with "getting in the zone." A novice programmer that spends 4-5 hours straight focused on a problem is still a novice programmer no matter how far "in the zone" he gets. 10X can only come with experience. And that has to be experience working with other 10X programmers.
A programmer that has 15 years of freelance experience may be good at his/her job, but I doubt they would be as productive as a programmer with 15 years of experience working at top tier companies like Google, Amazon, Facebook, etc.
I really think the only way to become 10X is to watch and learn from other 10X programmers and that will still take years of learning.
One even works with a single monitor so as to only see his code and get 0 distractions.
I just started trying to "chunk" my time in Google Reader, and I noticed a significant increase in actionable information taken away from the articles despite reading from the same sources as during my "between work duties" peeks.
I suppose I'm noisy as heck, and attend lots of events and meetups and conferences, but I know whole companies full of people who don't get out, dont't talk or read much, and they just stay at work and make a killing. You don't hear about them because they don't get out.
fizzbuzz is a good example. There are people who simply cannot do it. No matter how perfect the environment, there are people who will never do it. You cannot teach it, train it, or otherwise wish it into existence.
10x is a misnomer probably in most cases. It isn't that the "10x" programmer is that much faster. It's that he/she is doing things the others cannot.
I wrote a pretty significant research paper about this stuff once upon a time... one of these days, I should sit down and write up a proper blog post on it.
I see a lot of talk on here about removing all distractions and not allowing anything to interrupt your flow so that you can be a 10x programmer. Sometimes you may need to shut out everything, but is it really going to help your team in the long run if you do that a lot?
If you can allow for some degree of distraction and interruption then you may find you pick up on others' problems early, and by having that quick conversation you may help them be a lot more productive. Taking the time out to discuss areas or to pair on problems will also pay dividends.
Much as our egos would be boosted by it the world doesn't need us to be 10X programmers, it needs us and those around us to be more productive overall.
This still involves trust and discipline. If you're constantly on twitter or HN then you're probably not doing that much actual work, but equally if you aren't at least glancing at things like that then you may well find you're missing out on a lot.
Equally you and your colleagues need to trust each other that interruptions won't be too great, and that urgent requests can always be met with, "can this wait a few minutes so I can get to a stopping point."
I think I'm going to print this out and put it on my wall. Old concept but this says it in a very simple way.
I'm older now. I produce about as much functionality as my peers, and at comparable time, but I do so at about 1/10 to 1/100 of the code length.
I haven't tried going back to crunching code at the 10x rate, and I'm not sure I can - I spend the majority of my time now figuring how to NOT write any code (or very little), and still achieve my goals. In a way, I'm still a 10x programmers - 10 times less code, works as well, and is usually much more future proof.
If I wasn't coding for my own startup, that might have hurt my compensation, but I think in the long run, I'm doing as good or better job than I did 15 years ago, even though I'm not faster than my peers these days.
FWIW, I use Dave Cutler as my prototypical 10X developer.
While structural differences in neurology might grant an edge at the very peak of performance (compare to Michael Phelps and his extra-long torso), the vast majority of performance differences come down to effective training. We're talking 9-9.9x out of the "super-developer's" 10x.
* experience
* really understanding what the client or business needs, so I don't spend my time building something that doesn't meet the needs of the user
* finding a tool or library that gets 80-100% of the job done rather than me writing the code (my favorite scenario!)
I believe there are many domains where the above factors are enough to make you a great developer, though perhaps not a 1000x dev.
10x Work: this is the state of flow OP described, that can only be achieved in a healthy environment. I also think OP was right to emphasize trust. It goes both ways. Managers who ask for status (context switches) leave the engineer unable to trust the environment.
See also: What Programmers Want ( http://michaelochurch.wordpress.com/2012/10/30/what-programm... )
10x Learning: pick interesting projects, and socialize with people doing different kinds of stuff. Attend conferences. Take MOOCs. If you can help it, try to limit work that you don't learn from to 2 hours per day. (This may lead to political adversity, so be prepared for that.)
10x Experience: related to the above, it's hard to become a great (2.0+) programmer if you don't get a continuing stream of good projects. It's hard to de-crap your work life and it's a process that requires social skills, which leads into...
10x Communication: your work will have much more of an impact if you are able to communicate to other people how to use it. Make it easy for them. Don't write some software-as-spec system that turns into a black-box, then a legacy system. Build visibly awesome things instead.
10x Problem: this is more of a CEO/founder concern. Some problems are just 10+ times more important or rich in opportunity. Others are unimportant.
Of course, each of these factors can swing the other way and become 0.1x or even 0x (annihilating everything).
There is a talent factor, but I don't know how much of a swing it is. I've seen very smart people write awful code.
I often think of football (soccer) players who are rewarded 1000x - the top flight players are clearly not 1000x better at penalties or free kicks than say 4th division players but Their total skill set is 1000x more valuable
You are going to be interrupted and there's going to be meetings. It's the nature of the beast in a business environment. If you can't function in that sort of environment, then you are a poor programmer for that sort of business, and they are better off hiring someone who can, even if they're not a "10X".
If your boss favors open-plan offices to foster collaboration, maybe it's just because he values something besides raw productivity, like being a team player and making sure everyone is on the same page when undertaking a major project on which millions of dollars and perhaps the lifeblood of the business are riding. When you're paying the bills then you get to build your own coder mancave, invincible against the slings and arrows of the outside world. Till then, either shut up and roll with the punches or work someplace else.