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 ..."
68 Comments
Interesting read, I knew being a lazy pessimist would pay off some day.
#1, David Madden, United Kingdom, 17 April 2008. Reply to this.
I'm VERY lazy, a little bit pessimistic, too many curious (on work) and meticulous: i'll be a GREAT developer! yeaahh...
#2, Nicola Pressi, Italy, 17 April 2008. Reply to this.
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.
#3, Jay Vaughan, Austria, 17 April 2008. Reply to this.
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.
#4, Tone, United States, 17 April 2008. Reply to this.
Interesting article....
Additional, to the list a great developer is a task master.
#5, Errett Cord, United States, 17 April 2008. Reply to this.
a darkroom?
#6, David Madden, United Kingdom, 17 April 2008. Reply to this.
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.
#7, Greg, United States, 17 April 2008. Reply to this.
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.
#8, Robert S. Robbins, United States, 17 April 2008. Reply to this.
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.
#9, Daniel Watkins, United Kingdom, 17 April 2008. Reply to this.
Thanks a lot for the tips. will surely keep in mind while doing my next project.
#10, Designer, Australia, 17 April 2008. Reply to this.
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.
#11, cfcubed, United States, 17 April 2008. Reply to this.
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.
#12, Whaffle, United States, 17 April 2008. Reply to this.
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.
#13, Geoff Splatsky, Australia, 17 April 2008. Reply to this.
Hit the nail on the head my friend.
Good developers drink JD, Great developers drink JW :)
j/k
#14, Web Developer, United States, 17 April 2008. Reply to this.
They also REALLY hate repeating themselves.
#15, Sam Jones, United States, 18 April 2008. Reply to this.
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".
#16, Jimmy Joe, Japan, 18 April 2008. Reply to this.
Well... I thought I was bad, lazy...
But you are telling I am great ??
Am I Really.. Lets wait for the future!
#17, Quakeboy, Unknown, 18 April 2008. Reply to this.
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.
#18, Chris, United States, 18 April 2008. Reply to this.
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...
#19, Bijay Rungta, India, 18 April 2008. Reply to this.
Great points!
Also important is time management, and the ability to effectively multitask...
#20, Eric Martindale, United States, 18 April 2008. Reply to this.
The great developer cannot be lazy ...
#21, Anybody, Ukraine, 18 April 2008. Reply to this.
Never thought I'd say this but: I need to be MORE Lazy and Pessimistic...
#22, ryan, United States, 18 April 2008. Reply to this.
On top of the list above, a great interaction designer adds to a great web developer ;)
#23, Glen, United States, 18 April 2008. Reply to this.
Being pro-active also helps. And much...
#24, Daniel Tamiosso, Brazil, 18 April 2008. Reply to this.
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).
#25, EricJK, Brazil, 18 April 2008. Reply to this.
And also: a person just can't choice to be pessimistic, not meticulous, not lazy.
#26, EricJK, Brazil, 18 April 2008. Reply to this.
i'm a few of those mentioned but sadly not a great developer. :(
#27, Andy, United Kingdom, 18 April 2008. Reply to this.
Great post.
#28, Alistair Holt, United Kingdom, 18 April 2008. Reply to this.
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.
#29, Andrew Kirkpatrick, Australia, 19 April 2008. Reply to this.
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.
#30, Roshan Bhattarai, Nepal, 19 April 2008. Reply to this.
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.
#31, Remy Sharp, United Kingdom, 19 April 2008. Reply to this.
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.
#32, Aaron, Unknown, 19 April 2008. Reply to this.
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/
#33, rainwebs, Unknown, 19 April 2008. Reply to this.
Great article! I plan on passing this along. Gregory House...Nice allusion.
#34, Robert Aubin, United States, 23 April 2008. Reply to this.
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... :-)
#35, Muizz, Unknown, 23 April 2008. Reply to this.
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".
#36, imvain2, Unknown, 27 April 2008. Reply to this.
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.
#37, imvain2, Unknown, 27 April 2008. Reply to this.
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.
#38, Dave Child, United Kingdom, 28 April 2008. Reply to this.
It seem's (sic) slashes are fine again now.
#39, Dave Child, United Kingdom, 28 April 2008. Reply to this.
Very tactful explaination regarding "great developer"
#40, ILLAHI, Pakistan, 30 April 2008. Reply to this.
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.
#41, swampsparrow, Canada, 30 April 2008. Reply to this.
I have to agree with you... I´m a bit of all that you said...
#42, Ruben Zevallos Jr., Brazil, 30 April 2008. Reply to this.
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!
#43, Channi Singh, United Kingdom, 2 May 2008. Reply to this.
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.
#44, Tim Lafever Jr., Unknown, 2 May 2008. Reply to this.
According to this, I should be a developer. Damn, better change my major.
#45, Ethan, United States, 3 May 2008. Reply to this.
I like the analogy to Gergory House.
#46, Christoph, Germany, 4 May 2008. Reply to this.
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.
#47, Marc Grundfest, Unknown, 4 May 2008. Reply to this.
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.
#48, Dan, Canada, 5 May 2008. Reply to this.
im lazy also haha :-)
#49, DazzleCat, United Kingdom, 8 May 2008. Reply to this.
Yup! i m agree with your codes, but you should might be aware there are many developers and they use their own logic for the coding. i m not saying you are totally wrong..
#50, Sandeep, India, 16 May 2008. Reply to this.
Very nice resume! You can add stubborn and lack of sleep to that for me.
Only problem with this work is... the job is never perfect and never done. Can't you just all accept that it is good as it is now? That way we can all just be lazy, sit back and have a drink. I remember I used to be quite happy with a command line and a hercules screen...
Saudade...
#51, deef, Belgium, 19 May 2008. Reply to this.
The person described in this post IS ME. Dude... It's like you KNOW me. Pretty eerie when you think about it.
#52, Will, New Haven, CT, 20 May 2008. Reply to this.
Yup - that is me. I get nothin done becuase i am so open to change and easily bored!
#53, CBR Books, United Kingdom, 22 May 2008. Reply to this.
def got to be meticulous about everything thinking ahead
#54, DazzleCat, United Kingdom, 27 May 2008. Reply to this.
can any 1 tell me the best programs to create a web site and a game like world of warcraft plz
#55, matthew, Australia, 28 May 2008. Reply to this.
I´ve the privillege to work with one guy like that and his opposite. The good developer is always misunderstood by people who don´t want to work. These "lazy" workers are always making jokes about the serious and brilliant developers. It also makes it easy to recognize a bad one: they are the jokers!
#56, Aurileide Alves, Brazil, 1 June 2008. Reply to this.
Ok based on the personallety description I should be a great developer........... or I'm just a lazy bastard ; )
#57, Gratis Webwinkel, Unknown, 2 June 2008. Reply to this.
thank you ..
I had a good time reading your list ..
Although in general this rules can work ..
they are not a criteria for HR to decide ..
#58, software_dveloper, Unknown, 4 June 2008. Reply to this.
@Gratis: Yes, sometimes it's not easy to tell the difference :)
#59, Dave Child, United Kingdom, 5 June 2008. Reply to this.
Hi.
I was asked this question recently in an interview with a recruitment agency. I replied Heart/passion for development but it enthused me enough to blog about it.
http://leedare-plex2e.blogspot.com/2008/06/what-makes-good-software-developer.html
I believe this must be blog 168,456 on this subject matter now. Is this passion or obsession and is there a line between those two!!!!
Many thanks.
Lee.
#60, Lee Dare, New Zealand, 8 June 2008. Reply to this.
OK who's been secretly documenting my work habits? You couldn't get any closer to describing me there unless you used my name.
#61, Seth, United Kingdom, 9 June 2008. Reply to this.
Funny. I put the "We could automate that..." as my quote in my email signature. ; )
#62, Scott Morrison, Canada, 19 June 2008. Reply to this.
I agree with the lazy part, these types of people tend to simplify matters.
#63, Big Kahuna, Malaysia, 23 June 2008. Reply to this.
Hahaha, awsome article, pessimistic :)) and under great stress too.
#64, Aggie Jane, Unknown, 29 June 2008. Reply to this.
Really good article, hmm i would have never wanted to admit being lazy and pessimistic before. ;)
#65, Lee Francis, United Kingdom, 30 June 2008. Reply to this.
I'm not much of a developer, however I work with them on a regular basis. The ones that standout from the crowd are the ones that can communicate. Being able to work well in groups and explain what they are doing are two extremely rare qualities for developers. These qualities make them standout above all others.
#66, Dave Brown, Portland, Oregon, 21 July 2008. Reply to this.
Pessimistic + Curious = Impossible
#67, Avi, Israel, 27 January 2009. Reply to this.
Yes! You are absolutely right. Most of it is practiced at GreatDevelopers.
#68, Tushar, Unknown, 1 February 2009. Reply to this.