As a developer, you might have one of those days when you arrive to your desk fully rested, replenished, and clear minded, so you prepare a cup of tea or coffee, take your headset, play your favorite playlist, pick a task (or set a goal) and start developing. While developing, everything goes nice and smoothly, but just like every day, you face challenges. Maybe you need to design algorithms, do research on language specifications, libraries, or frameworks, test your code or fix other issues, but all of this motivates you to keep developing the task because you know what to do and you have the required resources and skills to face the challenges. You know the structure and order of the code, there are no distractions, and as you develop, you start building diagrams in your mind as well as code flows, networks, abstractions, normalizations, patterns, and you become fully immersed in your code. Your whole attention is focused on the task at hand and your work seems to be in constant progress. You are using your skills in an optimal way as you feel energized and the notion of time vanishes, and this feels quite good indeed.
This is a state of mind that the Hungarian psychologist: Mihaly Csikszentmihalyi (/ˈmiːhaɪ ˈtʃiːksɛntˈmiːhaɪ) (in case you were wondering how to pronounce it) recognized and named: “Flow”. It is also referred to as “The Zone” or when it’s applied to software development “Software Time”. There are people that experience it spontaneously, without looking for it, and there are others that seek it on purpose. It’s not something you turn on by saying: “I’m getting into the zone.” It’s not something you can acquire simply by wishing to have it. Certain actions need to be taken and Flow will come as an effect of said actions.
There is no written guide to achieve this Flow state as it will vary from person to person, but there are three key conditions of vital importance.
The first one is to have a well-defined set of tasks or goals to achieve as it will focus or channel your attention and energy. The doubt of what is needed first or what the client would prefer may have a similar effect to a distraction, but if you are in the zone, you are more likely to step out of it.
The second one is also related to tasks or goals. These tasks or goals always have a challenge, and what is challenging for you, may not be challenging for others. The condition is based on the perception of the challenge and it should be balanced with the perception of your own skills. If your perceived skills are much higher than the perceived challenge, you are likely to get bored. If your perceived challenge is much higher than your perceived skills you might get anxious. These perceptions can change as you get involved in the task, but it is easier to produce flow if there is a balance between these two perceptions.
And finally, there should be an immediate feedback because it informs you on how well you are making progress in the task or goal, and dictates whether to maintain or adjust your present course of action, leaving few or no room for doubt on what to do next.
References
Csikszentmihalyi, M. (2008). Flow: the psychology of optimal experience. New York: HarperCollins Publishers.
Elliot, A. J., & Dweck, C. S. (2007). Handbook of competence and motivation. New York: Guilford Press.
Lopp, M. (2007). Managing humans: biting and humorous tales of a software engineering manager. Berkeley, CA: Apress.
Rosenberg, S. (2007). Dreaming in Code: Two Dozen Programmers, Three Years, 4,732 Bugs, and One Quest for Transcendent Software. Queens, NY: Crown.