Work 2.0 – the interruptible programmer

Development, Personal, Productivity 87 Comments

I’m 37, and I’ve been a (professional) developer for 16 years. You would have thought that in that time, I’d have figured out an effective work style which delivered the desired outcomes (code cut, products shipped etc) without causing detrimental knock-on effects – but, sadly, you’d be wrong. I think the style in which I practiced my craft for the first 15 years of my career was much the same as every other enthusiastic developer: you put a ton of hours in. 12-16+ hour days, evening and weekend coding marathons, pizza in the keyboard, crunch times, 3am debugging sessions where you just can’t go to bed because you can feel the source of that bug just beyond your fingertips, dammit, desperate last-minute sprints to deadlines where you manage to slot that last piece in, Jack Bauer-like, just before the world goes to hell. If you’re in the demographic I’m talking about, you’re nodding sagely, and probably grinning a little too, reminiscing on past trials and glories. This sort of crazy dedication is respected in our circles, and is pretty much expected of any developer who has claimed to earn their stripes.

But, it turns out this kind of thing is not good for your health – who knew? Those of you who know me or keep up with my blog know that I’ve been dragged kicking and screaming away from my old ways, because of back issues that I initially ignored, then tried to cope with using token accommodations, and finally succumbed to in a big way. Being self-employed, this was a major problem. Crawling out of the pit I dug for myself took a long time and a lot of frustration – I read quite a few productivity books on the subject to try to find answers on how to keep working, and in the end found that the answers you mould for yourself tend to be the best ones. I’d like to share one of the things I learned along the way.

But I’m ‘In The Zone’!!

So, I want to talk about the biggest problem I encountered: concentration periods. I can’t sit at a desk for longer than about an hour at a time now; if I don’t get up and walk around, do some gentle stretching etc, at least this often, I’ll pay for it badly once I do move, and probably over the next few days too. I also can’t realistically work more than a standard 8 hour day without pain any more. The problem with this was that, as a programmer, the style which I developed over 15+ years involved getting gradually ‘Into The Zone’ and coding for very long periods at a time, uninterrupted. This is a common theme among coders, who like to shut themselves away for hours at a time, wear headphones to avoid distractions, have ‘quiet times’ and so on – and it’s also why we tend to react really badly when interrupted. Programming requires concentration, and concentration seems to run on a valve system – it takes time to warm up, and once it’s going, you don’t want to turn it off because starting it up again is a major hassle.

I thought there was no way around this, and had begun to resign myself to just being less productive because of it. However, over the last 6  months in particular, I’ve discovered that, far from being an intractable problem, this ‘slow warm up, long uninterrupted focus time’ approach is to a large degree a learned behaviour, and it’s possible to re-train yourself to cope with things differently. It’s a little like when people learn to adopt polyphasic sleep patterns – it’s not that you can’t do it, it’s just that when you’ve become accustomed to doing things a certain way, changing that is initially very, very hard. But it’s not impossible, given the right amount of motivation and time to adjust.

