I’ve been thinking recently about how to define the skills and traits that make for a “great” developer.  I’m certainly not an authority on the subject, but I consider myself to be a pretty solid developer.  I’ve worked with some truly stellar people, too, so I know what a great developer looks like.  But as I’ve tried to come up with a description, I’ve found that defining a great developer is a lot harder than recognizing one.  Here are a few traits that I think great developers usually have. 

Strong problem-solving skills – Software development is mainly about solving problems, particularly new problems (or variations on existing problems).  Let’s face it, if this wasn’t true, there would be no need for developers, since monkeys would be able to take off-the-shelf components, slap them together, and successfully meet all the customer requirements.  In reality though, any solution requires at least some customization and novel thinking; if not, the customer would be much better off using the existing solution.  So being able to solve problems is very important, but what makes a developer “great” is an ability to quickly come up with elegant solutions to problems.  A “great” developer doesn’t reinvent the wheel, either, he recognizes and utilizes existing solutions whenever possible.

A passion to learn – Software development is not a skill that you pick-up in school then coast on for the rest of your career.  “Great” developers recognize this and make both a professional and personal commitment to advance their knowledge.  They constantly explore new things, acquire new skills, and seek knowledge from those that are more knowledgeable than they are.  A “great” developer is not content and always seeks to improve themselves.

An ability to craft elegant solutions – A “great” developer will solve a problem using a solution that is both readable and efficient.  It will contain exactly as much code as is needed and no more.  A “great” developer will not hammer a problem with more and more code until it “works”.  A “great” developer dies a little inside every time he sees that happen.

A willingness to teach – “Great” developers are not greedy with their knowledge.  They’re happy to share it; they want to help their fellow developers learn.  They may not want to hand-hold constantly, but a “great” developer will be more than willing to provide feedback and guidance when asked.

An understanding of the differences between “developer” and “programmer” – While every developer is a programmer, not every programmer is a developer.  A “great” developer not only understands this, but they embrace it.  They know that development doesn’t just mean writing code, it means understanding the business and the users.  It means testing code, not just flinging it at the screen.  It means documenting code so that solutions aren’t write-only.  It means designing solutions, not just hacking at it until it works.  A “great” developer understands that the majority of their time will be spent not writing code. 

 

That’s certainly not an all-inclusive list, and if I sat here longer, I’d probably think of other things.  What do you think are some key traits that separate a great developer from an average one?