I do not claim to be an expert in time management; I feel that it’s always something I can improve on. However someone at work did comment on the perception that I seem to get a lot done, even though my backlog of work is always huge. I think that perception causes me to get more work as people keep loading it on thinking I am getting through it all – but that is a separate issue!
I thought I might try to document some time management tips I consciously use after reading quite a few books and blogs on the topic and trying different techniques myself.
One tip I found works is to define success. There is a lot of literature from a lot of different backgrounds on this concept, but basically what I have found is if you have some task to complete, it helps to define what the future state will look like when that task is “done”.
If you do not define success, you may keep working on a task thinking it could be done better when actually what you have done so far meets or exceeds all the mandatory requirements. There is always more you can do to improve something, but at some point when you have delivered value there might be something more important to work on to deliver more value rather than continuing to refine the current task gaining little value.
On the flipside, if you do not define success you might think a task is finished, only to put it in the “done” pile and it comes back to bite you because when you have to add to it or re-do it, the urgency will be greater than it was the first time. This will push other tasks back and increase stress.
An example I had recently was when I found out I had some ridiculous deadlines to meet with a Software Development project that got shortened (I had 4 weeks, down to 2). Normally being the manager I am able to assign most development work to my team members and concentrate on architecture and building reusable components. But in this case I had no one to assign it to as they already had priorities, so I had to do it myself. I came in on a weekend in order to kick start my development – no distractions or interruptions which obviously helped. I had to think what I hoped to achieve on that weekend. Sacrificing family time does not usually go down well with me so I had to make sure it was worthwhile. I had an idea to write up a big email explaining what I had achieved over the weekend at the start of the first day - my goal (or "success criteria") was to be able to send that email by the end of the weekend. I actually drafted the email, put the recipients in so it was ready to go. I clearly outlined the things that I “had achieved” (I.e. was going to achieve). As the weekend wore on, I began working through the items. Some became blocked, and being a weekend I could not contact whoever I needed to get the answers. So I went into my draft email and started a section “Things I could not complete and why”. So my success criteria did change, but I was able to explain why and move on to the next task. Overall this worked out really well as I was motivated to be able to send that email. Everything I worked on was aiming towards that goal. I am sure I got more done as I had a focus and a goal, rather than feeling daunted by the sheer volume of work and not knowing how much I should have been able to get done.
Relating this to programming, think of it like doing BDD (Behaviour Driven Development). In BDD you define the scenarios and write tests for a feature first before building the feature. So before you begin to work on a feature you have already thought about (and documented) what should work and what should not work, and hopefully figured out any unknowns. Then when you go to build the feature there are far less questions than if you had just coded away with a lot of unknowns. You also know when to stop – when all your BDD tests “pass”. You will find using BDD properly, although it might seem like more time up front, you should actually save time in rework and/or doing too much on a feature.
I hope you try this technique whether you are programming or performing other tasks as I have found it works for both and has made me more productive.
Note: If you are doing .NET development I highly recommend bddify for implementing BDD - it is very simple to get started and is very flexible.