Agile Zone is brought to you in partnership with:

Michael Norton (doc) is Director of Engineering for Groupon in Chicago, IL. Michael's experience covers a wide range of development topics. Michael declares expertise in no single language or methodology and is immediately suspicious of anyone who declares such expertise. Michael is a DZone MVB and is not an employee of DZone and has posted 41 posts at DZone. You can read more from them at their website. View Full User Profile

Excellent Developers Are the Best Hires

11.18.2010
| 18269 views |
  • submit to reddit
I recently read a post wherein the author was condoning the hire of excellent programmers with abrasive personalities over bad programmers with cordial personalities. Superficially, I agree with this advice as it is ultimately better to have an individual who does their job well and delivers over an individual who you get along with very well, but who cannot produce.


A false dichotomy

The notion that you must choose between great developers with bad personalities or bad developers with great personalities is just plain false. The dynamics involved are far more complex than that, but let's assume for a brief moment, that there are only two criteria any company hires on; raw skill and congeniality.

The author posits that most companies do not have the luxury of hiring based on both skill and personality. He suggests Google has this luxury and yet they are always looking for good developers. His conclusion is that there are too few developers who are both excellent at the craft and reasonably compatible with the rest of the human race. I submit that perhaps Google's growth rate has contributed to their continual search for developers. I haven't any idea what their turnover rate is, but I do expect it also contributes to the demand.

Let's not forget there are far more developers in the middle of this continuum than on either end-point. I would surmise the majority of developers fall somewhere comfortably in the middle; decent developers with decent personalities. Neither excellent nor awful. Neither completely congenial nor damagingly dissonant. The choice between only the two extremes is invalid.


What makes for an excellent developer?

What are the criteria for excellence when it comes to developers? If we agree that a developer's role is ultimately the consistent delivery of software, then what atributes do we expect an excellent developer to have?

I think there are many facets to what a developer does, but I think we can all agree on three things an excellent developer must be; Knowledgable, Skilled, and Efficient.

Knowledgable

An excellent developer is certainly knowledgable.

Knowing not only a particular language, but multiple languages. An excellent developer knows that the idioms, extractions, and constructs of one language enrich their ability to write code in all languages.

An excellent developer knows that they are not an expert in all languages they use; perhaps (and most likely) in none. An excellent developer knows there is always more to learn. An excellent developer knows lessons can come from anywhere, not only from those they hold in high regard.

An excellent developer is knowledgable in the business domain. An excellent developer can speak with others about the problem at hand in terms everyone is familiar with. An excellent developer knows they should not make unilateral decisions, should not accept decisions from others made in isolation, and should not expect all decisions to be made by committee.

Skilled

Equipped with the knowledge there is always more to learn and always room for improvement, an excellent developer hones their skills. An excellent developer practices their craft. Not just working the same problem with the same tools day in and day out, but working different problems with different tools simply for the pleasure of learning.

An excellent developer does not wait for their employer to approve the budget and time off. An excellent developer takes the initiative and attends conferences, user groups, and weekend gatherings where other practitioners talk, share, and practice.

An excellent developer practices because they want to. An excellent developer improves themselves a little bit every day.

Efficient

For an excellent developer, efficiency is more than writing code quickly. Efficiency is writing code that is easy to maintain in the future. For an excellent developer, efficiency is writing only the code you need today without sacrificing the ability to make alterations tomorrow.

Efficiency is working in a manner that allows any developer on the team to pick up precisely where you left off and see the work to completion.


Excellence Precludes Unsociability

Excellence requires knowledge, skill, and efficiency.

Knowledge requires open mindedness in that one considers what multiple languages have to offer and recognizes that lessons can come from anywhere.

Knowledge requires humility in that one knows they are not expert in all tools they use and that lessons can come from anyone, regardless of status.

Skill requires discipline and commitment in that one must apply themselves not only at work, but outside of work as well; in divergent skills and tools.

Skill requires initiative. An excellent developer does not wait for training to be scheduled and budgets to be approved.

Skill requires social interaction for the best lessons come from the social interaction we have with other developers at conferences, user groups, and weekend events.

Efficiency requires wisdom. The wisdom to know what to build and what not to build. The wisdom to know when the extra effort today is worth the payout of tomorrow and when "good enough" really is.

Efficiency requires teamwork. Developers working in groups, covering each other's back, and sharing ideas as the solutions unfold before them.

If an excellent developer is knowledgable, skilled, and efficient, then an excellent developer is open-minded, humble, disciplined, committed, initiative taking, socially engaged, wise, and team-oriented.

It is, therefor, impossible to hire an excellent developer who has a bad personality.
References
Published at DZone with permission of Michael Norton, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Tags:

Comments

Christian Schli... replied on Thu, 2010/11/18 - 9:07am

Why chose? I would only hire excellent programmers with superb personalities - me! :-)

Regis Le Brette... replied on Fri, 2010/11/19 - 6:51am

I tend to agree with Michael, the main problem is that finally what we are searching for are excellent developpers and not only excellent programmers. This article correctly describe what's an excellent developper, and not an asocial excellent programmer.

Mark Unknown replied on Fri, 2010/11/19 - 3:52pm

Ability / Talent is of utmost importance to become "Excellent". That is something that cannot be taught.

Alex(JAlexoid) ... replied on Sat, 2010/11/20 - 9:33am

 Some points I'd like to comment on:

An excellent developer is knowledgable in the business domain.

Sound like an architect actually, not a developer. Developer should know the task his work should accomplish, but business domain might be just too vast to grasp without doing it full time. That is why there are architects and domain specialists/business analysts...

An excellent developer can speak with others about the problem at hand in terms everyone is familiar with.

That's actually one of the cornerstones of wisdom. Knowledge and wisdom are not synonyms.

Efficiency is working in a manner that allows any developer on the team to pick up precisely where you left off and see the work to completion.

 That is your(reasonable) definition. An overall efficient developer might need 2 months of startup time and be twice as efficient as the person you describe. In fact, people that have unusually short startup time are overall less efficient.

Skill requires social interaction for the best lessons come from the social interaction we have with other developers at conferences, user groups, and weekend events.

 No... Skill requires practice and more practice. Wisdom requires social interaction and sharing of ideas.

  If an excellent developer is knowledgable, skilled, and efficient, then an excellent developer is open-minded, humble, disciplined, committed, initiative taking, socially engaged, wise, and team-oriented.

Well... Excellent developer will also have the guts to go against the common opinions(that's not the same as open-minded). On another hand a person can excel at something so narrow that it has no social interaction.

There is a third point(rather paradoxical, in my opinion): Narcissists are quite successful and, sometimes, are excellent; Yet don't fall into your definition of excellent.

 It is, therefor, impossible to hire an excellent developer who has a bad personality.

Yes it is - we brand those people as genius...

Cosmin Mutu replied on Mon, 2010/11/22 - 4:03am

companies will hire what they afford and whoever the interviewer likes ... end of story :)

Emma Watson replied on Fri, 2012/03/30 - 3:56am

Congeniality is contextual. In my experience many great programmers are not so much lacking social graces, but having the "don't suffer fools gladly" streak which means that any PHB dictum is met with derision. Think Scott Adam's Dilbert!

Many geeks are able to communicate very well once you get onto their wavelength. They just don't do baby-talk. Unfortunately, the boss is not always right, but he is always that boss!

JDBC

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.