Flow: my addiction behind programming!

Mihaly CsikszentmihalyiThe psychologist Mihaly Csikszentmihalyi (pronounced six-cent-mihaly) has studied the state of effortless attending, or  flow, as he called it.

Flow is characterized by complete absorption in what one does. People who experience flow describe it as the “ultimate state” of effortless concentration and “joyful immersion”. So deep that they lose sense of time, of themselves and their problems. Hence Csikszentmihalyi calls it the “optimal” or “ultimate” experience and the secret to happiness.

Many activities can induce a sense of flow, such as painting, writing, software programming or sports. However reaching a state of flow requires a certain challenge and learning-curve to be present. If the task is too boring we need to up the ante to get into flow. On the other hand, if our skills are inadequate for a given activity, our stress-level would prevent us from reaching flow until we have learned enough. So flow means you are enough out of your comfort zone to be excited but not over-stimulated or stressed.

Challenge vs. Skill

Before talking further about flow, let’s look at the two forms of efforts which all humans use to make decisions:

  1. System #1: the automatic, subconscious response which we are unable to control, which is incredibly fast and comes without effort.
  2. System #2: the deliberate, rational calculated response which kicks in when information requires further processing and which processes data handed over from #1 and which requires effort

System #1 is the initial stage in the decision process and very fast. If #1 requires further processing and can’t decide what to do with the given information, it hands over control to system #2. An example of #1 would be our brain telling us without effort that this woman is angry:


Another example of #1 would be our brain telling us that this is a multiplication:

12 x 63

Calculating the actual answer of the multiplication requires a deliberate conscious effort and hand-over to system #2.

Whether you are writing a book or implementing software, flow is a brilliant state to find yourself in. Even after spending all day in the office, you continue late into the night hacking away on your code, losing track of all time.  Flow is the state of mind in which the normally conscious handover between #1 and #2 becomes effortless. Hence we no longer feel like having to work very hard and our productive result and output just “flows” naturally.

Software developers (who are especially known to spend a large part of their day in flow) often half-jokingly say they love their work so much and can’t believe they’re getting paid for something so much fun. And indeed many go home to continue working on another pet-project. (important note: people who assume this is a prerequisite for a good programmer are wrong, but this is another story).

Signs people are in flow:

  • they don’t seem to notice when you walk up from behind them (and sometimes don’t even see you when you stand right beside them)
  • they might not be very communicative during lunch and seem absent-minded (probably working on an algorithm – don’t bother them with your weekend stories or family trivia :-))
  • not much interest in the physical world around them! Painters, writers & software developers aren’t exactly famous for their fantastic dress-sense or outgoing personalities and sometimes associated for being quirky. While this is a stereotype, maybe if we spend a lot of time “in flow” our passion simply shifts to other things? Flow sucks you in so deep that your brain has no further capacity to process other information than the task. See also the invisible gorilla study.
  • if you take a group of developers to lunch, it’s usually a silent meal
  • I have been accused many times by people in my surrounding that I don’t listen (yes of course I’m a guy and we are known to never listen ;-)) but in these cases people claim to have spoken to me and I have just ignored them which is not at all a thing I would do. Turns out I was “doing something on my computer” whenever they spoke to me.

Benefits of Flow in Software Development:

  1. People will feel passionate about their work and have a high job-satisfaction. They are likely to put in the extra hours required to get the project finished. They identify themselves with their output and are keen to improve it.
  2. People experiencing flow will usually increase their skill levels as they constantly balance skill/challenge while in flow (see graph). This is not equivalent to real training which is usually a pure (#2) activity.

Pitfalls and challenges with flow in Software Development:

  1. Losing sight of the bigger picture and deadlines.
  2. Flow is the joy of taking your new skills to the edge and finding out what you can do with them – a bit like a snowboarder testing his new board in perfect snow. It is not equal to training or deliberate practice, aimed at reaching a level just beyond the currently attainable level of performance, by engaging in full concentration, analysis after feedback, and repetitions with refinement.
  3. An open office space layout works if you need interaction in your teams and therefore usually OK for PM, system-integration/administration or testing. But it will usually kill Flow for people working in pure software development.
  4. Not all the output you create in a state of flow is automatically “brilliant”. Quality depends on how reliable your system #1 is. System #1 can often be wrong (or prejudiced). If #1 assumes it is right, we can jump to the wrong conclusions, instead of handing over control to system #2 for verification. Here is an example of system #1 tricking us into wrongly believing that these 2 lines are of different length:

Müller-Lyer illusion

System #1 is a notorious liar! So if you want to improve the quality of your output when in a state of flow, go slow. Regularly zoom out and reevaluate the bigger picture and check if you’re still on track with your requirements and deadline. Don’t forget to eat, sleep and (even more important than your bodily needs) comment and document your work plenty! Because chances are high you’ll appreciate a few pointers in a few week or two when trying to understand why you implemented here in this “incredibly genius” way 😉


Joachim Bauernberger
Passionate about Open Source, GNU/Linux and Security since 1996. I write about future technology and how to make R&D faster. Expatriate, Entrepreneur, Adventurer and Foodie, currently living near Nice, France.

Valbonne Consulting provides Research & Consulting for emerging technologies in Internet/Web of Things (WoT/IoT/M2M) and Emerging-Tech. We specialise in decentralisation, security and privacy. We work across a variety of traditional industry verticals (Telecommunications, Automotive, Energy, ...). We support Open Source and technologies built on open standards.

Leave a Reply

Your email address will not be published. Required fields are marked *