The importance of setting goals in software development




Bob Slydell: You see, what we're actually trying to do here is, we're trying to get a feel for how people spend their day at work... so, if you would, would you walk us through a typical day, for you?
Peter Gibbons: Yeah.
Bob Slydell: Great.
Peter Gibbons: Well, I generally come in at least fifteen minutes late, ah, I use the side door - that way Lumbergh can't see me, heh heh - and, uh, after that I just sorta space out for about an hour.
Bob Porter: Da-uh? Space out?
Peter Gibbons: Yeah, I just stare at my desk; but it looks like I'm working. I do that for probably another hour after lunch, too. I'd say in a given week I probably only do about fifteen minutes of real, actual, work. 

- Office Space (1999)

This is how I would end up spending my working week if I didn't set myself goals ... well that may be a bit over the top, but there is some truth to it.  

I think setting goals in all aspects of life has its value, but in this post I will talk about it from the perspective of a software developer.

Setting yourself well defined goals will make your a much more productive developer and enable you to stay focused on the job at hand, as well as giving you something to strive for.  It gives you a way to measure success and failure.  Without goals, there is no clear indication of what your next step should be. 

Goals should be set at different scopes, which I'm sure you've heard thousands of times before - short, medium and long term goals.

In software development your long term goals may be a company you want to work for, a role you want to play or a position you want to be in, in years to come.

However, the goals that we have to think about more often are the short and medium term goals.  I think of medium term goals in terms of the things I want to achieve in an 'iteration' of an Agile project.  This should be thought through and scoped out in the Planning game at the beginning of the iteration, and constantly refined on a daily basis.  This will be something like "what stories do I want to implement?", or "what technology do I want to experiment with?" or "what pattern do I want to try?".  The short term goals can be what features will I implement today.  

If you practice TDD, you are constantly setting yourself "mini-goals".  Write a test, and your goal is to make it pass.  Make it pass, and then your goal becomes to make your solution elegant and simple.

Without goals, its so easy to lose focus.  Leading to you spending half your day swapping between open windows, recompiling your code for no particular reason, pondering how to get past that big daddy in the next level of Bioshock or watching yet another video on youtube. 

Having goals will enable you to focus your energy and make efficient use of your limited time - which leads to a productive day as a software developer.  A good way to gauge whether you have ever achieved this, is when you get yourself "in the zone" - you are usually your most productive, and this is usually a result of having a clear and concise goals.

When I am coding I have found that keeping a notepad on my desk with a list of tests I need to write is a great way to keep yourself on track.  As I think of new tests that will need to be written, I add it to the list, and when I have completed the test, I cross it off.  When everything is crossed off, I am done and its time to move onto the next goal.

For the software projects at work, we use a program called OnTime2007 to keep track of the goals of the project, and we constantly refine them through stand up meetings and general discussions over coffee.  A great side effect of explicitly setting goals in a team like this is that your (and your team members) estimation skills will improve.

For my personal goals as a software developer, I have a combination of notes on my computer and ideas floating around in my head.  I am constantly refining my skills and always trying to find a better way.  By doing this I am always setting myself goals to achieve a new skill or improve an existing one.

So the next time you find yourself lacking direction and "spacing out" during a work day or - on a grander scale - your career, take some time out to think about what it is you really want to achieve, and then do it.




 del.icio.us  Stumbleupon  Technorati  Digg 

 

What did you think of this article?




Trackbacks
  • No trackbacks exist for this entry.
Comments

Leave a comment

 Enter the above security code (required)

 Name

 Email (will not be published)

 Website

Your comment is 0 characters limited to 3000 characters.