I’ve been thinking recently about the variation in the field of software developers and what properties we can ascribe to those who we might call great. This comes from a desire to continuously improve as a professional software developer, having an idea of what makes someone great gives me a set of attributes to aspire to.

A naive interpretation would be that a great developer writes a lot of code but I find this to be flawed. Lines of code is a terrible metric, it penalises more effective solutions to many problems. So perhaps measuring on features delivered is more appropriate. However I believe that there is more to being a great developer than simply measuring productivity.

Integrity

Hopefully self-explanatory.

The ability and courage to admits to mistakes

I’m a big believer in engendering trust through honesty. Everyone makes mistakes, I’m more likely to have confidence in someone who can acknowledge this and be upfront about their errors than someone who dissembles, denies, or shifts the blame for their failings.

Committed to continuous learning

I’ve been know to say (repeatedly and at length) that if you can look at code you wrote six months ago and not find anything that causes you to recoil in horror then you have stopped improving and need to find an alternate profession. Software development is both a constantly changing field and has a large body of existing knowledge. A large part of being a professional software developer rather than an amateur hack is continuous improvement to deliver clients improved value.

Able to accept the ideas of others

No one can know everything and no one is right all the time, regardless of what your ego may tell you. To be a great developer is to be able to take the best ideas regardless of source and form from them the solution that gives most value to the client.

Able to improve a team and its members

Beyond simply being able to work in a team environment a great developer should be a positive influence above and beyond their own individual work. This includes providing assistance and mentoring to other team members as well as continuous improvement to the structure and practices of development.

Knowledge of patterns

Design Patterns are in my opinion the most effective reuse mechanism currently available in software development because they reuse knowledge rather than implementation. This gives them applicability to many problem domains and allows their use across multiple platforms.

This is my initial list of things to aspire to but I’m sure there are more. On the off chance anyone ever reads this, add your criteria below.