6 months. . . to become a better developer

Ok.  I’ll jump on this bandwagon since it is forcing me to reflect on how I can make myself a better developer.  Justice Gray started this whole thing, and I was ‘tagged’ by Bil Simser.  It’s a pretty hard question since this is the first time I’m trying to reflect on how to be a better developer.  I don’t consider myself a great developer right now, but I hope to be one some day.  What the definition of that is, I’m not sure.  Will I know it when I see it?  I have, however, progressed enough that I’m pleased with my progress so far, and I believe I’m at least keeping pace with my peers.  I can attribute my current position to voracious reading and listening.  I began this when I was deployed to Iraq with the Army in 2003.  I spent every free minute reading.  I read programming books and other material related to software, and I read all the scriptures in the Old Testament as well. 

When I returned from Iraq, I was a different developer.  I approached problems from a different angle.  By reading, I realized how much I did not know, and the more I learn, the more I learn how much I don’t know.  Since then, I’ve learned to listen to others (quite selfishly) in order to learn from them.

So here are the things I’ll do in the next 6 months to become a better developer:

  • Finish my stack-o-books.  I have a stack of software books in my office that is my “to read” stack.  My “read” stack is every bigger, but I’m not nearly finished, so I need to finish those.  They mostly consist of older software books.  I feel that if I’m to have a balance view of software, I have to have a good foundation of past research.  I approach it as engineering.  I need to understand past successes and failures so that I can apply it to today.  Perhaps some could be considered software history books, but I don’t know all the history at this point, and I certainly don’t want to be doomed to repeat it.
  • Teach more than do.  Up to this point, I’ve written a lot of code.  I’ve been a code monkey, developer, senior developer, manager, executive, and now consultant, and I’ve realized that my programming skills don’t scale.  I can only create software so fast, and then there is a limit.  In management, I started this line of thinking, but moving to consulting has brought it more to the fore-front.  As the saying goes, teach the men to fish, don’t fish for them.  I will teach more and “do” less.  By that I hope to learn more by teaching and deliver more value to my clients by enabling their staff.
  • Educate myself on other ways of developing.  At this point, I have a “default architecture” in my head that has been fine-tuned from every project I’ve worked.  It’s based in part on Domain-driven design and encompasses a lot of other OOP principles.  I prefer to use NHibernate for relation database interaction and MVC for UI whether it be web or windows programming.  But even so, I realize that I will never reach a “default architecture” and that this only represents my knowledge as of today.  There is so much working software that I haven’t studied.  I intend to acquire source code to other successful applications and study it for patterns and other knowledge that has escaped me up to this point.  Of course, some open-source applications come to mind since the source is freely available. 
  • Focus on trust.  Product owners often don’t trust the developers and developers don’t trust the product owners.  In many places, the testers don’t trust either and there is a triangle of distrust.  Each group believes they are doing a good job and the other isn’t.  This just isn’t true.  Everyone wants to do a good job, but the lack of trust sabotages productivity of the whole.  Working to form trust can save so much time and keep a project from running over budget.  If ideas can flow without everyone involved finding it necessary to “cover their butts”, we remove a whole category of “work”.  I have began this, but I have a long way to go with it.  At my clients, I will focus on the trust factor first and software second.  I believe the software will come easier when the people involved trust each other.

I’ll keep this going.  For the following 4 people, what are you going to do in the next 6 months to become a better developer?