Have you ever gotten to the end of the week and felt like you didn't make any progress on your actual work? Maybe you put out a lot of fires, but did you make progress on a meaningful project?
I used to feel this way all the time. I was always responding to what was in front of me. Then I'd get to the end of the week and realize I hadn't made any progress on my long-term projects. It's really easy for anyone to fall into this cycle. What helped me was adopting the practice of time blocking.
What is Time Blocking?
Time blocking is a pretty straightforward idea: you block off time to work on a project or make progress towards a goal, scheduling it like you would a meeting. If you work in an office, then it happens to be a great defense mechanism against meetings. But it's mainly just a great way to ensure you're making progress on projects that are important to you.
It's a method developed to increase the productivity of knowledge workers. As a software developer, I've found that I have to think about time blocking a little differently, simply because the nature of our work as developers is different from most other knowledge work.
All you need to get started is your calendar and the list of things you need to work on for the week. To make it work well for you, I've compiled a list of a few things to keep in mind. What follows are some tips and tricks I've learned by using time blocking to manage my time as a developer working in multiple different dev jobs as well as in my own freelancing work.
Get the framing right
The first thing to consider is the framing: why are you blocking off time? Are you blocking off time to complete a project or task? If so, you are approaching time blocking like most people do, including developers.
You're also setting yourself up to fail.
In normal knowledge work, you can sit down and estimate that some task or project will take X number of hours to complete and be pretty close to the mark. In development, that's really difficult. So when we block off time, we're not scheduling time to complete a project, but to contribute to it.
This framing is really important. Don't worry about trying to complete a project in the time you've set aside. Worry about making as much progress as you can. If possible, set small intermediate goals and try to accomplish those in your work session. But the nature of our work is such that it is very, very difficult to predict how long something will take, so trying to complete something within a block of time probably won't work.
I recently set aside time to set up the production environment for one of my projects. I started the block of time with an outline of the services I needed to set up and how they'd all connect together. As I got into it, I realized I would need to use Redis and the continuous integration process I outlined wouldn't integrate with all the services I needed.
Whereas most knowledge work is about execution, being a developer is about discovery and problem solving. Working sessions are about discovering the solution to a problem while simultaneously implementing it.
Don't just schedule work time
Don't forget to schedule breaks and time for other activities!
If you just schedule long work blocks without breaks, you'll burn out. Sometime during the day, you'll get "off schedule" or start to feel tired and depleted. This will kick off a cycle of feeling bad for not being able to follow a system that was impossible anyway.
Alternatively, if you leave blank space on the calendar, you might think that time is for you to take a break, eat lunch, water your plants, or whatever, but your coworkers will think that time is up for grabs. Your project manager for instance, might see that as time you're available for a "quick" check in.
I have the whole work week scheduled in my calendar app of choice, Fantastical, but not all the events are time for work. In addition to work blocks, I've scheduled when I'll break for lunch, a 30 minute break in the middle of the afternoon, and when I'll exercise at the end of the day.
Blocks of time are "dynamic"
I block off the whole week with something. I'm totally open to changing it. In fact, it's very likely that the schedule I make on Monday will change throughout the week. But I start with all my time blocked off.
If an important meeting comes up, I shift my working sessions to accommodate the meeting, or I politely decline the meeting. As an added bonus, I have found it easier to say No to meetings, now that I block off time like this.
You can't perfectly predict how the week will go, so throw that notion out the window right now. Instead, expect to shuffle things around.
It's likely that something will take longer than you expect, meaning you need to adjust the number of blocks dedicated to the project. Alternatively, an unexpected meeting with a client could come up, which you need adjust your schedule around.
Start with a template
When I open Fantastical on Monday morning, this is what I see:
My whole week is scaffolded with a set of repeating events.
The red events are recurring weekly meetings. I've also blocked off in green when I'll take breaks and when I'll end the day (more on that later). Finally, in grey, I have 11 work blocks, each 2 hours long. That comes out to 22 hours of deep, focused work each week. 22 hours of uninterrupted, focused work is a lot.
First thing Monday morning, before I meet with my writing group, I sit down and schedule out each block by changing the title of the event to the project I'm going to work on. This usually takes me less than 30 minutes.
This schedule is crafted around my work as a freelance developer. So this particular schedule probably won't apply to you. But scaffolding out your week like this has a lot of benefits.
Instead of scheduling the week from scratch every Monday, I can just fill in and modify my template. After about 6 weeks of following this schedule, I can feel when I'm close to a break and push to reach a good stopping point before a working session ends. Perhaps most importantly, I have time blocked off for the things that are important, but never urgent (like the administrative work I need to do for my business).
Keep it visible
I have notifications turned off for absolutely everything except my calendar app. This means I'm not interrupted during a work session and can really focus. It also means I don't have to think about what I'm doing at any given time, I just follow my calendar.
With Fantastical, in addition to receiving notifications for my next event, I can have the current or next event in the task bar where it's always visible. If I'm deep in flow state during a work block, I'll get a notification that my next break is in 15 minutes. That gives me time to wrap up what I'm working on and get to a good stopping point. Similarly, if I'm dragging and having trouble making progress on something, I can see how much time I have left until my next break and commit to focusing for the time remaining.
Schedule out the end of the day
I end every workday with a short, 30 minute kettlebell workout, which I have scheduled on my calendar.
This serves two purposes. First, just like I do with lunch and breaks, I'm scheduling when I'll work out, so that I will actually work out. I even put the exact workout I'm going to do in the description of the event. Second, and perhaps more importantly, it marks the end of my work day. I can feel when I'm getting close to the end of the day. I know I need to wrap things up so I can workout and finish my day.
I hope this has inspired you to give time blocking a shot. Try scheduling out when you'll work, when you'll take a break, etc. You can start by doing it each morning and just planning out the day in front of you. When that starts to feel natural, try planning out a whole week in advance.
Time blocking is a great way of managing your time and making sure you're making progress towards your long-term goals. It's also not an all-or-nothing system. Keep that in mind as you start to experiment with it.