Micro-Sprints – How to get things done as a developer
Published on Tuesday, October 19, 2010 12:34:00 PM UTC in Philosophical & Programming & Tools
This is not a post about a particular technical problem. It's about how I manage to get my work done. People actually ask me this question, and since I have put quite some thought into how to structure my day, I thought: "Why not share this with everybody else?" That is why you're reading this. Maybe it helps you too, or at least makes you think about the way you work, to improve your efficiency. Here we go.
A decade ago, a series of remarkable posts by Joel Spolsky fascinated me. He was writing about what he called "the zone", and from my perspective hit the nail on the head with every word he wrote. Until then, I had never thought about this phenomenon, let alone given it a name. Being in the zone is a state of full concentration, when you work most efficiently. Sometimes people are able to get sucked into this so deeply that they lose track of time and even forget to eat or leave work. When they finally realize that it's 3am, they have finished a tremendous amount of work and don't feel exhausted at all (of course they might be in the next morning or an hour later though). Every programmer who has experienced this will tell you that it's an incredible feeling of elation.
However, according to Joel, there are two problems with "the zone". The first one is to get there, and the second one to stay there. For both, distraction is the greatest danger. Over the years I found that people have developed interesting techniques to fade out their environment to avoid these distractions. For example, one particular colleague who had to work in an open-plan office used to wear headphones and listen to classical music, admittedly at high volume. It was absolutely impossible to distract him other than to tap on his shoulder or similar, and even then it seemed as if he was only slowly surfacing from a different world.
Personally, I still think that being in the zone is the most productive way to get work done as a developer. Sometimes I consciously opt for that; for example when I know I'll be alone in the evening, I take half the day off, go to the park, take a nap or similar, just to do some work at night (when there are much less distractions).
In the last decade, our daily life has changed quite a bit. Getting in the zone now is harder than ever, because every new "big thing" added new potential sources of distraction, and the amount of irrelevant information passed to everyone of us increases steadily. Joel wrote about phone calls and interrupting colleagues. Today you also have to fight SMS, Facebook, Twitter, IM. In fact, I have seen people "work" like this:
"Ok, let's see what we got here..."
...scrolls around some source code in Visual Studio...
hoo-hoo "Oh, two new emails"
...switches to Outlook, reads the emails, replies to one of them...
"Ok, back to work. What was that again? Oh, yes..."
...scrolls around some more in Visual Studio...
"Hey, Jeff has finally blogged!"
...reads the new Twitter message in Seesmic...
...clicks the link to the blog, reads through the first paragraph, bookmarks the page for later...
"Okay, time to get some work done..."
...scrolls around in some source code once again...
"Cool, Tom's online."
...reads the Skype message...
...clicks the link to an xkcd cartoon, laughs, writes a funny remark for Tom...
"Well, I should really get back to work..."
...switches back to Visual Studio and starts reading...
...reads the SMS from his wife and writes back that he'll be back for dinner in time...
That might be an exaggeration, but you get the idea. At the end of the day, people don't know where their time went. They only see that they could not finish half of what they had planned in the morning. They feel that something's wrong but cannot get quite to the core of it.
When your employer finds a decline of productivity in their numbers, or simply notices people are spending their time with things not related to work, a natural reflex - sometimes out of sheer desperation - often is to take drastic measures and simply forbid anything that is not related to work. No Twitter, no Facebook, heck no private surfing the web at all. And uninstall that messenger, ASAP!
My personal opinion is that this is not a good solution. In fact, it's no solution at all. I still remember that one guy who spent half the day with cigarette breaks and most of the other half staring out of the window. If people want to sabotage you or hate their job, they'll do their work half-heartedly, and cutting them off the internet does not solve that. But that's a completely different discussion.
When you realize that you're not able to keep up with your work, the first thing is to take a step back and check whether the reason is that something is wrong with how you work. Once you've realized that it indeed may be the constant distraction that ruins your productivity, you actually might start thinking about cutting yourself off of all these tempting new technologies. Maybe you become afraid of drifting off completely and eventually losing your job, or you simply don't want to give your boss a reason for the mentioned drastic measures. After all, keeping at least some privileges is better than losing them all, right?
Thinking like that is a good start. But my experience, though, is that you don't have to abandon all these things. Cut back? Maybe. But most likely you simply need to restructure your daily work. Here is how I do it.
Again I didn't think about a name until I started writing this article, so please forgive me if the ad-hoc idea of naming my method "micro-sprints" does not sound like the most inventive phrase to you :). The idea behind that is to use short periods of time to fully concentrate on a single unit of work exclusively, and then "treat yourself" with another short amount of time where you are allowed to do something not directly related to your work - check your emails and twitter messages or read blog and forum posts. I vary the duration of these time periods depending on the circumstances and the type of work I need to do, but usually they last from 10 to 30 minutes for my work, and 2 to 10 minutes for other things. During the work periods, I fade out everything not related to what I'm currently working on as much as possible and stay focused on only that particular topic. There's no need to create work units small enough to be finished in those micro-sprints. If you can finish something, good. If you can't, don't worry, that is by design ;).
You now may ask yourself: "And that's it?" Yes, that's it! The problem with this is that it sounds very simple when you read it, but it's actually really hard to do, especially when you're used to the style of working I described above. It requires an awful amount of discipline at first, but the increase in productivity I've gained by this method is exceptional. Let me guide you through some preparation steps and provide some tips for the beginning.
1. Know yourself
The first thing you need to do is get to know yourself a little better. Most people have no real idea of how long it takes them to get fully focused and concentrated on a single issue. Neither do they know how long they're capable of staying focused until they start to drift off. The latter problem really shouldn't be an issue with micro-sprints, because a working period should never be long enough so you get into this situation. If you cannot focus on a single topic for 20 or 30 minutes straight, it's probably time for a longer break, or you're too tired or exhausted and should call it a day.
The first problem however is crucial when you start working in micro-sprints. If you find that you need ten minutes to accommodate to your current work unit, then there's no point in having ten minute micro-sprints - you'll stop working just when you got into the right mood for being really productive. The good news is that even when you observe you need a rather long timespan to fully concentrate on something at first, it hasn't stay that way. This is something that can be trained over time. It's even likely that you'll need quite some time to focus in the beginning and that this timespan will shorten when you get used to this way of working. That is why I recommend starting with a rather long working period of maybe 25 minutes, followed by 5-10 minutes of rewarding yourself. Also, in the beginning you should try not to vary the periods too much. Try to stay as close to a fixed pattern as possible, throughout the day.
2. Ways to get focused more quickly
I am far from being an esoteric person. However I know that certain techniques of relaxation help you feel better in a lot of situations.
For micro-sprints in particular, these techniques can help you get focused on your working unit more quickly. The reason for this is that when you want to switch to your work you need to make a cut and wipe all the (private) things you're currently thinking about from your mind. Relaxation techniques usually try to help you with that, they try to teach you to think of nothing, or settle your thoughts. That's actually very helpful as a clear break between your "reward time" and working sprints.
That doesn't mean you have to climb your desk and do some yoga exercises. There are a lot of techniques that are really easy to learn, subtle and only require a few seconds of your time, so you can also do them at work without having to fear that your colleagues will make fun of you for the next decade or so. For me, 15 seconds, closed eyes and three deep breaths is all it takes to get enough distance between what I just did and what lies ahead of me. Over time, I managed to shorten the time span I need to become fully concentrated on a particular topic down to two or three minutes, less when I'm lucky. Obviously this depends on the kind of work I have to do. Working on some complex semantic technology issue usually takes longer to concentrate on than designing a user dialog in Blend.
3. Control your tools
Do not let them control you. This actually is one of the harder parts: you need to move away from a pushed-based workflow to a pull-based one. Which means: turn off all notifications in all the software you use. Disable Outlook's notification about new emails. Disable Skype's notification windows about new message. Do not let Seesmic (or whatever Twitter client you're using) show you notifications about new tweets. You may think that it's no problem when you leave those on, that you can simply ignore them. Trust me, you can't. Whenever something in the corner of your eyes moves, blinks or appears otherwise, it will draw your attention. The reason for that is peripheral vision. Any notification window will lower your current focus and interfere with your concentration. Turn it off. When you start a working sprint, also minimize those applications. An incoming email that pops up in Outlook on your second monitor is most likely just as distracting as the notification window in the system tray.
I even go one step further. If I work on important stuff, I turn off my phone. I set my mobile to silent and let calls go straight to voice mail. It's 20 minutes to the next break, and I've barely had any emergencies in the last 10 years that could not wait for that amount of time. People who know me are used to the fact that I'm usually not "instant-accessible".
Close your office door (if you're lucky and have one). A closed door will stop people that pass by from chit-chatting. When your door is closed, some will hesitate to disturb you even when they have a question. They'll come back later or find an answer somewhere else. If you're working in an office cube, try the headphones approach of my ex-colleague I described above.
I realize that it can be difficult for some of you to follow all these points. You might not be able to turn off your phone when you are on call. Listening to music may not be allowed where you work. You may not have a separate office. The point is, do anything you can to fade out as much of the environment as possible.
When you've finished your micro-sprint, you go to your mail client and see if there are new messages. You check your Twitter account. You see if there are voice messages on your phone. That is what I meant by "pull-based workflow". You decide yourself when you get some piece of information. Do not let your tools push these to you and interrupt you in the middle of your work.
4. Forget about time
An important thing when you start working in micro-sprints is to actually forget about time. "Huh", you may ask yourself, "first he tells me that it's all about time, and now I shall forget it altogether?" Exactly :).
One problem actually is that now that you're so focused on working 25 minutes straight until the next break, you can easily end up watching the clock for half of these 25 minutes (so you don't miss the right time).
The solution to that is rather simple. Use a stop watch of some kind to time your sprints. Like with any other distraction, you should also avoid keeping an eye on the clock. Just concentrate on your work until your stop watch tells you it's time for the next break. By the way, your colleagues will be very thankful if you do not use your grandma's mechanical egg timer for that :D. A small freeware tool sitting in your system tray will do much better.
5. Advanced techniques
I've already talked about some limitations. Your daily work might not only consist of pure development work. You may also have to attend meetings or be on call for support or similar. Also, you may have colleagues or other sources of distractions that interrupt you in your micro-sprints rhythm.
Often there's little you can do about these things, but once you've become used to working like that, you can start moving on to more advanced techniques to arrange with some of these situations. For example, I usually adjust my sprint periods very dynamically. For example, when I know I have an upcoming meeting, I shorten the time span of the next sprint to fit. Or let's say when the next unit of work I'm trying to finish only takes me 15 minutes, then I stop when it's done, without waiting for the stop watch signal. The reason for that last one is that when I'm finished with a unit of work after 15 minutes, I'll probably need another two or three minutes to concentrate on the following issue which I then can only work on for another few minutes. So I'd rather take the break early and then use the complete next sprint for that next unit of work. Be careful though. You should generally try to avoid to spontaneously shorten a work sprint without proper reason, especially to "take a quick look at my email" or similar. Obviously this completely defeats the purpose of the sprints in the first place. If you have enough time to drift off and think about your email during a work sprint, you are not concentrated or focused enough.
Someone I talked to about this technique adopted a slightly different variant. Instead of turning off all notifications in his favorite programs and minimizing or closing applications, he actually uses two different Windows logons. When he wants to concentrate on his work he switches to the second account where nothing else than what he requires for a particular problem is running. Once finished he returns and finds all his other applications as he left them. Obviously this only works when you don't rely on a certain login (e.g. a domain account etc.), and it also might not work in a restricted environment where you cannot create additional accounts. A similar, maybe somewhat easier and more comfortable alternative would be a multi-desktop tool. I plan on trying that in the future.
At closer inspection, you might realize that I've not really given up on the idea of being in the "zone" at all. In fact, all I'm trying to do is create optimized conditions to get into the zone as quickly as possible, so I can use that extra boost of elevated concentration on multiple occasions during the day. Instead of "micro-sprints" I could've as well chosen "micro-zones" as a name.
I describe here what works best for me and what I have refined over a longer period of time (read: years) to fit my needs. I've talked to others about this and they have come to likewise conclusions or developed very similar behaviors, independently from each other, which I found very interesting. Still, this is nothing that is carved in stone. I only want to encourage some thinking about how we work, and what makes productive work more difficult in these days. Your situation may be very different (especially when you're working in a bigger company with stricter policies), and my technique even may be something you cannot accommodate to, at all.
For me, micro-sprints have opened a way to get my work done in time without being forced to pass on social networking and related stuff. A 25/5 micro-sprint pattern roughly gives me one and a half hours of "reward time" each day, which is more than enough e.g. to indulge in excessive posting on the Silverlight forums, for example.