Skip Navigation

What Makes a Great Developer?

 
What makes a truly great developer? Some might say a positive attitude. Some might say a high-sugar, high-caffeine, high-bacon diet. Some might say an absence of sunlight and as many monitors as a desk can support.

Certainly, everyone has anecdotes about developers they've worked with who they thought were brilliant. Unfortunately, most of the time that judgement is made not based on code quality, or hitting of deadlines, but on less relevant criteria, like whether or not the developer knew the names of their colleagues, how many lines of code they output or how confident they sounded when talking about their work.

Unfortunately, the best developers don't always come across positively. While this list may not be applicable to every development environment, here are a few of the traits to look out for to spot a great developer.

Pessimistic


Great developers are almost always pessimistic with regard to their work. That doesn't mean they're not upbeat, lively or even cheerful - just that they will always be thinking about what can go wrong and how it can be dealt with.

They'll assume that at some point they'll need to undo work already completed, that hardware will fail, that all security will be compromised, and that your office will burn to the ground. The really brilliant ones will assume that will all happen on the same day. And they won't be happy until there is a specific, actionable, testable - and fully tested - plan for dealing with these sorts of issues. Even then they won't be completely happy.

Pessimistic developers will be the ones that find constant flaws in ideas, and the important thing to remember when working with them is that they're not doing that to tear down other people's ideas - they're doing it to ensure that the ideas that turn into projects are properly thought through and that as many problems as possible have been anticipated in advance. That neurotic, paranoid, pessimistic attitude is exactly what you should be looking for if what you want from your developers is robust, secure, reliable code.

By contrast, an optimistic developer will be more likely to simply assume code will work, or that it is secure, or give a deadline for a project without considering all the potential pitfalls.

Likely to be heard saying: "And what happens when that goes wrong?"

Lazy


Laziness is not usually viewed as a desirable trait, and in this case I don't mean turns-up-late-and-pretends-to-work laziness or just-move-that-logic-to-the-view laziness - both entirely unwanted. I mean a desire to not do tasks that are repetitive, or to waste time doing things a machine can do for you, or even to avoid future work by writing better code now. A lazy developer is one that builds a reusable code library, or wants a fully automated build process rather than a manual copy-and-paste one, or wants comprehensive automated unit testing, or writes code to be scalable even though that wasn't a requirement (rather than revisit it later).

As a bonus, a lazy developer is also usually one who will try and keep a project focussed on its core goals, rather than try and cram more work into the same time, providing a buffer against feature creep.

For example, when writing a category structure, a lazy developer might be likely to assume a many-to-many relationship between parent and child categories, even though the project specification says it will be a one-to-many relationship. Why? Because it might be needed one day and it would be better to write it that way from the start than to revisit it later.

Likely to be heard saying: "We could automate that."

Curious


Good developers are often rather like Gregory House. They're very easily bored by repetitive work (see laziness) and spend most of their time ploughing through it looking for an interesting and challenging (and hopefully new) problem to solve. The less time they can spend on the repetitive, the higher the frequency of the challenges.

Curious developers will be constantly looking for new problems to solve, and better ways to solve previous problems. They'll be the ones encouraging new ways to work and constantly tweaking and trying to improve existing systems. They'll also be the ones most conscious of existing problems in the current working environment, and trying to correct those problems. Curious developers will usually have a wide breadth of knowledge, not just of their primary language(s), but of supportive, associated and alternative technologies.

