Guest Author - Julie L Baumler
One of the principles of Extreme Programming (XP) is to work at a maintainable level. In other words, you don't "work so hard today that you are too burned out tomorrow, or next week or next month to do effective work" as Steve McConnell so aptly put it. This principal applies to more than just programming, and likely more than just computing work, but seems to come up much more in our field than others, possibly because we spend a lot more time looking for a solutions to problems than implementing known solutions. It is extremely tempting to keep pushing at something or stay late and try to power through to a solution, which may feel just minutes away, but in reality is likely going to take much longer to achieve. I was actually completely turned off of computer programming in junior high when my mother suggested that programming would be a great career for me because I could work hard for a few years, make a lot of money to put into savings, burn out in my early thirties, quit, get married and be a stay-home mom. None of that seemed particularly appealing to me and I can't image that you'd be a very good parent if you were that burnt out!
In my office, we have recently implemented "5% time", two hours a week, usually the last 2 hours on Friday, that we are able to devote to projects of our own devising. One of the big payoffs I've noticed personally is that it keeps me from trying to power through and finish a project on Friday that really needs another day (or two). This starts from the fact that we all know we only have 6 hours of "work" time on Friday, so we set our goals a little lower and more realistically rather than saying "I'm going to finish X today." Sometimes the project I decide to work on is in fact the same as the billable project I was working on, but that's because I decide that I'd like to play with it some more and my attitude changes from getting work done to experimenting or playing with my code or configuration. Sometimes just that change in attitude gets me through where I was stuck or not making much progress and I get more done than I would have had I continued to try to push through and get the project done before the weekend. The biggest benefit I've found is that instead of going home, often late, on Friday burnt out from having pushed through to complete something (probably unsuccessfully anyway – powering through never seems to work.), I leave work excited about my field and looking forward to coming back. Instead of spending the weekend recovering, I'm much more likely to make use of my free time to study or experiment further.
When I do try to power through and finish a project – whether on Friday evening or any other time, I may feel productive at the time. Unfortunately, more often than not, the next day I discover that rather than having gotten ahead of the curve, I've fallen behind and I end up spending as much or more time reworking than I put in in the first place. Often I'll try to power through something because I don't want to leave while I'm feeling like I'm stuck and 'failing.' I've found that this is a good time to come up with a test plan aimed at solving the problem. This lets me leave with a plan for future success. Of course, it's not uncommon that setting the problem aside and thinking about other things is just what I need to tease the answer out of my brain – but if I don't come up with a solution overnight or find it when I look at it with fresh eyes, I'm still in a good position to find a solution.
Of course, you can go too far the other way. You don't want to avoid working any time you are a little off, or quit at noon every time you have a productive morning. The point is to find a pace and style of work where you can continue to be productive day in and day out year after year. It's a much more satisfying way to live.