‘Flow’ in software development

‘Flow’ in software development

As a recreational runner, snowboarder and wannabe surfer, I’ve become interested in the concept of ‘flow’ or the ‘flow state’.  It’s becoming an increasingly well-known and popular concept in sports, particularly action sports such as snowboarding, skiing, climbing and surfing.  It also comes up a lot with runners and is often referred to as ‘being in the zone’.  I’ve had occasional glimpses of it in my sporting activities, but not very often!

I’d heard it described by musicians, artists and sports people, and I thought this was possibly because these people are already intrinsically motivated by their task, and not just by an end goal.  However, as I’ve investigated the concept further, I’ve discovered that the experience can extend to many other activities in life, and I started to think further about how ‘flow’ applied to the process of software development, and how I experienced it in my work.


What is ‘flow’?

Flow’ or the ‘flow state’ was a term coined and initially studied by psychologist Mihály Csíkszentmihályi in the 1970s.  He described and explored the concept further in his 1990 book:  Flow: The Psychology of Optimal Experience.

Csikszentmihalyi described flow as being when:

  • You have higher than average skills and the challenge/task is hard enough to push the upper limits of those skills.
  • You have complete concentration on the task you are performing.
  • You have clarity of your goals and purpose and immediate feedback on your progress.
  • You lose track of time - it speeds up/slows down.
  • The experience itself is intrinsically rewarding.
  • It appears to come to you with effortlessness and ease.
  • Actions and awareness merge and you lose awareness of your surroundings and what you are doing.
  • You have a feeling of control over the task.


The balance between challenge and skill level


Benefits of the flow state

So, flow is essentially a state of peak performance, therefore something of interest in the company environment for both personal and team performance.  Once you achieve ‘flow’, the process itself becomes rewarding and an optimal experience.  And it’s also a state of optimal achievement, so in terms of personal productivity it would be beneficial to be able to achieve this state when possible.

For anyone who manages a software development team (or any team), helping them achieve flow could improve both the quality of their work and enhance their wellbeing.


How to achieve the flow state during software development

Flow can be quite a rare experience, and it appears that it is not a state that is easy to achieve and very hard (if not impossible) to achieve on demand. 

Also, it appears that it’s not something everyone can achieve because it takes significant work to get to a position to be able to achieve it, in terms of achieving the skill set and focus required.  Csikszentmihalyi talks of the ‘autotelic personality’.  A person who ‘generally does things for their own sake rather than in order to achieve some later external goal’.  These people develop skills that help them get into the flow state frequently.  For example, skills like curiosity, interest in life, persistence and low self-centredness.

But as a team manager, it’s possible you could maximise the chances of your team achieving flow. It requires certain conditions, so how might you create an environment where it’s easier for yourself or your team to achieve flow?

Here are a few ideas based on Csikszentmihalyi’s work:

  • Create the right environment. Keep it quiet or perhaps play non-intrusive background music, and minimise the number of unrelated conversations or telephone calls being made. Perhaps allowing working from home where appropriate.
  • Give teams time without interruptions.
  • Provide training. Flow often requires a high skill level, so ensure skills are up to scratch and well-practised.
  • Where possible, choose challenges and task that are matched to each team member’s skill level. Perhaps pushing the limits, but where there is a ‘balance between opportunity and capacity’.
  • Set clear goals, but ultimately your team enjoying the process will be what gives them the pleasure and satisfaction. Not them meeting their goals.
  • Immediate feedback on progress and success at the task. This is usually fairly straightforward in software development, especially when using techniques such as test-driven-development where you’re constantly building, running and testing your work as you go.


Is there a downside?

Addiction to the experience. Assuming it is a state that you can easily achieve, losing yourself in flow could be detrimental to your ‘outside’ life: your family life or other aspects of your working life, such as communicating with colleagues. But as I mentioned, flow is not usually an easy state to achieve so this may not be a problem anyway.


If you want to find out more about flow and how to achieve it, start by watching Mihaly Csikszentmihalyi’s TED talk: Flow, the secret to happiness and read Living in Flow on Positive Psychology.