So, my goal was to acclimatise myself to many shorter work chunks during the day instead of a few very large ones, while still maintaining productivity. The key to this was to learn how to get back ‘In The Zone’ in the shortest time possible – much like the way polyphasic sleepers train themselves to achieve REM sleep more quickly. I’m mostly there now, or at least way better at it than I was, so, what techniques did I use to make this transition?

  1. Embrace interruptions
    This is less of a technique and more of a deliberate psychological adjustment which cuts across all the practical approaches I’ll cover next. Instead of being the typical coder who avoids interruptions at all costs, you need to accept them, and learn to manage them better. It’s hard – you have to try to set aside years of resisting interruptions and initially, until you adjust, you’ll feel like you can’t get enough done. Many people will probably want to give up, unless there’s something specific motivating them to push through it – for me, daily pain was a great motivator. My main message here is that the transition is just a phase, and that it is possible to be an interruptable programmer who still gets things done. But you have to learn not to fight against it, hence why this is the first point.
  2. Maintain context outside of your head at all times
    Much of the problem with interruptions is that of losing context. When you’re in that Zone, you’re juggling a whole bunch of context in your head, adjusting it on the fly, and maintaining and tweaking connections between issues constantly. Interruptions make you drop all that, and it takes time to pick it all up again. My answer to this was to externalise as much as possible, on as many levels as possible:

    1. Maintain a running commentary on your current task
      I am my very own chronicler.
      I write notes on what I’m doing all the time, whether it’s adding a comment line to a ticket, committing frequently and writing detailed commit notes (you do use a DVCS to make light commits more practical, right? ;) ) scribbling a drawing on (ordered) pieces of paper. This really isn’t that onerous, and in fact externalising your thoughts can often help you clarify them. Basically the guide is that roughly every 30 minutes, I should have generated some new piece of context which is stored somewhere other than my head. If I haven’t, then that’s context I’d have more trouble re-building mentally if I’m interrupted. It doesn’t take much time to do, and it has other benefits too such as recording your thought & decision process.
    2. Ruthlessly ignore tangental issues
      You might have noticed that in the last bullet, I used the words ‘current task’, singular. Not ‘tasks’. There is no such thing as having more than one ‘current task’ – there is only the one task you’re actually working on, and distractions.
      We probably all use bug trackers / ticket systems to track bugs and feature requests, but when you’re working on a ticket, it’s very common to spot a new bug, or identify an opportunity for improvement, or think of a cool new feature. How many of us go ahead and deal with that right away, because it’s in the area we’re already in, or it’s ‘trivial’, or it’s a cool idea that you want to try right now?  I know I did – but I don’t any more; any tangental issues not related to what I’m currently doing get dumped into the ticket system and immediately forgotten until I’m done with the current task, regardless of their size, relevance or priority. It sounds simple and obvious, and this might even be official procedure in your organisation, but I challenge most coders to say that they actually do this all the time. The benefit is that even the tiniest of distractions add an extra level of context that you have to maintain, which is then harder to pick up again after an interruption.
      For this to work, you need a ticket system which is fast, lightweight, and doesn’t require you to be anal about how much detail you put in initially. You need to be in & out of there in 30 seconds so you can offload that thought without getting distracted – you can flesh it out later.
    3. Always know what you’re doing next
      This is one from GTD (‘Next actions’), but it’s a good one. When you come back from a break or interruption, you should spend no time at all figuring out what you need to be doing next. Your ticket system will help you here, and so will the running commentary that hopefully you’ve been keeping on your active task. If you’ve been forced to switch gears or projects, so long as you’ve maintained this external context universally, you should have no issue knowing what the next actions on each item are. The important thing is to have one next action on each project. If you have several, you’ll have to spend time choosing between them, and that’s wasted time (see the next section on prioritisation). At any one time, you should not only have just one current task, but one unambiguous next action on that task. Half the problem of working effectively is knowing what you’re doing next.
  3. Prioritise Negatively
    I mentioned next actions in the previous section, but how do you decide what comes next? A lot of time can be frittered away agonising over priorities, and I used to struggle with it; I would plan on the assumption that I wanted to do everything on the list, and I just needed to figure out which I needed to do first. I discovered that I could cut the amount of time I spent on planning, and also get better, less ambiguous priorities by inverting the decision making process – to assume a baseline that I wouldn’t do any of the tasks, and assessing the negative outcomes of not doing each one. So instead of ‘which of feature A or B is more important to have?’, it became ‘Let’s assume we ship without feature A and B. What are the issues caused by omitting them in each case?’. It might appear to be a subtle difference, but having to justify inclusion entirely, rather than trying to establish a relative ordering assuming they all get done eventually, tends to tease out more frank evaluations in my experience.
  4. Recognise the benefits of breaks
    Much of the above is about limiting the negative aspects of taking breaks, but the fact is, that they have many work-related benefits too. I’m willing to bet that all coders have stayed late at work, or late into the night, trying to fix a problem, only to find that they fix it within 15 minutes the next day, or think of the answer in some unlikely place like the shower. The reason for this is very simple – extended periods of concentration seem productive, and can be on operational / sequential thinking, but for anything else such as creative thinking or problem solving, it’s very often exactly the opposite. Not only do tired minds think less clearly, but often the answer to a problem lies not in more extensive thinking down the current path which you’ve been exploring in vain for the last few hours, but in looking at the problem from a completely different perspective. Long periods of concentration tend to ‘lock in’ current trains of thought, making inspiration and strokes of genius all too rare. Creativity always happens when you’re not trying, and it’s an often under-appreciated but vital element of the programming toolbox. Interrupting that train of thought can actually be a very good thing indeed.

There’s more I could talk about, but that’s quite enough for now I think. I hope someone finds this interesting or useful :)