Curious (or easily-bored) developers are often the least stuck in their ways - the most open to change. They may well need convincing of why a new way of working is better (and that's no bad thing) but as long as it's an improvement, and likely to release more time to spend on the interesting problems, they'll embrace it with a minimum of resistance.

Curiosity also breeds creativity, another highly desirable trait in any developer. A strong desire to work out what has caused a problem and how to solve it is highly likely to motivate someone to continue once obvious avenues are exhausted. It is that sort of mentality that fosters "outside the box" thinking and creative coding.

Possibly the most useful attribute of a curious developer is that desire to find and cure a problem rather than just paper over the crack.

Likely to be heard saying: "Maybe there's another way to do this."

Meticulous


Many great developers are sticklers for detail. They will demand consistency in their work and the work of their team (they're likely to care about common code standards and naming conventions, for example). They'll want unit testing and peer review of code. They'll want everyone in their team to comment on and document code. They are likely to be fussy about version control log messages.

They'll also be fussy about details in communication, and happy to ask what might seem like obvious questions, simply to be sure they have properly understood. This is especially true of things like bug reports. While they may not be terribly motivational communicators, they will usually be able to explain concepts clearly and effectively. That clarity is a tremendous advantage in any development environment, especially if teaching and learning are encouraged.

Likely to be heard saying: "I just have a couple of questions ..."
 

Syndication

If you like this post, subscribe to my full feed or partial feed.

 

49 comments (Add Yours)

You can keep up to date with this discussion by subscribing to the RSS or Atom feed.
 
Interesting read, I knew being a lazy pessimist would pay off some day.
I'm VERY lazy, a little bit pessimistic, too many curious (on work) and meticulous: i'll be a GREAT developer! yeaahh...
What makes a great developer? Great SOFTWARE of course, duh .. it doesn't matter how you get it done, if its not sitting in front of someones face being used to do something they want to do: its not development.
Tone
United States #4: April 17, 2008
I have gotten so much grief before from people on how I am so untrusting. Well, I am! I don't trust users accounts of how software works. I don't trust documentation. I don't trust software does what it is suppose to do until I know for sure. And I don't trust the software I write will work while so many people are intent on upsetting my applications environment. I am truly a pessimist.
Interesting article....

Additional, to the list a great developer is a task master.
a darkroom?
Greg
United States #7: April 17, 2008
You nailed it. When I'm developing software for others, I make an effort to cloak some of these characteristics in positive overtones. For example, when I'm pessimistic and poking holes in suggested solutions, I repeatedly remind myself to point out useful aspects and respond with something constructive.
I'm glad I don't work with any "great developers". My objection is that there is more to an application than its code and obsessing over the code leads to bad design. For example, twiddling bits to be clever when it isn't the standard way of doing things.
Daniel Watkins
United Kingdom #9: April 17, 2008
Jay, by the time you have software whose greatness you can judge, it's normally too late to realise that you don't have any great developers...

Robert, you appear to be complaining about a completely different type of "great developer" to the one described in this article.
Thanks a lot for the tips. will surely keep in mind while doing my next project.

---
www.redesignyourbiz.com
cfcubed
United States #11: April 17, 2008
Nice job w/the post... The core ideas may have been around, but nice fresh way to present them.

I think though that we could possibly add "Proud" in the sense of pride of workmanship in what gets released. Not bragging, but confident in a job well done that prevents users/customers from finding issues that should have been found in development.

Certain specialties require these traits more than others... Health care related software, such as that used to draw inferences from clinical data comes to mind. Guess anything coming close to physically affecting people seems to really need these types of developers.

Thanks for a good post.
Whaffle
United States #12: April 17, 2008
Smart and gets the job done.

Which often includes defining and prioritizing what
the job is.

One thing that annoys me is the hordes of
self serving geniuses that break things, declare success and move on to the next thing they can take credit for. Phd's are well known for this.
Geoff Splatsky
Australia #13: April 17, 2008
This must be the 142,245th blog posting on "what makes a great developer". I would say avoiding redundancy is what makes a great developer, but in truth we all know it's really whatever I am that you are not.
Hit the nail on the head my friend.


Good developers drink JD, Great developers drink JW :)

j/k
They also REALLY hate repeating themselves.
Jimmy Joe
Japan #16: April 18, 2008
Nice, but anecdotal. I know it's meant for light reading, but I would be great to see these 'great developer' blogs with some citations and references.

Actually, it was done something like 30 years ago and was called "peopleware".
Well... I thought I was bad, lazy...
But you are telling I am great ??

Am I Really.. Lets wait for the future!
 United States #18: April 18, 2008
Great post!

It is the synergy between the attributes you've covered that is what makes one developer better than another. If just one of the attributes is missing or overbearing the others then the developer tends to not be so great. The whole thing is very fragile and subject to the mood and whims of people being people.
I had read another topic talking about the positivity of being pessimistic as a Developer..

Personality Traits of the Best Software Developers
http://www.softwarebyrob.com/2006/08/20/personality-traits-of-the-best-software-developers/

enjoy...
Great points!

Also important is time management, and the ability to effectively multitask...
Anybody
Ukraine #21: April 18, 2008
The great developer cannot be lazy ...
 United States #22: April 18, 2008
Never thought I'd say this but: I need to be MORE Lazy and Pessimistic...
Glen
United States #23: April 18, 2008
On top of the list above, a great interaction designer adds to a great web developer ;)
Being pro-active also helps. And much...
EricJK
Brazil #25: April 18, 2008
The Lazy, not the Curious, that looks for killing repetitive work.

