Saturday, April 28, 2007

What makes a GREAT Developer?

Looking back at the quarter century I’ve been involved in the IT industry I’ve seen a lot of change. From the punch cards on which I learned my first computer language on to the latest thin-client based Ajax applications of today. From mainframes, to PC, to Networks, to the Internet, each phase had its strengths each had its weaknesses.

Just as I see the Information Technology field as an ever evolving process, so is what makes a great developer. Developing software is a constant balancing act, with the correct balance points changing with technological and societal advancement.

So here is my current take on what makes a great developer, good for maybe this year and next if I’m lucky.

What makes a great developer?

  • They have a strong background in a variety of programming languages and disciplines, but know that they do not and cannot know everything. They know when and where they need to go to find out what they don’t, and if need be, know who they need to ask for help. They are connected to the unseen network of programming expertise that exists today, via blogs, user groups, and emails.
  • They realize that it is harder to read someone else’s code than to write their own and just because they don’t understand existing code is not a reason to rewrite it. However, when it is clear that it really needs it, they are not afraid to rewrite it either.
  • They actively work to improve themselves both technically and socially. And have taken steps to implement and ensure progress in both areas. They are well versed with the latest thoughts and theories and they set, track and accomplish their goals.
  • They are creative and innovative in their solutions but understand that most of the time the best solution is to work within an established framework. They know the boundaries and strive to stay within them whenever possible but will deviate from them when the benefits are undeniable.
  • They take the time to plan their solutions before they implement them, and document and test their solutions before they release them. But realize that excess planning and/or excess testing and documentation can inhibit their ability to “Get Things Done”.
  • They are patient and understanding of both clients and team members, and demonstrate the ability to enlighten both, with advanced methods and concepts. But realize that their solution is not the only solution or even the best solution. They work together with the both clients and team members to arrive at the best overall solution in the given timeframe.
  • They have the ability to accurately estimate the time and effort required to complete a given set of requirements. But realize that requirements are rarely complete when given to be estimated. They plan for the unexpected and are not surprised or disappointed when the unexpected happens.
  • They have the respect of both team members as well as clients and know what to do with it. They recognize and respect the abilities of all their peers and actively work with them to make them their very best.
  • They realize communication between and among clients and developers is a key element in the successful completion of any project. They take active measures to enhance and insure adequate communication between all participants, without creating excess procedures which limit their ability to “Get Things Done”.

I’m sure that I haven’t covered all the attributes of a great developer but just as in application development, one has to consider the point of diminishing returns. I’ve hit the high points, but waiting to get them all would mean I risk never completing the task. Just as I have said before, it is all a matter of balance. As I would release my code to be reviewed, I release this post for your comments. I hope I’ve gotten the balance right, but if not I hope you will let me know.

Sphere: Related Content

0 comments: