What are your strategies to improve the flow experience when doing work?

3 Answers 3


It's a bit like creativity. You can't force it, you can only prepare conditions favorable for it to appear. Some of the most important requirements:

  • Distraction-free environment (you'll need hours of uninterrupted concentration).
  • Clear goal.
  • Genuine, intrinsic interest in that goal.
  • Clear mind; not too much "should do this, should do that" issues nagging in the background.

So, before starting to actually work to problem, be sure to define the goal clearly, complete or at least write down other to do -items so that they don't disturb your mind, and go somewhere where you can concentrate. If you're interested in what you're doing, you now have a good chance of getting into flow.

  • thanks for your summary. just a small question. "genuine interest in the goal", do you have examples for this, that you find personally rewarding? esp for topics that might not be interesting per se, such as testing and/or debugging?
    – poseid
    Oct 7, 2010 at 10:08
  • Unfortunately I think that topics that are not "interesting per se" are, by definition, not "genuinely interesting" either. I don't know if there's some magic trick to get a flow experience on those. At least it's not easy. But luckily I find most programming-related things interesting per se. Oct 7, 2010 at 11:57
  • i see. thanks. related to this, I am just reminded on the theory that I have heard lately, that interests are related to fear and hope that certain goals can arouse. fear and hope result from "genuine / intrinsic roots". it would be something necessary in order to "flow" too, but your points on no-distraction and clear goal set are helpful for me addtionally. thanks.
    – poseid
    Oct 7, 2010 at 12:38
  • I find I need a picture of Edgar Codd and a picture of a flying sheep. Not being facetious. But that's just me.
    – orbfish
    Apr 10, 2011 at 4:43
  • 2
    +1: "Distraction-free environment (you'll need hours of uninterrupted concentration)." I think this is a very important factor. I work in a distraction-rich environment and I could only achieve flow once, when I explicitly asked my colleagues not to be distracted for a couple of weeks. Then because of a too rigid interpretation of our development methodology (develop in small increment, commit often, discuss a lot of useless details with colleagues) I was forced to interrupt my development cycle and my flow state was gone very quickly.
    – Giorgio
    Jul 26, 2012 at 6:00

I need a clear understanding of what I'm trying to accomplish. It's hard to achieve flow when I'm testing something because I'm searching around, trying to find stuff and figure out what to do next.

I need sensory isolation. By this I mean no distractions in any of my senses. If people are wandering through my field of view, or people are making noise around me, forget it (touch, taste and smell usually aren't too much of an issue in an office). A good set of noise-isolating earbuds and either some white noise (waves crashing on the beach, or a campfire burning and popping) or some music works for me. Any music needs to be devoid of lyrics; otherwise, my mind will be parsing the words, unconsciously, which will disrupt the flow. Ditto for people in my vicinity carrying on conversations; I try to "tune them out," but my mind will, unconsciously, lock on to the speakers and the conversation and distract.

Finally, I need an editor which doesn't force me to "pause." I can code for hours using vim; I use the control-n and control-p to auto-complete stuff, but that's really quick and I can usually get to where I can predict how many of those I will need to get the variable name or method name I'm seeking. Using Eclipse is largely devoid of flow because it is always pausing the input while it reformats stuff, checks to see if my syntax is valid, etc. The auto-completion for object-oriented stuff is too slow and unpredictable to achieve a state of flow.

In case you haven't guessed, flow involves a rhythm. Anything which disrupts that rhythm, disrupts the flow.

Turn off the email notifiers. Turn off the social networking notifiers. Turn off the alarms. Make sure you have a nice, long, uninterrupted block of time in which you can work.

Finally, copious amounts of caffeine seems to help.

Some of the most productive coding I've ever done involved writing HTML, CSS, Javascript and Perl, using vim, with Eric Johnson, Blues Saraceno and Joe Satriani blaring in my earbuds, amped up on Mountain Dew.

Some of my least productive time involves sitting in a cubicle farm, trying to write Java, using Eclipse, when I forgot my smartphone and earbuds at home and the guy across the cubicle wall feels the need to use his speakerphone on a conference call.

  • 1
    +1 for turning off email and social networking distractions, and starting out with clear objectives.
    – Jay Elston
    Nov 29, 2012 at 2:24

This is an interesting concept for me. One reason I got into software development a couple of years ago is that I found it could be a 'peak experience' where one pleasantly loses track of time. But I experienced less and less of this as time went on, I suppose because the amount of stuff I seemed to NEED to know looked limitless. But I want to recapture the peak experience. It's important for my quality of life.

I found a helpful chart in Czikszentmihalyi's book 'Finding Flow". I probably can't post it here (though it's easily found on Google) but the essence of it is that to increase your chance of enjoyable 'flow' experiences, your current challenge should be somewhat balanced with your current skill level. Of course you want to always be learning new things in I.T., but too high a challenge could send you into an anxious or worried mood. Too low a challenge could send you into boredom or even apathy.

I had experienced a ton of boredom and apathy in my previous I.T. career (not s/w development). It was a kind of bottoming-out experience that forced me to explore how I could make work better. Having once gotten a charge out of a big Perl project, I decided to explore Java.

Speaking of having a clear goal, I got plenty of that from the programming classes I then took at a local university. The goals were mostly set for me. Of course the external discipline helped me focus: I needed to read and understand a particular chapter in a book by a certain date and time. Or I had to produce a working s/w project by that time. Maybe something about having someone else to please was at work. It's harder to set one's own goals, so I wouldn't mind working in an office again on a development team soon, for the extra external discipline that should bring. I suppose we can't all be entirely self-directed.

Back to answering your question. In working on my own, I got best results by taking my laptop (since stolen, ugh) to a coffee shop, listening to my own carefully-selected music (this one is good, if you're interested: http://en.wikipedia.org/wiki/Soundsystem_01) on headphones while I worked. It helped drown out local conversations. Lack of unwelcome distraction was/is VERY important to me. Plus I think being in a public place was good for me as I couldn't just decide to take a nap or watch TV. Plus it helped motivate me if the problem I was trying to solve with code was in a domain that already interested me.

Also I just realized that it's cool to write mobile phone software because you can always whip out your phone and show people (or yourself) what you've been working on. I do kind of get a charge out of that, which is motivating.

Not the answer you're looking for? Browse other questions tagged or ask your own question.