It's Meticulous, not the Curious, that looks for better ways to solve a problem.

It's Pessimistic, not the Curious, that is conscious of the problems.

It's Lazy Pessimistic, not the Curious, that desire to find a definite cure.

Curiosity is surely important. But a Only-Curious person is not a good developer (programmer).
EricJK
Brazil #26: April 18, 2008
And also: a person just can't choice to be pessimistic, not meticulous, not lazy.
 United Kingdom #27: April 18, 2008
i'm a few of those mentioned but sadly not a great developer. :(
Great post.
Nice post, an interesting recasting of the 3 virtues of a programmer (as popularly recounted in the Perl community). I think pessimism indicates true laziness, meticulousness true hubris. As for curiosity, that's a trait that infuses and enables all 3 virtues:

Laziness - computers are for automation, whenever you do something manually, ask yourself why. It can take a lot of work to be properly lazy.

Impatience - with the computer being lazy, or with the systems you're using not talking to each other. You program the computer - the computer must not program you.

Hubris - the pride that drives you to implement the sort of practical solutions that haven't occurred to all the vendors you know of. To write code of a quality that its hard to find fault with.
Thanks for this read...and from your read it seems that I'm in the list

of good developers..LOL :-)...
I really get bored of repetitive stuffs and I always like to explore

new stuff and I can't stop it for doing.

I've a project to be completed withing 2 days but whenever I start

doing that project I always end up exploring something new with jquery.

Even I'm fed up with this habit of not concentrating into the project.

Well, this is good thing that I'm exploring new stuffs but It is really ruining the deadline for the project and thats is a bad sides of exploring new stuffs as well.
I'm glad there's other people out there (on the intertubes) that refers to good developers having 'lazy' as a positive commodity - and not just lazy - can't be bothered to complete it, the lazy that would prefer to do it right the first time around. I've been building up a presentation in my head on lazy development and considering whether it could make a good BarCamp(Brighton) talk.
Aaron
Unknown #32: April 19, 2008
Well put. I wouldn't call myself a Great Developer, yet all the descriptions above are spot on for me.

Unfortunately, the perception of these traits is not regularly accepted by co-workers, but rather viewed as negative and pompous.
Well written, Dave. Hubris is a good point, Andrew. Maybe its the self-assurance, based on experience and "deep-thinking before coding" ;-), what describes it even better.

Another thing for me is the ability to recognize elegance in design. If I can recognize this in an implementation I know that I'm on the right path. It helps me to recognize when I've to stop thinking about something better.

So, What Makes a Great Software Architect?
http://blog.rainer.eschen.name/2008/02/20/the-mission-of-a-software-architect/
Great article! I plan on passing this along. Gregory House...Nice allusion.
Cool, i just don't agree on the Pessimistic part. Great people, developers or otherwise are often optimistic and look out for possibilities with a daring mind rather than seek negatives before positives. Just a thought... :-)
Overall I enjoyed this and agree with your opinions on what makes a great developer. However, I do disagree with the pessimistic part.

