This is the second part of the series on making the most out of your time. The first part (Coding) focused on how to write your code to protect your future time. Today we focus on the present, meaning how to efficiently use the time you have now.
You are a software engineer, right? This means you should spend most of your time writing code. But it’s not uncommon to go through a day at the office where you write very little code. You have a couple of meetings, a bunch of emails, some hallway conversations and interruptions, a few minutes here on social media or reading an article and next thing you know the day is gone.
With this in mind I’ve come up with my favorite list of 12 Dos and Don’ts for time management in software development:
Don’t
Don’t check email/IM first in the morning. It’s very easy and tempting to fire up your phone in the morning and look at your emails. But the contents of your inbox are other people’s agenda. Someone else’s urgency does not make it your priority. I suggest you try to get a couple of important things done in the first 1-2 hours of your day before checking email. Even if you don’t immediately engage in an email, just reading it will occupy and distract your mind.
Don’t multi-task: It’s been studied over and over how inefficient it is to constantly context switch. (see American Psychological Association). Writing code or debugging are very attention intensive tasks, so for us this effect is amplified. And like it or not, we humans are single-core (single brain!) systems.
Don’t check email/IM constantly: This is another form of multi-tasking and a surefire way of loosing your focus. It often goes like this: your are in the zone coding, then an email comes in, perhaps someone is asking your for a time estimate on a different feature. Now you are thinking about this other feature, maybe you fire up your browser to read up on Node.js or whatever new technology you’ll have to use. Next thing you know you’ve spent an hour or more away from your primary task. According to Gloria Mark at the University of California, Irvine, it’ll take you 2 other tasks and 23 minutes to get back to the original task.
Don’t attend all meetings: It’s amazing how many meetings are unproductive. Look at the meeting agenda and ask yourself: do I need to be there? Or will reading the meeting notes be sufficient? If you are being asked to provide information in the meeting, can you send it via email ahead of time instead? And if there’s no agenda, ask for one!
Do
Do plan your day and week: Planning forces you to prioritize your work in a conscious way. Without a plan and clear priorities it’s easy to procrastinate or to have your days run you by the constant stream of information coming your way.
Do multi-task: I know, I know! I just told you not to. Fine-grained and live (in the moment) multi-tasking is terrible because of all the context switching. However, I find that always having a couple of important things on your plate can make you more efficient. The reason is that it’s very common for a task to get blocked by external circumstances. For example, you might need input from another engineer or your product manager, a long (i.e hours) batch job may need to run or you may have to wait for someone else to check in code you depend on. When this happens you can switch over to another task and stay productive while your dependency gets resolved. You want to do this with broad time intervals, like several hours or even days at a time to minimize the overhead.
Do turn off all non-essential notifications: In particular desktop notifications, which interrupt your flow. I’ve found it useful to go one step further and shut down all non-essential applications such as Outlook, Skype and even all browser tabs I’m not actually using. This creates a distraction free environment that let’s me stay focused.
Do batch-read email and other forms of media. Going through your emails in batch just a couple of times a day is a real time saver. You avoid constant interruptions, and you can read threads in one go as opposed to piece meal. At first this can be anxiety provoking if you are used to reading and answering in real time. It may also take some time for people you work with to get used to hearing back from you at certain time intervals. So you can start by just shutting off email for an hour or two, and then slowly increasing those intervals until you find a certain number of times a day that works for you. The goal should be to set a couple of fixed times in your day when you read and respond to communications and to be consistent about this. For example, I’ve found that for me it works to do it once around 10 am after I’ve completed a couple of tasks (I start work early) and before the end of the day as I plan the following day.
Do stay idle: We often have short-lived (e.g. < 1min) waits when writing code: compilations, updating git, deploying bits, etc. It’s very tempting to use this time to quickly check email or read a bit of an article. This looks harmless but can really break your flow. Instead, keep your mind focused on your task. E.g. think about cases you haven’t tested, or a better way of factoring the code. I like to think of this technique as a mental spinlock. You can also use this time to give your eyes a break from the screen (look away to the window or another far place).
Do avoid distractions. Whatever your work environment is, eliminate as many distractions as possible. For example, close your office door or wear headphones. This creates a subtle barrier for unnecessary interruptions while keeping you available should something important arise. However, I find this works better if used selectively. E.g. if you only wear the headphones during your focused time (as opposed to 24×7) people are more likely to respect that boundary.
Do make others wait. This is a mechanism I’ve used to minimize the impact of interruptions. When someone comes to you and says ‘Do you have a minute?’, rather than immediately interrupting your work you can say something like:
- ‘Sure, I just need to [finish this email | check-in this code | close this bug]. Can I stop by your desk in 10 mins?’
- ‘I need to prepare for a meeting, can we talk at 2pm?’
The main advantage is that you can avoid losing your concentration. Obviously there will be times when something urgent needs to be handled. But if you use your best judgement and are polite and professional I find that this works really well.
Do drop the ball. From time to time it’s ok to drop the ball on small things. Just as with time, we have a limited capacity for attention, so we should budget it appropriately. Having to be reminded of a low priority item it’s a good trade-off if this allows you to stay focused on your high priority tasks.
Suggested reading
There are countless books on time management and efficiency, but the two that have given me the most value are:
The 4-Hour Workweek: Escape 9-5, Live Anywhere, and Join the New Rich
Getting Things Done: The Art of Stress-Free Productivity
Do you have other time-saving or focus techniques that work for you? Leave them in a comment so we can all get better!