6 traits of successful developers
While perhaps easier to get into than it should be, software development is a difficult and demanding field to be successful in over a long period of time. A lot is asked of developers as we are often given nebulous business requirements and asked to make a functioning system. In my experience here are six traits all successful developers seem to poses.
1.Pupil
For a developer to be successful over any period of time a continued commitment to learning is absolutely vital. The field is too large, too quickly changing, and too in depth for any developer to ever "know it all." Luckily there are a lot of resources a developer can use to learn; books, co-workers, classes, blogs, among many others.
In my personal experience I have found one of the best resources for learning have been my co-workers. Books, classes, and most online resources are largely impersonal and geared toward large audiences, they simply cannot provide the help that a co-worker familiar with your issue or habits can provide. Which leads me to my next important trait...
2.Mentor
As a developer understands he does not know it all, he will also realize that this same quality exists in all developers. It is important for every developer to act up this knowledge and be willing to help other developers learn. It is particularly important when dealing with junior developers, those fresh out of school. Often these developers know just enough to be dangerous and do not realize this yet, so it is important to teach junior developers good practices, to prevent them from picking up (and potentially propagating) bad practices.
There is a responsibility in being a mentor and that is ensuring the knowledge being passed on is good. I have taken this responsibility for granted in the past, at the time I didn't understand the importance of getters and setters and I irresponsibly suggested not to use getter setters. Mentors who take this responsibility seriously however end up helping themselves just as much they help others. In order to understand why a practice is good a deep understanding is often required and understanding the fundamentals of a concept in my experience offers the most benefit.
3.Flexible
As alluded to under the pupil trait, software development is a rapidly changing discipline. Developers must constantly be looking at and reviewing their practices to see where improvements can be made. Much of the time the improvements are small and incremental, but occasionally entire upheavals must take place. A developer must be willing to accept that one day practices and technologies once relied upon have become obsolete and entirely new technologies and practices must be learned. Clearly this isn't an endorsement to blindly jump on every new trend, but to be aware of how the industry is evolving, familiar with the emerging technologies and practices, and willing to learn them should your job or the industry demand it.
4. Tester
Testing isn't simply a responsibility of the QA team. It is a core responsibility of a software developer. Testing isn't just part of the development process, but even the design process, from both a business and system perspective. The system perspective is somewhat obvious, but testing can also play a role in change business requirements as well; scenarios could be discovered that were not previously accounted for, or a technology may be found to be inadequate to meet business needs.
Testing, specifically unit testing, is also an important part of writing quality and maintainable code. In the same way a structural engineer writes mathematical models to test his design and eventually creates scale models, a software developer writes unit tests to test his code. Unit tests give a developer instant feedback on rather the changes made broke the system, or fixed an issue. Just like it is a responsibility of a mentor to pass on good knowledge it is the responsibility of developers to write good tests. Good unit tests replicate real world scenarios as well as hit fringe scenarios and negative scenarios. Obviously such a task would be extremely laborious to write for an entire system, so it is important for developers to recognize when this practice must be applied.
5. Farmer
Just as a crop is a farmer's livelihood code is a developer's. A lot goes into growing crops, a farmer must; pick good seeds, ensure the fields are fertile, and be ever vigilant against pests. Similarly it is every developer's responsibility to; ensure the code he adds to is of good quality, ensure there are ways of monitoring it's continued quality, and remove bad code when found.
6. Reporter
Every so once in a while a picture comes along to perfectly describe a point. Few things are more infuriating to a developer than to be told there is a problem and given no additional information. It considerably increases the time turnaround time to fixing an issue (if one actually exists) as a developer must track down what he thinks is the problem.
This issue isn't just relegated to when a problem arises or just non-developers (which is why this trait is included). As a company grows its developers become increasingly specialized and responsible for individual systems within a collective whole. Before asking a question a developer should read up on a system's documentation (a lot of times a question need not be asked), good questions lead to good answers and ultimately a lot less frustration on both sides. Conversely a developer should also provide good documentation on the system(s) he is responsible for.
So there are six traits every successful developer should have. If you have suggestions for traits I should add or disagree with the ones I listed leave a comment.
Related posts:

September 16th, 2010 - 03:22
Second word in the section “Flexible” – shouldn’t it be “alluded” instead of “eluded”. Interesting read btw!
September 16th, 2010 - 04:44
I would only add 1. To be a successful developer you really have to want to be a successful developer. It’s hard work. If you don’t have the drive to be really good at what you do you’re not gonna get there. Great article.
September 16th, 2010 - 08:04
Should be “alluded”, not “eluded”. Also you forgot Lazy, which is a trait of paramount importance.
September 16th, 2010 - 10:43
Yea that is a pretty good one. A lot of what makes a good “Lazy” developer is covered under the other six traits, but is one that can stand on its own.
September 16th, 2010 - 11:02
Wouldn’t it help to be a successful developer if you developed your own blog instead of using something like wordpress? I think you lose credibility as a developer when you don’t practice what you preach.
These are your stated goals: I started TurnLeaf Design with several goals in mind:
1.Help junior developers avoid common pitfalls that plagued me early in my career
2.Promote best practices
3.Encourage conversation over new trends and developments in software development (no pun intended)
4.Become a better software developer by actively seeking new information and thoroughly researching topics I post
5.Engage with developers from all around the world.
Yet you use wordpress?
September 16th, 2010 - 12:36
I don’t see how using wordpress to run my blog undermines my stated goals, really it helps accomplish my goals (developing my own blog would take a significant amount time). I understand the criticism however, I went with wordpress because, it is (extremely) feature rich and a tried and tested system. I believe I covered in a previous post that, when reasonable, developers should use third party tools for those very reasons.
It’s not as though I do not cover actual coding on this site either, in my previous post I covered how to remove session/request references from code, showing actual code. I even have it stored in an online repository so anybody can look at my code and see how it changed over time (it’s published under the MIT license so you can do pretty much anything with it).
September 16th, 2010 - 12:38
This brings up a good point. To be a successful developer, you must also understand how to utilize the best tools available to get the job done. Don’t reinvent the wheel if the wheel fits the car and will perform the duties required.
If a developer ever decided to do something like writing their own dependency injection framework instead of utilizing something like Spring, unless there was a specific and exact reason why Spring would not work, I would immediately lose confidence in that developer. Don’t waste your time building things that are already built.
September 16th, 2010 - 23:27
I wish I could downvote this comment.
September 16th, 2010 - 14:11
Interesting read. I agree to Stephen that “you must also understand how to utilize the best tools available to get the job done” – End goal is a good product which solves customer problems.
September 17th, 2010 - 10:12
I would add “Documenter” or “Technical Writer” to the list. There is nothing more frustrating than going to “read up on a system’s documentation” only to find that it’s insufficient — or worse, non-existent. I cannot tell you the number of times I’ve had other developers get snippy with me about questions I’ve had, and then get even more irate when I suggest they document their system since they’re upset I’m bothering them.
September 17th, 2010 - 11:19
I’d say successful developers do not write blog posts on traits of successful developers.
October 6th, 2010 - 09:39
I am beginning my career in software development. Valid points + very nicely written.
Congrats!
October 6th, 2010 - 09:42
Thanks! You should check a few of my other articles, I cover some topics that new developers may find interesting. Good luck in your career.