I believe that both pessimistic and optimistic personalities are not goal and end result oriented.

Pessimistics generally hold up projects because they see problems where problems don't actually exist. There unconscious goal is just to find fault.

Optimistics may not hold projects up, but they cause problems in the long term that will be major the down the road. They don't see any problems at all and think everything is just peachy and will be just peachy.

So what do I think is a replacement personality trait for a great developer instead of pessimism?

Realists, these personalities are the happy medium between pessimistics and optimistics.

Unlike pessmistics who are problem focused, and optimistics who don't see problems; realists are able to find problems where they exist and come up with solutions. If a problem truly exists a realist would find it and find a solution for it.

Realists wouldn't spend every waking moment trying to find problems without solutions. They would instead spend time seeing problems and coming up with solutions.

I speak with pessimists on a daily basis and it gets really annoying. For that matter, it seems like women are pessimists.

When speaking with pessimists, all they can ever say is "Nope that won't work", or "that isn't right". Then when I ask them why, 95% of the time their answer is to the tone of "it just isn't", or "just because".
Sorry, everyone. I created paragraphs when typing, but the new lines all got deleted for some reason. Also, I see the apostrophe was escaped also.
Sorry, imvain. I rewrote some of the code for the site last week and swapped addslashes for mysql_real_escape_string. Which escaped all new lines, stopping them being properly swapped out for <br>s. Fixed now. Slashes next.
It seem's (sic) slashes are fine again now.
Very tactful explaination regarding "great developer"
swampsparrow
Canada #41: April 30, 2008
Well done. But there's a bit more to 'curious'. It occurs when testing a system and a minor glitch occurs and is noted. These occurrences must spark an urgency, bordering on obsession to find at all costs what caused them. The reason for anything that you cannot explain that happens when your program runs *must* be found and either rationalized or fixed.
It is usually these very 'glitches' that are exploited by
'hackers' but mostly they result in receiving a phone call in the middle of the night from a user who reports ---It just stopped working --- the constant dread of a developer.
I have to agree with you... I´m a bit of all that you said...
Channi Singh
United Kingdom #43: May 2, 2008
This is Wicked! I've found myself to be all of the above! I've just graduated and it's nice to know that I'm on the road to becoming a "Great Developer!"

P.S. I totally love your Cheat Sheets.

Thanx!
Great article. I am definitely pessimistic about everything I do and take a lot of criticism from some over it. Although you should feel comfortable with your code, there is really no reason not to be this way. For one main reason: Nothing is 100% secure.
Ethan
California #45: May 3, 2008
According to this, I should be a developer. Damn, better change my major.
I like the analogy to Gergory House.
Marc Grundfest
NY #47: May 4, 2008
Well I agree.

I wonder how many managers would.

In fact I would think that great developers have little chance of surviving-- which may explain why the best software is open source and the worst is in house, with closed source commerial somewhere in between.

In my experience anyone exhibiting these behavoirs in a corporate setting is likely to be out of work soon enough.

Consider imvain2 's comments

He, I think it is a he based on the comment about women. wants realists -- I think we can all agree that a realist is someone you agree with-- but that is that last thing you want on a software team-- you want differing views and you want pesrons with the guts to speak there minds.
Management of course wants anything but honest feedback and differing viewpoints-- they want team players -read conformists.

Now I can not say why imvain

says
When speaking with pessimists, all they can ever say is "Nope that won't work", or "that isn't right". Then when I ask them why, 95% of the time their answer is to the tone of "it just isn't", or "just because".

But it is possible that they have concluded that they would be wasting their breath. Of course they could also be a--holes as well, but if you ask why and the then ingore the answer then you will soon be getting "because'' as an answer.

Not knowing the details I can not say.
This is quite an interesting article.

I agree with most of your ideas, and realize that I can often be heard saying those same things during a project.
 United Kingdom #49: 4 days ago
im lazy also haha :-)

 

Post Your Comment

 
Only the name and comment fields are required.
 

Live Comment Preview

 United States #50: 1 minute ago

Web Design, Development and Marketing