Do elite software developers exist?
ericsink.com
ericsink.com
Unless the author is an accountant or otherwise close to the field (e.g., talkative friend is an accountant), this is a weak statement. I doubt people not in tech know that people in tech write articles arguing about "born programmers" and "10X" programmers. Such talk is internal to our field.
Most people do know a lot about sports, because sports is very interesting for most people. Accounting and programming, on the other hand, are opaque and boring-sounding to most people. When the author talks about accounting, then (again, unless the author is an accountant or close to the field - I see no mention of either) that could be talk about a stereotype of the field of accounting, not actual accounting.
Just for fun, a non-stereotypical super-accountant is Lewis Litt from the TV show Suits. He's clearly a rockstar accountant in that show, capable of achieving things 100 average accountants can't. Is he a realistic character? I don't know, just like I don't know if the "all accountants are about the same" stereotype is true.
All of this doesn't necessarily undermine the entire point of the article, of course - maybe accounting is not a good example, but some other field could be.
The author admits as much:
"I might be on thin ice here. I need an example of a profession which does not have the same kind of enormous talent differentials that we see in sports. I could choose something like lawn mowing, but the comparison to software will work better with a field that typically requires college education. I mean no offense to accountants or bookkeepers. And if there actually is a Peyton Manning in the world of "assets=liabilities+capital", I'll be happy to stand corrected."
> All of this doesn't necessarily undermine the entire point of the article, of course - maybe accounting is not a good example, but some other field could be.
Yes, exactly.
The author admits in the parenthetical paragraph that the accountant comparison may be weak (and welcomes corrections), but given that the target audience is most likely unaware of a Peyton Manning in the world of "assets=liabilities+capital" (if one exists) it still adequately gets the point across.
There are two basic parts to accounting: one is very much following an algorithm. Okay, this real transaction occurred in the real world. Now you have to update your books to account for that transaction. If it's a routine transaction, there is pretty much a straightforward way to record it in your books, and you just do that until the transaction is fully recorded, and you're done.
That part is at this point in our lives fairly quickly being automated away. It's what was to a large degree responsible for the super-boring old-style image of an accountant being this person bent over mouldering books carefully noting down numbers. You guys are all programmers, I imagine you understand pretty quickly how that used to be necessary and used to involve a great deal of very routine work that none the less had to be done with great attention to detail.
The other part of accounting is essentially deciding HOW you are going to record certain kinds of transactions. Setting up the algorithm, basically, that you will then follow a thousand or ten million times each time you do a sale or a purchase or get new investment or buy more office furniture. This is definitely high-talent work! A lot of it has already been done -- if you just want to do a sale, then well, there are a few different algorithms that you more or less take off the shelf and use them. Kind of like how sorting algorithms work in our field. You don't start from scratch and reinvent sorting when you want to sort an array, you just grab quicksort or mergesort or whatever -- choose the one that's most convenient or works best for you.
What's left to do, then, is decide how to account for novel situations, or stuff that's unique to your business, and to mind the machines -- make sure that data gets fed properly into the routine algorithms.
I think that there's room for a very talented accountant, though in many businesses the accounting might be routine enough that there's not much use for a very talented accountant.
Big 4 Forensic Accountants:
- Investigate fraud.
- Quantify accidental or deliberate changes in company valuations between agreeing a sale price and the new owner getting control.
- Estimate the cost to complete engineering projects.
- Identify the value of shares and other assets owned by bankrupt banks in the absence of proper records.
And many other things, usually in a completely different domain every 4-8 weeks as their client changes.
One example is this report on electronic monitoring:
http://www.nao.org.uk/report/the-ministry-of-justices-electr...
"The Department believes that both providers charged for work that had not taken place, in a way that was outside what was set out in the contracts for the electronic monitoring of offenders. PwC’s estimate is that the potential overcharge by both providers in total may amount to tens of millions of pounds."
- One phenomenon: First Programmer racks up massive technical debt to spew crap out fast. (Which is a valid strategy, but has its tradeoffs.) Next programmers all have lower productivity because they're living in the First Programmer's world. (And the managerial system's set up to reject sufficiently large improvements to the situation.) Mediocre First Programmer becomes a superstar.
- Another phenomenon: Contractor who swoops in and gets the closest thing the team has to greenfield projects, while everyone else tends to pull maintenance-type tasks off the backlog. So the Contractor becomes a superstar.
- Another phenomenon: managers more likely hire someone who merely LOOKS and SOUNDS like an ideal programmer. Other programmers treat them with more respect too. (I remember a successful programmer who was fooled by an ideal-looking-and-sounding programmer, until they worked in a two-person team. Then he discovered Mr. Ideal simply parroted tech podcasts word-for-word. Just your typical big-mouthed junior programmer dudebro.)
Over time, these advantages compound. These programmers get into the right circles, tasks which level up their skills faster, etc.
Eric's article is a prime example of what's wrong with software development writing: lots of opinion with a few anecdotes and analogies tossed in for good measure, but absolutely no reference to any scientific study to justify any of it.
I'm not trying to pick on Eric, but it really bothers me the extent to which we listen to, discuss and ultimately adopt the unsourced opinions of our peers. How much of what we do is done simply because someone like Martin Fowler told us to? Why do we so seldom ask, Where's the evidence?
The McConnell link would have been an interesting thing to include, but if I had done so, it would be looked something like this:
For the closest thing I can find to real evidence and research supporting the 10X programmer, start at this link to a piece by McConnell. But even there it is interesting to note that most of the scroll bar is consumed by comments from people debating the validity of the claims.
Even with the McConnell link and its contents, I would still find myself saying that I believe the elite developer exists but readily admit that I can't prove it.
If we could prove it, we wouldn't be arguing about it.
The 10X developer is to software as low-carb is to nutrition.
Hey, that last line is pithy! I'm gonna tweet that...
You have way too much faith in humanity, e.g. HN is full of discussion where proved positions are simply dismissed because they don't fit into the world view of some people.
I won't name the topics here, someone else can fall into that trap, but I think anyone who read HN for more than three days should know a few examples.
1. Ability to rapidly prototype responsibly - make good choices about which short cuts can be taken, and making sure everyone understands the implications of those shortcuts. There is some curve of doing things right and doing things fast, and the good people I've seen can walk this line appropriately given the business demands.
2. Ability to not get bogged down in writers block or analysis paralysis, which I've seen take out weeks of productivity in less experienced programmers (everyone gets this some time, regardless of experience)
3. Domain knowledge of the problem at hand - so that you know what you build will actually be useful. Everyone can be told what should be done by sales or whatever, but combining knowledge into one head rather than 2 is vastly more productive
4. Enabling the above 3 things for the rest of your team.
There's some parallel world where programming a computer is obviously considered an author's profession (we use grammar, do we not) and where the profession of software editor is well-paid and prestigious. I'd rather work in that world, to be frank.
Companies are idiosyncratic and have unique staffing needs and cultures. Is the same 5% of "rockstars" sought out by every company, or does each company find a different 5% of people? Analogously, the violin player in Dave Matthews Band is probably great, but he might have a hard time getting hired for an orchestra or holding down that job.
Also, athletes cannot be compared. They're playing games that are strictly defined and competitive. It's like trying to compare greatest football players to greatest military ground troops.
Sports has very lopsided rewards, just by the nature of competition. In the Olympics, the winners often beat the losers by amounts that nobody would pay extra for under normal circumstances. But since the winner gets most of glory, it's worth it to be that much better. Team sports also have a lot of situations where being slightly better means you score points and otherwise you don't. Games are set up to have binary payoffs to be more exciting.
On the other hand, someone working in a warehouse could have an amazing talent at moving boxes, but they're not going to get paid much more, because the increase in speed isn't worth that much more to the business. (That is, unless someone wants to set up a contest?)
If you want to know why businesses pay a lot for programmers, you have to start by looking at the rewards to the business. Startups have very high and difficult to predict payoffs, so people are willing to pay a lot for talent that they think might give them an edge. This will be true even if the edge isn't all that great objectively speaking.
I also think the issue with the "Rockstar Developer" discussion is that there's no clear definition of what that even means. The author notes this in the article - and there have been terrible attempts at measuring this (anybody remember getting paid per lines of code?)
I'm not sure if we should also make comparison with the productivity of "elite writers" (even though there are best seller authors), "elite doctors", or "elite plumbers"
So, Usain Bolt has run the 100m in 9.58 seconds.
A decent time for a high school runner, according to http://www.reddit.com/comments/xu93j/hey_fittit_what_is_a_go... (admittedly an arbitrary , is around 12 seconds.
So, the difference between an amateur in high school and the best in the world is about 25%.
I bet there's a bell curve there, and Usain Bolt is WAY, WAY off on the right part of the curve.
You could argue that programming is also competitive; a business that is 10% more efficient will routinely win contracts against the opposition, better their reputation etc.
Elite developers exist as it would be ridiculous to think that talent can't be found in this field. Like learning a spoken language, some become fluent in months while others never do. And I think talent is probably at least as relevant than it is in sports. The question is merely what leverage a talented programmer can get from say a 10% or 100% advantage over the average skill or productivity? Completing tasks as an individual is one thing, being in a team is something else, and competing as a team will further increase the leverage of skill. The 10x-average developer likely does not exist. Developers that produce 2-3x the average developer are probably common. What we forget is that those don't necessarily produce business value at that rate (which they solve problems), but like I explained above: being the winning team in competition could give increased returns by thousands of percent.
I'd like to know more about elite researchers. Or surgeons. Or oncologists. Or long term value investors. Are there folk in those types of professions who have outcomes who seriously outstrip the top 10% of their peers?
Are you kidding me? A great athlete can do no impact at all. Except if by impact you mean get people to watch him perform. Other that that, it's pure show, nothing productive comes out of sports.
A great accountant on the other hand can save his clients millions or billions of dollars through (through tax loopholes for example, avoiding costly mistakes, offering good advice etc).
http://metro.co.uk/2010/04/15/cristiano-ronaldo-shirt-sales-...
I think 10X people exist in any area, including accounting and programming. E.g. John Carmack, Linus Torvalds, Poul-Henning Kamp. Some top accountants can be found by looking at CFO positions of huge companies.
These people are very rare tho' and most of us have probably not worked with a 10X person. Just like most of us have not played football with a "Ronaldo-level" player.
I think the bar for top talent is higher than is obvious, and it's lower than it used to be.
It's not at the level of 'smart and gets a lot of stuff done' - it's at the level of good as McCarthy and K&R and the guys (and occasionally the women) who invented coding in the 60s and 70s.
Most of them have been forgotten, but many of them had phenomenal skills - the kind of people who would work for a couple of months on a project, type in all the code on a single day, and have it work perfectly first time.
Or who would sketch out a fully functional timesharing OS for a new hardware architecture over a weekend and have it finished and working a couple of months later.
Or the small team at Xerox PARC led by Charles Thacker who decided to clone an entire DEC PDP-10 mainframe as a side project, because management wouldn't let them buy one and they wanted something nicer to code on.
What would start.up.ly do with John Carmack? Most of the companies that start up aren't trying to solve the kind of problems that need this fabled head down super-star coder to solve. What they really need is someone who can get the big picture of their business space, and know what to do to accelerate that business through software. The type of person they really need, and that are really valuable in software are the people that know what not to code, and how to get what needs to be done done, in a sustainable way. Startups don't need the guy who swivels his chair around, taps his fingers together, and does the magic they want. They require the guy who can stand there with them, help them figure out what they can do with what they've got, and what they need to get to do more, if they need to do more.
What they should be looking for are 10X EMPLOYEES, who have above average development chops. Then pay them appropriately. Not 10X, that's not sustainable, but value more than just the amount of code someone can write, value the overall gain someone brings to your product, and be willing to pay for it, and you'll do better than wasting time and money looking for Carmack to come help with your iOS app.
That's not to say that I think everyone is born on equal ground. I just think talent should be thought of as having that work ethic and drive as opposed to some innate ability. For whatever reason, some people will just naturally work harder at something, especially when that person likes what they are doing.
I've seen this in the work place as well; the people who are interested in what they are doing usually outperform those who are uninterested, even when those who are uninterested may be less intelligent. However, as the people who are more interested continue to work hard, (I like to think) their intelligence will also develop because they are pushing themselves.
They say that because they don't have a frame of reference as to what not being talented in their disciplines mean. Their coaches might have a better idea: they would not be in the team if their coaches didn't see raw talent on them.
Sports is full of examples of very talented players who tried coaching and failed (Ted Williams, Maradona, Jordan, McEnroe). They just could not understand why something so "easy" for them was so difficult for their players.
Truly elite software developers are as rare as Jordans, i.e. one every 20 years or so. John Carmack would probably fall into the elite category, Dennis Ritchie was probably his generation's "Jordan" - but if you're defining elite in Jordan/LeBron terms we wouldn't expect to see many elite developers.
But it is also interesting to consider the possibility that because we don't have a measuring system like sports, there is a Michael Jordan of software on the planet right now but nobody has ever heard of him/her.
I think I remember reading one source claiming that his real gift was being able to develop graphics engines at just the right level of sophistication to just barely run well on the latest desktop computers that would be available when the engine was ready, even though the development project was started years before. If that's his main talent, it's definitely a gift, but does it make him an elite developer? Or is he more of an elite marketer/market analyst?
The part were he also CREATED those engines (instead of just predicting the arrival or relevant desktop systems capable of running them) makes him a developer, not a marketer/analyst.
It also seems you didn't fully realize what you quoted.
Being able to "develop graphics engines at just the right level of sophistication to just barely run well on the latest desktop computers that would be available when the engine was ready" means that he could program at the cutting edge of what's possible for the available desktop hardware everytime...
Not many people can do that, and do it consistently and well, and in a field as difficult as 3D games (most of us people on HN for comparison, Rails/JS guys etc, are glorified CRUD developers).
Take Mark Zuckerberg for example. He's probably a really good developer, but he didn't become a famous billionaire on development skill alone. He is where he is because he had the right idea at the right time, and executed it aggressively and intelligently. Is that a separate skill from pure development, or is it part of being an elite developer?
With every industry where you need some sort of specialized skill and are able to quantify influential achievements in some sort of way, there are always going to be elite individuals.
Unfortunately, most jobs are in an environment where needs do change, and the majority of developers who work in such environments, do not see a real clear "rockstar" distinction among the people they work with.
To me, this suggests that hunting for a rockstar to add to your team may well be a fools errand. We should probably do more to raise up all developers in our team to a higher level, by making sure that everyone understands our set of tools, the apps that we have already created (and will have to modify in future months, years) and the upcoming new business requirements. Everyone in our business knows that we have to be constantly learning, but few development teams try to manage that learning as a team so that everybody's competence level rises. It does no good if your job requires great CRUD apps while you are learning Clojure on the side, your workmate is learning Go language, and the architect is busy learning .NET Reactive eXtensions.
If the job requires CRUD using Rails, you would likely be better off if everyone learns Python/Django because then you all have a choice of tools to use that fit the needs of the work you are doing. Or Grails on Groovy. Even node.js and Lua have some good CRUD frameworks.
In another environment, Clojure, Erlang, RabbitMQ, Celery/Python, Scala/Akka etc. will be the things you need to know.
And in another environment, even today, C/C++ with SodiumFRP would be a better thing to know.
Consider Rita Crundwell. She is, objectively speaking, 1000X worse than the typical average accountant.
http://www.wirepoints.com/how-the-largest-municipal-fraud-in...
I also have, a couple of times, worked with 1000X toxic bosses in the software industry. They usually avoid doing something so flagrantly illegal, but their projects fail and blame is deflected to other people.
For example, the person who wrote the first parser generator was a 10x programmer. He may have written less code altogether than the first client of the parser generator but he made generations of programmers more effective.
Then think of how they help/influence others, that is the real 10x multiplier.
Do we ourselves want to be 10x developers?
Or do we want to hire 10x developers?
Or do we want to work with 10x developers?
Or do we want to figure out if we can measure software development in the first place?
First to the authors question regarding a similar profession - It would seem to me that actual musicians and performers would fall into this category. I haven't seen any definitive measure for identifying an actual Rockstar, or a Rockstar Actor (to use the same vernacular), or Comedian. I don't think salary alone would identify this type of person, since its highly a highly subjective area that are influenced by personal tastes.
I think software shares this as well. What makes a good piece of software? Moreover, what makes a good software developer? Is it ingenuity and intellect? Or is it somebody who is content with the more mundane aspects of a software project, isn't going to write a new Graph API, but consistently and methodically develops clean and working code? In a theoretical scenario - lets say a single guy was responsible for all of the Bash scripting that went into the Init system millions of servers use today. There's nothing cutting edge in those things, its a lot of "start this, then this, and if this happens call this" type of linear design. Would he qualify as a "Rockstar" based on the fact that millions of people rely on his scripts to start machines up? Is he worth more to a potential employer than, say, John Carmack if your developing/supporting a Software as a Service platform?
I've been seeing a lot of articles exploring the Rockstar complex in the past year or so, which makes me think its more or less an invention of marketing than an underlying trend in the industry. Its basically asking "Are there software developers who are insanely good at writing code to solve problems?" The answer is yes - I dont think it merits scientific inquiry.
But there's a more interesting question for me that nobody seems to address; Why the sudden fascination (demand?) for "Rockstars" in development? In my personal experience it seems to be because of a (false) perception that people who write good code are hard to find. And even when you have somebody writing good code, because of the abstract nature of the work, its difficult to deliver something quantitative and tangible on a consistent basis.
I think one huge failure of the industry so far has been to agree on even a basic set of what would qualify somebody to work professionally in it. If I'm a civil engineer, no matter how brilliant I might be, or what my pet projects look like, there's no way in hell i'm getting around a municipal project or getting a contract to build a bridge for a city without at least a PE certification.
Why doesn't something similar exist for programming? It would make sense given that programmers are responsible for things like Air Traffic Control systems, Automated dosing of drugs in hospitals, and a lot of "mission critical" systems that impact millions of people.
(1) Even when working on a precise assignment, the latitude of choice, style and tools one can employ is much wider than in most other professions. It's also rare that there is a single, well understood and uncontroversial way to perform a task.
(2) Yes, even taking "creative accounting" into account.