Yes, 10 times better. That’s the difference between an average software programmer on an average software team and a rock star programmer on a rock star development team. The difference is huge, and I’ve been reminded of this lately.
How is this different? How is the rock star team 10x better? How is it 10x faster? How does the average slug along or even survive?
The average software teams barely get by. The average teams are almost always in a reactive mode versus a proactive mode. Often average teams only get proactive if they build up a huge bureaucracy around themselves, which just allows them to be average. Average teams might call themselves Agile but don’t follow any of the ideals, let alone the processes that actually enable the PEOPLE to be rock stars.
Over the years I have seen more than a few teams of 5-10 people, sometimes more, only produce what a rock star could produce alone. 5-10 people, $500k to a $1m per year, versus about $100-120k. That’s 5-10x the cost. When I first read about this I thought it was silly, nonsense, and generally impossible for developers to be that disparate in abilities. I know now that I was wrong. Developers DO differ that much in abilities.
Joel Spolsky wrote about it (and NO, even though I’ve mentioned him a number of times recently, I don’t always agree with him) and he’s spot on. Hiring and keeping the top programmers is key to success. Hiring average developers will sink a startup, drag an established company under, and destroy even the most stable of companies.
I’m going to cover some key points that prevent having average developers and prevent an average team sinking the ship. These aren’t, “well maybe we’ll do these things”, these are “things that must happen, all or at least most of them, for the success and continued success of a company”. This list is aimed at external observations of teams I’ve seen at Amazon, Microsoft, Webtrends, and others. Some of these things are done so that the companies keep as large a part of their work force as rock stars as possible. This is what makes these companies successful.
Successful companies encourage and perpetuate continued learning. Not “I read a new technical book once a year”, I’m talking about rock stars that read a technical book or three per month (get a new one now @Amazon), try new languages whenever a new one crops up (re: Ruby, F#, Erlang, others…), encourage quite work areas, collaboration online, offline, and elsewhere, plenty of white boards and open workspaces, and even funds for out of company education with training courses or otherwise.
Successful companies involve themselves, specifically their technical people, with the social scene around their core technologies the company is built on. Amazon & Microsoft have this fairly easy, as they’ve built their own social scenes around their respective technology. Webtrends has even done so to some degree. Smaller companies should be involved in some of these large companies scenes. Attending conferences, training, or otherwise being involved with these companies is a great way to do just that. This builds morale for your rock stars and rock star teams.
Successful companies provide optimal work environments. Of course, work environments and what is optimal is up for debate. But generally one can determine if the company at least involves itself enough to try. Successful companies continually ask themselves things like; are developers more productive in offices or not, do some developers work better remotely or in office, are developers different any some work better in some environments and not others? Usually companies that ask these questions realize the later implication that developers are different from one developer to another. Successful companies have leadership that can determine this and work with the developers to make sure they stay productive, challenged, and happy in their positions.
Successful companies push what makes their technology, product, or ideas interesting and fun to work with. This may not be super easy for some companies, but even a trash pickup company has to have a cool back end system that uses the latest and greatest and might be migrating to the cloud or something. Something is cool or interesting about what the company does, and that cool and interesting tech should be known and shown as a key reason the company rocks and should have rock star teams and rock stars on that team.
These are the top things that make an awesome team help build a successful company. Do any others come to mind? Please leave an idea or two, or disagree, tell me why rock stars aren’t 10x as productive or why successful companies may not need to focus on great development teams! There’s always a devil’s advocate somewhere out there on the Interwebs, so light up the fire.