Time and again, experience keeps re-affirming me that a star developer is far more productive than several average developers combined. It begs the question - what is the difference between a novice, average, and star developer? The naive thinking is that they're all the same kind, but they just vary by degree - i.e. that the star produces more code at a faster rate, with less bugs. But there's so much more than that. The star developer is a fundamentally different kind. Here's a brain dump of some possible differences between star developers and average devs (This also relates to the Dreyfus model of skill acquisition: http://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition).
A star developer:
- Mitigates risk
- Writes higher quality code
- Predicts potential problems, and not design the app into a corner
- Addresses performance, security, maintenance
- Makes their teammates better
- Comes up to speed quicker
- Juggles multiple projects
- Troubleshoots and figures out answers themselves
- Does self correction
- Handles non-technical constraints (like a political monkey wrench)
- Can provide reliable estimates
- Interfaces with non-technical folks (Managers, Business Sponsors); understands the business side
- Throws away bad code; knows when to restart
- Creates reusable code that helps others
- Has influence beyond their immediate project
- Desires to grow
- Can work for longer periods without immediate and visible success
- Can compress the schedule, such as doubling productivity.
- Can coordinate other developers, even informally and not as a tech lead.
- Can set up and improve process
- Understands the concepts beyond syntax. Average devs crash when the technical road takes a curve with a new language; stars know the concepts and don't get thrown for a loop.
- Knows when the rules do not apply
- Knows where they want to go; can describe their career path.
- Is continually learning and improving.
- Can point to star developers and industry leads. If you're developing ASP.Net, and you've never even heard of Scott Guthrie, you're probably not a star.
Note that stars does not necessarily:
- Be perfect at everything. We all have some sort of limitations.
- Write perfect code --> we all make mistakes
- Have N years of experience
- Have external metrics (a degree or certification, a fancy title, got lucky with a well-paying project, etc...)
As a completely miscellaneous aside, I think of a real-time-strategy game like Age of Empires - what is the difference between an average unit and a star unit? Look at an average unit like a simple solder - it has basic properties like health points, attack, and movement. While merely upgrading the strength of these properties (more health, more attack, etc...) is great, it is still fundamentally missing other powerful aspects- the ability to heal itself, a ranged attack, the ability to swim (or fly!), the ability to collect resources or create buildings, etc... For example, a thousand normal AoE soldiers - which have zero ranged attack, and cannot swim - will never be able to hit an enemy across even a 1-block wide river.