Have you ever played a really compelling video game? You probably have. When you get yourself immersed in the game the time and the world around you simply cease to exist. You’re focused and ready to sacrifice a lot in order to achieve the game’s goals.
Well, playing video games might not be the most productive thing to do in your life. Unless you are a professional gamer winning international tournaments, of course… However, the mechanism you are subject to when spending countless hours in front of computer screen is seriously powerful and… useful. It can be made use of in multiple areas of life.
The mechanism at play has been defined as the Flow.
A state of being immersed in what you are doing. A state in which you lose track of time and forget about day-to-day problems. The idea derives from Flow: The Psychology of Optimal Experience, a book by Mihaly Csikszentmihalyi.
This is how the author describes the phenomenon:
People become so involved in what they are doing that the activity becomes spontaneous, almost automatic; they stop being aware of themselves as separate from the actions they are performing.
There are three key elements enabling us to achieve the Flow: a clear goal, feedback, and appropriate challenge. Why have I mentioned video games? They are great at stimulating the Flow:
- A clear goal. The gameplay imposes on you certain clearly defined tasks to execute. Kill a monster, find a Pokemon, conquer a city.
- Instant feedback. Once you accomplish the task, you get informed about it instantly, and you get rewards for your achievements – the loot left by the killed monster, XP points, money.
- A challenge adjusted to your competence level. The games adjust the difficulty level to the player, and the challenges you’re about to face get more demanding as you play.
Treat your work as a game!
The mechanisms keeping your attention in front of the screen while playing your favorite game can be put to use in your work.
In most games we deal with something of a mission system. We are supposed to carry out tasks which will slowly lead us to the achievement of the main goal: conquering the world or defeating our arch enemy. Executing smaller tasks prevents us from getting lost in the plethora of possibilities, keeps a goal in sight, and makes us enjoy successes from the very beginning of the gameplay. In case of our work, things look pretty similar – the best case scenario is to have minor tasks which can be completed within hours, rather than days. This kind of distribution lets us get hold of the entirety of what we are to do, and concentrate on the solution for a current problem, which in turn fosters entering the Flow.
The problem, though, is that more often than not such a distribution turns out to be utopian. In practice, often what we are working on is very big or not fully defined at the beginning. We can rant at the Product Owner who distributed the work among team members poorly, but we can also try to cope with it ourselves. It’s great when the user story or the task we set off to do has already been divided into smaller subtasks, but even if that’s not the case, we can split them for our own purposes ourselves. We can create our own checklist and gradually check off particular tasks.
Do you remember a time you wrote a fragment of code and, in order to check whether it works, you had to rebuild and set up from the scratch the entire testing environment? Or a time you had to wait several minutes brainlessly staring at the screen before you could actually see the results of the launch of a script?
We are impatient and if we are forced to wait more than a few seconds to get assessment of our own efforts, it kills our productivity as our attention begins to decline. Let’s think back to how the games work – there information about the outcome of our actions and a prospective reward are instantaneous.
And this is why I love TDD so much. I write a line of code, launch a previously prepared set of tests and… I get an immediate verdict: it either works or it doesn’t. I can get back to work right away and fix the code or write the next test. I even found myself treating the IntelliJ’s green icon next to the test’s name as a kind of reward. Just like XP points after killing a monster.
It happens that I write quite a large number of tests for the code to go through in advance. Then I try to meet all requirements one by one and see how test results gradually change from red to green color. This kind of approach can give you quite a lot of satisfaction.
I look into the backlog to fish out a new task. Yet another task that consists in adding a checkbox in the UI, another copy-paste… Well, such things happen and they can effectively kill your enthusiasm.
A challenge makes me want to tackle it. If I don’t see a challenge, all that’s left is mindless dull work far from being pleasant, so I push it away for as long as I possibly can.
A lot depends on our approach, though. Sometimes we can come up with a challenge ourselves. You can treat a simple task as an opportunity to perform a long needed refactoring in a class which we’re about to introduce a change to. Maybe there’s room for code’s efficiency improvement?
Programmers tend to rant about not having enough time for refactoring. Such tasks make for a perfect occasion to do it in less than no time and have some space to make a change we’ve been meaning to get down to for a long time. Not only do we become better programmers, but also create challenges where there seems to be none, making our work more immersive.
The methods I mentioned work perfectly for me. It may be that for some of you other techniques will turn out more effective. It’s worth searching for your own solutions.
The ways presented here make us more productive as employees. But I don’t think this is the key benefit we’re getting. By approaching your work as if it was a game, and by entering the state of Flow you simply enjoy your work more. It takes some sacrifices, but the effects are really satisfactory.
Let’s recap then, so that our chances of achieving Flow are bigger:
- Set yourself a clear goal and focus solely on it
- Ensure instant feedback
- Adjust the challenge to your competence
Marcin Szewczyk, Fullstack Java Developer