87 Responses to “Work 2.0 – the interruptible programmer”

  1. Rapchik Says:
    September 4th, 2010 at 12:42 pm

    Very well written steve, ive actually recently started taking more breaks because of my back issue too.. and its been around a month and the point that i have been following most from the above is maintaining context outside my head.. i keep a notebook in front, and whenever getting up right in huge letters what i was thinking at that moment.. when i return i can just continue that string of thought and be ‘ready’ very fast..

  2. Ivan Vu?ica Says:
    September 4th, 2010 at 1:08 pm

    Thank you for this post. I’m having large problems concentrating during the last year or two, and some of the techniques might help me regain productivity.

    I never did quite “concentrate” and insist on not being interrupted, however for quite some time this tendency of mine began to negatively affect my projects. This might help me develop something to regain productivity.

  3. Jesús Alonso Says:
    September 4th, 2010 at 1:46 pm

    Hey Steve! I’m glad to read you’ve found a method that works great for you and your health :)

    Interestingly, this is pretty much my working method as well. My motivations are mostly that I’m a little hyperactive and can’t stay focused for too long in the same thing, and that my joints easily become stiff. In the end, I’ve found that regardless of those reasons, this method works great for me as a programmer.

    And the funniest part is that I’ve found similarities with what most painters say about working on a very complex painting: Pause often, as you easily become too used to your own painting (code) and lose the big picture. When painting, it’s pretty easy to see things “working”, but after a pause many things suddenly don’t work! So as a painter I’ve found it really useful too :D

    Of course I can’t express these ideas half as well as you’ve done, and am pretty sure many readers will find it useful :)

  4. Klaim Says:
    September 4th, 2010 at 1:57 pm

    I’ve learnt early to embrace interruptions, but for bad reasons (had to work in a company that maintained a hundred of applications with each 10 developers having to know them).

    For a long time I thought it was a problem because other programmers seemed really happy to get in the zone and be anger when interrupted, while I was more eager to help when someone interrupted me.

    I also learnt to work the way you’re advising but only for home projects because I had not enough time each time to get in the zone or maintain context more than one hour, without being late at work the next day.

    Now I see for the first time someone that have a lot of experience and that says I’m on the good way, that’s refreshing. I thought I was not :) Even when collegues praised me for my way of working (that they called Budah-style programming…) that allowed me to always be available for help, even while working on critical code (like AI).
    Even breaks, that I naturally felt good for problem solving and creativity couldn’t be justified easily to management when I took a short walk in the company building every one or two hours. I understand that it’s hard to understand.

    So, thank you for this synthetic advice that help me to be confident in my way of working :D

  5. TicketMaster Says:
    September 4th, 2010 at 5:46 pm

    Great blog! What lightweight ticketing software are you using? Trac?

  6. jsimmons Says:
    September 5th, 2010 at 12:40 am

    Related to 2.2, Zed Shaw once said to me in response to ‘killing two birds with one stone’ that ‘the man who chases two rabbits, catches none’. I quite liked that.

  7. foamdino Says:
    September 5th, 2010 at 2:44 am

    I’ve found that the more work and less time I have the easier it is to concentrate.

    I also start each day with a hand-written list of tasks (stuff I have to get done and stuff I would like to do). I break the tasks up so that they’re small enough to do in about an hour. This means I can assume that I have enough time between interruptions to finish 1 task on my list.

    Each time I finish something I take a 5 mins screen break – sometimes I finish something in 1-2 mins then I get a 5 min break before getting back to the next task.

    The hard part is working out what’s next – my list is not ordered in anyway so this is where my technique needs refinement

  8. Steve Says:
    September 5th, 2010 at 10:56 am

    Thanks for all the positive (and fast!) feeback :)

    @TicketMaster: I’m using Redmine right now. I used Trac for quite a while, but Redmine has a little less friction to it (fewer clicks to get to where I need to) which is why I switched. I can’t say I’m 100% happy with it – it’s a pain to set up and it’s still fairly basic in many ways (ok, that perception may be coloured by the fact that I’ve used ClearQuest before), but for a small team it’s still very handy.

  9. Benjohn Says:
    September 5th, 2010 at 12:07 pm

    My ticketing system of choice at the moment is a per project plain text todo file. As a one man team, it works well :-) advantages: flexible, easy to set up and maintain, works with lots of tools, amazingly quick and simple to add ideas to, as needed ad-hoc formatting, zero chrome, … there are probably some down sides, but they’ve not grown obvious enough to out weigh the up-sides yet.

    Great post, thanks!

  10. Alfred R. Baudisch Says:
    September 5th, 2010 at 3:10 pm

    Nice to see that I’m not alone on the “get up every 1h or less”. I tought I was the least productive person on the world.

    For a easy and fast task/project management tool I recommend Pier Project (www.projectpier.org). I discovered it recently, and it is pretty easy to setup/complete tasks (easier to maintain than Trac).

  11. Mike Berg Says:
    September 5th, 2010 at 9:27 pm

    I’m not a programmer, and I still found this incredibly informative and helpful… I really appreciate the diligent ticket tracking and “you can’t multitask” points. Now to train myself into it!

  12. kuranes Says:
    September 6th, 2010 at 6:38 pm

    Ready to use WorkRave now ? ;)

    Really, it’s all about breaking the “hypno-toad” effect of screens (futurama knowledge required)

    I’m still using workrave as the main helper there…

    1) paper (1 notebook per subprojects…) Writing an awful lots of things (current state, questions list, answers, todo, planning, mindmaps, etc)
    2) Pile up readings and todo for offscreen moments. ( ereader are perfect for that )
    3) daily exercise (at least a walk), daily creativity break ( see below )
    4) Think about meditation/breathing ( “meditation for dummies” is a ‘must-read’)
    5) a small mid-day nap (20 mn)
    6) I use a sitting desk and a standing desk alternatively in the day.(more standing than sitting)
    7) Workrave software is installed on every computer I use. All in sync. All popping annoyingly. And I’m really making stretching each 15mns.

    Interestingly, I’m also reading about polyphasic sleep success stories all around the web and really thinking about it… but the lack of long term trial (>8yrs) is a bit frightening, still…

    What still takes me awful moments is phone/skype audio. Not efficient enough no matter how hard I try to be on “meeting” preparation…

    Creativity Breaks must see : http://www.presentationzen.com/presentationzen/2010/09/presentation-a-few-minutes-with-john-cleese-on-creativity.html

    Another gold tip is to practice “speed reading” (the good one, about gaining speed without loosing any meaning)

  13. Cyril godefroy Says:
    September 7th, 2010 at 9:54 pm

    I lasted longer than you with the back issues, as i’m 39. But same story here…

    I also try to have mobile stuff to work while standing, elsewhere: notebook, iPhone, something to read. I alternate standing desk and sitting desk. I’m waiting for a new chair where you put the knees on opposite ‘arms’.

    All that works is good.

  14. Steve Says:
    September 8th, 2010 at 8:55 am

    @kuranes: I used WorkRave and Time Out (on Mac) to get me into the habit of breaks, but I don’t use them anymore. I keep an eye on the clock and know when to break, give or take 10-15 mins – or break when I’m interrupted by something else and it’s close enough to a break time anyway. That’s much less annoying than obeying a piece of software :)

  15. kinjalkishor Says:
    September 9th, 2010 at 4:17 pm

    Very great informative post. And you speak from personal experience. Really helpful.

  16. Darran Edmundson Says:
    September 15th, 2010 at 12:21 am

    This year I’ve been spending too much time at the computer. A few months ago I started setting a timer to go off on the hour. When it does, I immediately stop what I’m doing and exercise. Could be 15 pushups, a minute of a “plank brace”, whatever. Not a lot in isolation but multiply by a 10-hour workday and it quickly adds up. This isn’t a substitute for real activity … it’s pretty amazing how fast an hour can go though when you’re “in the zone”.

  17. Goldfrapp0x0309 Says:
    September 20th, 2010 at 7:27 pm

    Awesome article. Loved the “Externalizing Mind Contexts”. Gives the whole working alone concept a dynamic approach!!! THANKS!

  18. MECHanibal Says:
    September 29th, 2010 at 12:50 am

    I worked as a mechanical designer and I was pretty frustrated at times when I was commanded to go into meetings when I had just gotten myself to do some productive work.

    I sat hours in meetings in which I was not needed at all – I was just there because I was part of the team. Some preparation of the meeting by the project manager would have been helpful! You can imagine me sitting there and thinking “ok so I am behind the schedule and here I am listening to these electrical engineers talk about something totally unrelated to what I am doing, grr”. I designed steel structures… not wiring systems! But I was forced by the manager to listen to the electrical engineers talk about how to do the wiring. I knew it was dumb but there was nothing really I could do because I had been told to sit there by my boss.

    I told my bosses that I was behind schedule and they just ignored what I was saying. I told them that I need help to do the work. They had put me responsible for quite a large area of the machine we were designing and originally I was not supposed to be responsible for that large an area but I guess they thought it’s OK… I think my mistake there was that I should have been much louder when telling them that it’s not going to work, that it’s too much work for me. I just kind of told them a couple of times and then gave up when they were not believing me.

    Yeah, okay. This is about interruptions. The meetings interrupted me badly. I often had to travel to another location in the city to a meeting so it would mess up half of my day just for the meeting. And then they expected me to do my design work in the rest of the day. So this meant I had to work overtime. Then they wondered why I have to do overtime. Well, because I sat in the meeting with you listening to things that don’t help me at all in my work. And because you gave me too much work to begin with.

    Eventually I began to hate the job – even though it was a good job actually, just this one project sucked big time because the client was unreasonable with the demands. Okay so I began hating the job. Eventually I quit the job and now I do something else. It’s bad because bad project management and bad management of my time (by myself) lead me to lose a job I actually liked. I quit by myself and nobody forced me out of it. My boss told me I could come back any time I wanted to. So I left on good terms. But the last experience I had with that one client was so bad that it left such a bad taste in my mouth about it that I don’t want to go back to the company. It was a company which sold design work to other companies and the client I am talking about was another company which bought design work from us. It was the client that caused most of the problems in the project and not my employer. So I was actually employed by a good company but a bad experience with a client project made me walk out of that job. It was mostly about bad project management and that people didn’t believe me when I told them the schedule can’t work as it is and they refused to give me other engineers to help me with the work so I was working alone. I think they realised their mistake eventually but then it was too late for me to work in that project any more.

    The amount of meetings which were totally useless to me was amazing. I actually thought the project manager was being a bit dumb with that. He had everyone come who was part of the project even when the agenda contained nothing to some people. I told him about this but he insisted that I need to be there to know what is going on. FFS, if I design steel structures, the main structures of the big machine (I mean 30 metre tall machines, gives you an idea) I don’t need to know anything about where some tiny electrical control boards are installed or which small wire goes where. Oh well. But this is reality in development projects. I know better next time that I tell the project manager more rudely that I don’t need to know all that crap.

  19. enginarc Says:
    September 29th, 2010 at 7:54 am

    I encountered this blog through a coincidence (well I actual searched for Steve Streeting while reading the OGRE manual for the RenderTarget class :) ) and I enjoyed it so far. I agree with you on facebook… very much.

    I find it quite useful to grab a notepad and a pen and continue the old fashioned way in case of distractions and deplation of brain power. It worked for me for the last 12 years. (31)

  20. Kevin Bjorke Says:
    October 6th, 2010 at 7:16 pm

    There’s a good amount of research done on how long hours are LESS PRODUCTIVE. Tired coders (and lawyers, etc) make mistakes, and those mistakes have costs. PeopleSoft (iirc) found that every hour spent after about 9 hours resulted in about two extra hours layer on by someone who had to go back and fix the mistakes created by the tired person (even if the fixer and tired person were the same person). This *can* be measured.

    People keep doing it though, because it makes them feel good. The late worker feels like a hero, even as he makes mistakes, and the fixer feels like a hero as he fixes those mistakes, and the supervisor thinks he’s getting a lot out of these guys without having to pay them overtime.

  21. kinjalkishor Says:
    October 8th, 2010 at 5:48 am

    @Kevin, “how long hours are LESS PRODUCTIVE” has been researched and proved many times in past, but somehow companies think long hours better due to established psychological mindset and late hour hero syndrome.

    @Steve, No blog post for ore than a month. Are you only going to tweet now. Tweet, Tweet. Anyway I made a twitter account, and I am amazed at the amount of latest information I can get from the exact person I want. This is very good, finally I see the reason of twitter’s success in 5 seconds. All the useful info delivered right to home page, just as people think and tweet. Totally useful and awesome.

  22. Steve Says:
    October 8th, 2010 at 9:09 am

    @Kevin: I agree that overtime is rarely as productive as it seems. However, what you’re doing with it does seem to matter – when switching projects it seems this is less of a problem quality-wise; Ogre was developed almost exclusively in ‘overtime’ for many years for example, and that was definitely a considerable net positive. I think if you’re switching gears fairly considerably, mental tiredness is less of a problem, provided you are passionate about the projects you engage in outside of normal hours. It’s not limitless, but there’s definitely a little mental boost available there. Maybe in some ways a change is as good as a rest, as is claimed.

    Physically however, at least by my experience, too many hours is bad regardless of what project you’re spending them on. That’s what wrecked me in the end – the mind was willing, feeding off the variety and enthusiasm I had to counter the tiredness pretty effectively, but the body was being worn down at a universal rate.

    Having said that, since pulling back from doing so much out of hours work, I’m feeling more creative and generally more positive, so the mental side obviously wasn’t optimal either – it was just good enough to get things done.

    @kinjalkishor: I’m still blogging, just a lot less often because it takes much more time!

  23. kinjalkishor Says:
    October 9th, 2010 at 12:30 pm

    @steve, You were really doing your hobby not overtime, actually(may be in over time/Extra time). “Some ways a change is as good as a rest.” is really true from my experience too, but one does get tired, even from enjoying :) . Your points about body tiredness and more free hours more creativity is also very true and has been already shown true by many psychologists.
    you are blogging very less :)

  24. Greg Says:
    October 13th, 2010 at 7:31 pm

    I’ve been trying to find a way to be ‘optimal’ with my time lately and this hit home with me. I’ve recently been sucked back into the ‘emacs world’ with something called ‘org-mode’: http://orgmode.org/

    It’s a great tool for task-lists/time management, etc… Takes a bit of learning/getting used to though.

    Anyway, I liked your post!

  25. Paolo Granada Lim Says:
    October 14th, 2010 at 10:32 am

    wow, i cannot believe how much i can relate to all the stuff you’re talking about. And I’ve only been a professional programmer for 1 year. I am very thankful for stumbling on your post. Hopefully I won’t go down the same path you took for 15+ years. :D

  26. Fredrik Says:
    October 14th, 2010 at 12:22 pm

    Excellent blog article. Have you read about and/or tried Pomodoro (http://www.pomodorotechnique.com/)? It seems to click in very well with what you describe…

  27. Sebastian Says:
    October 14th, 2010 at 12:26 pm

    hi, after reading the first section, i thought you must at least be awfully rich after 15 years of slavery like this, no? if a work style like this is expected, you really should change the employer and/or the county you’re living in… because: contrary to popular belief you only live once.

  28. Steve Says:
    October 14th, 2010 at 1:51 pm

    @Greg: I’m not really an Emacs fan, but thanks for the info!

    @Fredrik: I haven’t come across Pomodoro before, but it does seem to have a lot in common with what I talked about. Interesting, thanks.

    @Sebastian: hehe, I’d like to say it made me rich, but it didn’t – I spent a lot of that time working on unpaid open source code (ogre3d.org mainly), or on hobby projects, or unpaid overtime. Guess I’m not that smart ;) But, I learned a lot and had fun, which is as good as being rich. Or so I tell myself. :)

  29. Abhijit Says:
    October 14th, 2010 at 3:52 pm

    Very nice post. My back has started to get pretty bad now — and so has the productivity. You made me think. Thanks.

  30. Sebastien Says:
    October 14th, 2010 at 3:53 pm

    I use Pomodoro technique and it really works great and help me get rid of my shoulder pain… whenever I stop using it the pain is back! This technique revealed to be very good for focus and productivity with appreciation of the breaks and of the work achieved.

  31. David Says:
    October 14th, 2010 at 6:37 pm

    Steve: Vitamin D. Research the effects of low vitamin D carefully; make sure its lack isn’t a big factor. The brain needs energy, and the energy supply system it utilizes (the rest or your body) is extremely complex to say the least.

    If you ensure the body gets noon-day sunlight, high quality nutrients, and avoid anti-nutrients, I would be very surprised if the need to stretch frequently didn’t go away and concentration abilities improve. (anti-nutrients == soda and deep fried foods)

    Besides D3 through sunlight or a supplement, adding iodine, magnesium, zinc, calcium, C, in the form of high quality supplements would be wise, covering some of the more commonly deficient substances the body needs. The product Emergen-C plus iodine and sunlight would be an easy way to trial this approach.

  32. links for 2010-10-14 « that dismal science Says:
    October 14th, 2010 at 7:30 pm

    [...] Work 2.0 – the interruptible programmer (tags: productivity programming) [...]

  33. Steve Says:
    October 14th, 2010 at 8:37 pm

    @David: funny you should mention vitamin D – my own research indicated this can be a factor and this summer I’ve made a conscious effort to get out in the sun whenever the weather is good, for at least 20 minutes a day. I can’t tell how much it’s helped because I’ve done a lot of other things too, but I’m sure it all contributes.

    Diet isn’t a problem luckily – I eat no deep-fried food and rarely any soda, and get plenty of fresh fruit & veg since we cook from fresh most of the time. I also take vitamin supplements now, and extra glucosamine to help with ligaments.

  34. Jonathan Says:
    October 14th, 2010 at 9:11 pm

    As a young man who’s been a passionate coder for 15+ years and just started a family, I have been agonizing about who I was going to be. I did not know if I be the husband and father I wanted to be and still be the coder I wanted to be. This advice has given me hope. Thank you!

  35. Forouzani Says:
    October 14th, 2010 at 9:37 pm

    I wish I could tame my daily interrruptions that easily. Although your suggestions are good, they still dont beat coding at 3am in the morning when everything is asleep :)

  36. Stephan Wehner Says:
    October 15th, 2010 at 12:48 am

    What do you use for maintaining “a running commentary on your current task”?

    I’ve been working on http://loggingit.com
    I think it might do the trick. You want to give it a try?

    Stephan

  37. Noah Gibbs Says:
    October 15th, 2010 at 2:58 am

    I am learning to do this as well. But it’s because I now have a second small daughter :-)

  38. Xcode scripts and general time saving tips and tools | Karnak Games Says:
    October 15th, 2010 at 3:44 am

    [...] I am an adept of he Pomodoro Technique and I used to sleep only two hours per day. I plan to write about the Pomodoro Technique and Polyphasic Sleep on the future, but if you already want to know about it in a programmer’s view, read the nice article by Steve Streeting: The Interruptible Programmer. [...]

  39. AlexP Says:
    October 15th, 2010 at 4:53 am

    Nice post!

  40. Gregory Nicholas Says:
    October 15th, 2010 at 5:18 am

    this is why man-kind, or maybe even a higher force, created adderrall

  41. Justin Halls Says:
    October 15th, 2010 at 7:49 am

    I have generally gone along with the getting up regularly – mainly to go and get another cup of coffee – and to let the current batch of development thoughts coalesce in my brain.
    I think that the main thing is that if you hold the structure and concept of your program in your head it isnt well documented and when you get hit by that bus the new chap will have to start again from scratch. You document for yourself and others so that you dont have to do it in your head – if you cant pick it up again quickly and easily from your notes what chance would some other poor sucker have.
    My only problem is consistency in where to keep notes and tracking data – when I need to check back I have to work out where to look for the info I need.

  42. Gary Wheeler Says:
    October 15th, 2010 at 10:31 am

    Like you I have back problems, but I’ve always had to get up often enough that sitting at the desk for long terms has never become an issue. Managing interruptions has always been the concern.

    I manage context through two things: index cards and a Word document. The index cards are for ‘immediate’, short-term items. The Word document (which I have a single-click shortcut for) is for long-term items.

  43. Mr Man Says:
    October 15th, 2010 at 10:31 am

    Exercise is often overlooked by programmers. Good for your body, good for your mind, good for making you tired so you go to bed early and sleep properly and wake thinking clearly. A strong core is the best way to avoid back pain.

  44. ???????? ??????, 15 ??????? « ?????????? ????????????? Says:
    October 15th, 2010 at 11:35 am

    [...] ????????? ??????????? ? ???, ??? ???????????? ???????? ????????????? ?????? ????; [...]

  45. Paul Says:
    October 15th, 2010 at 1:48 pm

    On many occasions have I been driving home and realised the solution to a problem I spent hours trying to fix at work. Stepping away from the problem for a while is always a good idea.

  46. N8 Says:
    October 15th, 2010 at 2:24 pm

    Mr. Man hit it right on the head.

    I used to have horrible back/wrist/neck issues. We exercise our brains plenty but don’t give any priority to actually keeping our bodies in shape.

    I took up running a few years ago. At first it was very rough but now I’m able to work pain free (sometimes a little sore…). Concentration and energy is so much better than it was.

    It is also fun to blow up the programmer body type stereotype. Plus your significant other won’t mind either. (but that could be a distraction…)

  47. nickels Says:
    October 15th, 2010 at 2:25 pm

    Nice post. Good ideas, I will definitely use them. Your thoughts apply to my home project as well. I find that just doing one thing a day leads to more results over time than struggling to decide what major groundbreaking task to take on next. The part about figuring out what to do next was very helpful for me.

  48. Steve Says:
    October 15th, 2010 at 2:45 pm

    @Stephan Wehner: If it’s a project ticket I’m working on (which most of the time it is), I post an update on the ticket. I use Redmine right now, but most systems are the same in that it’s quite easy to post a date-stamped update of any arbitrary length. Because I work alone most of the time, I don’t have to try to keep the ‘traffic’ down for other people who might be on email notifications on these tickets – if they were I might do it elsewhere.

    Other than that, I use good old pencil & paper. I always have scraps of paper next to me with a pencil so scribbling what’s in my head when I get up is easy.

  49. Tommy Tucker Says:
    October 15th, 2010 at 3:01 pm

    Have back surgery it worked for me. But first get an MRI. Your tips are still useful to prevent future back problems after surgery.

  50. Brian S Boyd Says:
    October 15th, 2010 at 3:50 pm

    This is why I started yoga, I had backed myself into a similar corner. Most people think that yoga is simply about stretching, but it is really about mental discipline. By recognizing that the body and mind are connected, you stop treating your body like a slave to do your bidding (like working 16+ hours for two weeks straight).

    Great article, it sums this up well, and I plan to refer people to this article to understand better what I’ve gone through.

  51. terry Says:
    October 15th, 2010 at 8:29 pm

    I ABSOLUTELY LOVE this line:
    “There is no such thing as having more than one ?current task? ? there is only the one task you?re actually working on, and distractions.”
    I’m just wondering when the truth is finally gonna get out that multitasking is ONE BIG STEAMING pile of BS created by business types who are trying to “maximize efficiency” or whatever new buzzword they came up with this week. Good post. Everybody who reads this spread the word about the fallacy of multitasking. The truth shall set you free.

  52. san_kan1gb Says:
    October 16th, 2010 at 9:31 am

    Thanx, it was very beneficial.

  53. links for 2010-10-16 « pabloidz Says:
    October 16th, 2010 at 12:02 pm

    [...] Work 2.0 – the interruptible programmer SteveStreeting.com (tags: productivity programming) EtiquetasCategoriasmiudezas Uncategorized   [...]

  54. mr b Says:
    October 16th, 2010 at 2:36 pm

    You can tell how immature our industry is by the glamorisation of working long, unsociable hours. We are the fools for doing it because you only get one shot at life and a successful person is a one that protects there health and finds balance in there live. What other occupation ask you to sacrifice your health and happiness? There also needs to be a recognition, mainly by management types, that ours is a job whereby we need to minimise noise and disruptions. Having said that being successful isn’t just about coding lines of code. Interruptions are an important part of the day to build up relationships with fellow colleagues, customers etc.

  55. Anand Says:
    October 16th, 2010 at 4:03 pm

    Thank you for the great post! I use text files to keep track of the ‘running commentaries’. :)

  56. Cameron Young Says:
    October 16th, 2010 at 5:40 pm

    I was talking with a friend who is a civil engineer for major dams and flood control systems. We were comparing work hours. His routine was a consistent 40 hours/week maximum, with the 40 hours spent productively. He spends another 8 hours per week of his own time reading technical papers to maintain his skills.

    When he heard how many hours I worked (60 sometimes up to 80) his comment was “Well then you musn’t do anything very important.”

    His comment nagged at me because I realized he was right. His work must be free of any significant mistakes over his entire career. I live with many small mistakes due to the continuous pressure to meet deadlines.

  57. nikos lianeris Says:
    October 16th, 2010 at 7:33 pm

    very nice article.And really useful and inspiring for a noobe developer-like me- :)

  58. Guy Says:
    October 16th, 2010 at 8:14 pm

    Your experience resonates with me too. I agree with each of your points, but find embracing interruptions from people too lazy to think for themselves, infuriating. I recently converted to the Pomodoro technique. It has noticeably improved my productivity as well as reducing neck and shoulder strain. As other comments allude, regular exercise had a profound effect on my life. Yes it’s hard to start with, but achievable goals and making it fun were the keys for me. I find good habits easier if incorporated into my routine. I’m just a creature of habit.

  59. ts Says:
    October 16th, 2010 at 9:33 pm

    Hi,

    thanx, nice other ageing :-) programmers have similar problems. I can subscribe to most of that, except that i
    `m to chaotic to keep nice records. but
    1: take some exercise. Gym sounds boring, but 4h a week are well spent, considering the pain and costs of all those back issues you mention. And think: All of us need to keep on hacking until 6x (67 in GE, actually)

    2: (contradictionary..) Good ideas come the next day, or under the shower, agreed. But not without banging your brain before for a while. (Edison: Genious is 95% sweat or so…) But age enable you to figure out when it was enought, not like all the youngsters. Thats our advantage, and we must take it :-)

  60. ar Says:
    October 17th, 2010 at 7:12 am

    excellent article :)

  61. Michiel . van Vlaardingen » Blog Archive » Getting Things Done: The Pomodoro Way Says:
    October 17th, 2010 at 1:06 pm

    [...] procrastination and by coincidence I came across an article about changing your working method to embrace the interruptions, instead of trying to find long stretches of concentration (‘the zone’). It is a nice [...]

  62. alien3d Says:
    October 17th, 2010 at 4:16 pm

    I’m jogging on each weakend if free. sometimes the body need time to break.

  63. M Towler Says:
    October 18th, 2010 at 11:03 am

    Excellent article, the approaches mentioned have many similarities with David Allen’s excellent book “Getting things done”. I cannot recommend it highly enough.

    http://www.amazon.com/Getting-Things-Done-Stress-Free-Productivity/dp/0142000280/ref=sr_1_1?ie=UTF8&qid=1287399734&sr=8-1

  64. Steve Says:
    October 18th, 2010 at 11:24 am

    @M Towler: Thanks, and the similarities are no co-incidence, GTD was one of the books I read in the last couple of years while searching for solutions. :)

  65. Joe Klemmer Says:
    October 18th, 2010 at 12:29 pm

    Stumbling across this post was quite fortuitous for me. I, too, suffer from physical issues that cause pain. What I have been doing is just pushing through it. But, when I look at my productivity objectively, I know I’m not getting done anything near what I could be doing.

    This work pattern doesn’t completely fit my overall situation (my biggest interruptions come from all the pain meds and anti-depressants I’m on) but it does give a great framework to build from. And having that foundation is really the most important part.

    Thank you for this.

  66. Vitor Castelo Says:
    October 18th, 2010 at 5:29 pm

    Hi all! Excelent article Steve.

  67. szeryf Says:
    October 20th, 2010 at 1:09 pm

    Reducing the cost of interruptions is also what Test Driven Development is about on a deeper level. When you only write test or production code in minimal increases, you don’t leave too many open loops when interrupted.

  68. Erika Says:
    October 20th, 2010 at 5:06 pm

    Great comments! We’ve done a ton of R & D on TDD, here is a whitepaper if you’re interested: http://www.parasoft.com/testdrivendevelopment

  69. syd Says:
    October 21st, 2010 at 8:53 pm

    Very interesting!
    and glad to read an optimistic post from you steve.

    I’ve always needed a 10 minutes break every 1.5 hours, to breath fresh air, walk around…
    Coders are single threaded, and need a good cooling system :)

  70. Weekend miscellany — The Endeavour Says:
    October 23rd, 2010 at 3:56 pm

    [...] In-browser compiler for 40 languages The interruptible programmer [...]

  71. kornerr Says:
    October 25th, 2010 at 5:45 pm

    Thanks for the great article. In USSR there was Lubishev A. A. who took a bit deeper approach to himself – he has been logging where he spends his life time into for 56 years until his death. I’ve decided to take similar approach to find out what time I can use to progress in Open source. His method has one single big connection with your article – usage of many small chunks of time. For example, he learned English while taking bus rides.
    I’ve also translated your article into Russian: http://kornerr.blogspot.com/2010/10/20.html
    using this technique of small chunks of time. I’ve been spending 10 to 15 minute chunks for 18 days. And in the end I’ve spent 9h 35m to translate and revise it. The system really works and feels lightweight.
    Thank you.

  72. kinjalkishor Says:
    October 26th, 2010 at 5:44 am

    @ steve, polyphasic sleep patterns while may sound good and may feel cool for career growth, the fact is tampering with normal sleep is a killer as body recovers from injuries while sleep and repeat small injuries if not cured will grow exponentially and will break the person soon enough.

    I am myself sleeping at 1-2 pm regularly and waking at 7:30 am, thus getting less sleep(I normally sleep at 10:30-11:00 pm) for past 3 months. And the result is, while previously my regular exercise schedule was easy and strengthened my body, Now It seems difficult everyday and my main concern these days is to avoid injuries(like stretches and cramps) and to lower the intensity of exercise to cure the injuries I get. I have stretched my left shoulder twice, left upper arm once(long pain) and my left elbow once in past 2 months, on the exercise which was easy previously and not demanding. I feel a rise of acidity and general weakness and tiredness whole day. I am going back to normal sleep time as soon as possible once I finish some very important work.

    @ kornerr, usage of many small chunks of time, is nothing new, good students practice it all the time, (there was one student who studied even in the market and he managed to get in topmost technical institute of India also).
    Usage of many small chunks of time, requires great dedication and good mental discipline which many people seem to not able to do. For ex., Steve neglected his back for long and could not quite pull himself up to cut his work hours as he enjoyed them so much. I myself never did regular study in school.
    On the other hand I have learnt and thought so much in these “small chunks of time” and so much work is done in that, it is almost staggering. My FPS game is being written by me all in extra small chunk times and learning asociated with it(open source helps so much, or I would have not been able to figure out so many things).

  73. kinjalkishor Says:
    October 26th, 2010 at 6:00 am

    @ Joe Klemmer, at your age and condition you might want to put a little less effort and give more time to health as maintaining health is alpha prime and as you surely have noticed helth disbalance is affecting far more on your productivity.

  74. kinjalkishor Says:
    October 26th, 2010 at 6:22 am

    @ David, Thanks for pointing out Vitamin D info, very very helpful.

  75. Steve Says:
    October 26th, 2010 at 9:12 am

    @kornerr: excellent – I don’t think I’ve had one of my blog posts translated before (to my knowledge), and very interesting to hear the way you did it.

  76. Ivan Says:
    October 26th, 2010 at 3:26 pm

    Many thanks for this post and especially for the idea of externalized context. That was the last peace I was in need to build my own system of interruption-friendly work. In fact it is quite similar to yours :)

  77. Jonas Says:
    November 3rd, 2010 at 9:20 am

    Thank you for a great and inspiring post!
    This is something I really need to improve on, so far I’m down with the first point and last point, but when it comes to the second, “Maintain context outside of your head at all times” I’m finding some trouble.
    I’m struggling to maintain a running commentary on my current task, but I find too often that I don’t know what to write, or in what level of detail. Would it be possible for you to provide some sort of example, or sample out of your commentary?
    Any tips for tools that would help is also welcome, I’m currently using vim and creating files with the current date as name.

  78. The Distracted Programmer « Streaming Colour Studios Says:
    November 21st, 2010 at 5:03 pm

    [...] you haven’t read this excellent article called “The Interruptable Programmer“, do so now. All of his tips apply to working at home with a baby in the house. I’ll [...]

  79. Steve Says:
    November 21st, 2010 at 5:30 pm

    @Jonas: sorry for missing your comment. I use 2 main things to capture my running commentary: Redmine tickets and pencil & paper. Whenever I have a thought on a project while working on something, I’ll push it into Redmine as a new ticket most of the time, even if that’s only one line. I’ll also write progress notes on things I’ve discovered and thoughts that I have on the current task.

    In contrast, if I’m just getting up to stretch and make a coffee, and it’s not a large amount of detail I need to capture, I’ll write down on a piece of scrap paper what the next thing I intended to do was (if I wasn’t taking a break), usually as a rudimentary mind-map (read: a couple of circles linked with lines mapping out what I was thinking about). When I come back, those scribbled few words / thought bubbles kick-start my thoughts back to where they were when I left, and Redmine will fill me in on the more extensive details if there are any significant ones.

  80. Sunetos, Inc. :: Think, Think, Think… Says:
    December 12th, 2010 at 8:03 am

    [...] When you finish a session, or are interrupted, record what you are thinking or doing so that you don’t lose all your context. (See the excellent advice in the post “the interruptible programmer“.) [...]

  81. Phil Says:
    January 25th, 2011 at 6:08 am

    I love the concept of externalizing the context. I have been moving in that direction to try to improve my productivity. I have to switch between projects and it takes me time to mentally switch. This in addition to interruptions. I will apply your recommendation.

    I used to work many hours, but I found that my judgement was suffering. Also I found that sleeping on the problem was more productive than hours of night work.

    Long hours are OK for short time, but not as a way of life.

  82. The Interruptible Programmer | Content Here Says:
    March 8th, 2011 at 2:24 am

    [...] just read Steve Streeting’s excellent post Work 2.0 – the interruptible programmer where he counters the conventionally assumed benefit of long hours of uninterrupted programming. It [...]

  83. thesecretdogproject » Running to keep up Says:
    May 6th, 2011 at 6:04 pm

    [...] another example of this kind of idea migration in a blog post by Steve Streeting on what he calls Work 2.0, or being an interruptible programmer. Steve’s basic observation is that the [...]

  84. Orphée Lafond-Lummis Says:
    May 8th, 2011 at 6:13 pm

    Its great to see a respectable programmer like yourself doing such a feedback on the profession. As a young programmer, I find your ideas greatly inspiring and useful. Thank you!

  85. Nate Reed Says:
    May 9th, 2011 at 3:50 pm

    I agree with your view on breaks. The human mind is capable of multidimensional thinking, but when we are caught up in trying to solve a problem we tend to be linear thinkers. When we stop working on a frustrating problem, it gives our minds the opportunity to process the data in new ways even while we are not consciously or deliberately trying.

    I have been thinking about this model of how our minds work and how we can be more effective and more productive programmers by tapping into this subconscious processing of information that is always going on in the background. We have massively parallel processors in our heads but how much of that potential is untapped?

  86. Indie and day job, making it work | David Amador Says:
    May 13th, 2011 at 1:07 pm

    [...] can happen after half an hour or 2hours, but it’s usually very difficult to start right away. Steve Streeting has some interesting thoughts and tips on [...]

  87. Running to keep up | thesecretdogproject Says:
    May 14th, 2011 at 8:22 am

    [...] another example of this kind of idea migration in a blog post by Steve Streeting on what he calls Work 2.0, or being an interruptible programmer. Steve’s basic observation is that the [...]

Leave a Reply