Most programmers know what is “The Zone”. It is a very focused state of mind where you feel that there are no problems that you cannot solve. You know, the state where your surroundings disappear and you feel almost omnipotent. You are very productive, take great leaps and progress fast.
I posit that this is a dangerous for a couple of reasons.
Too tight focus
In my experience it is very hard to make corrective actions while in the zone. The Zone has the same effect as speeding, your sight narrows and with high enough speed you can see only forward. How do you verify that you are solving the correct problem? Are you really going to the right direction? Are you sure? When in “The Zone” do you ever stop and wonder “Is this the right thing to do?”. Do you ever question the task at hand? Is this really the most valuable feature? Could there be something that would provide even more value?
The Zone is a state of extreme focus and motivation. The problem is that your focus is very likely too sharp. This leads to blindness to your own errors and makes it really hard to change direction. This leads to false productivity as the risk of rework grows very fast. With great speeds even the slightest mistake become huge almost intantly. Think about a steering error while driving over 200km/h.
Susceptible for interruptions
“The Zone” is fragile. Even the slightest disruption, an email, innocent short question from a colleague, can drop you out of it. Getting back is difficult so your productivity is going up and down very frequently. This can be really frustrating and a real motivation killer in the long run, especially when you consider the nature of software development which emphasizes team work and continuous communication.
You may have your own private room you can hide in but is it smart to shut out others? If everyone is locked up in their rooms what does it do to your team spirit? Privacy is ok and should be respected but isolation is not. With people spread out in their rooms how can you ensure that you are all pulling the same rope and in the same direction? Which leads us to the next pitfall.
Everything that is done alone encourages silos. It is always harder to spread knowledge afterwards. Spend too long on one task and you become the sole source of information. In other words a single point of failure.
Isolating yourself to ensure uninterrupted “zone” prevents you from learning from others, gaining information from others and spreading your knowledge to others. Silos prevent sharing the code and the code wants to be shared. In other words you have too long feedback loops.
Too long feedback loops
While in “The Zone” you are alone. Very alone. How can you be sure that you are doing the smartest possible thing? Is it the right thing to do? You practice TDD so technically you are on the right path but logically? Have you been derailed from your original goal? When is your next code review? Can you afford to wait that long? Are you sure that your domain knowledge is deep enough? While you worked in the zone and progressed did it actually move you forward in the right direction?
What if you had understood something incorrectly? Depending on the size of your task this can mean all you have delivered was waste (excluding your own learning). Did you write too much code? Did you try to anticipate the future?
You can overcome some of the issues of the zone by ensuring frequent communication with the business and making sure that all tasks are small enough in order to shorten the feedback loop. This still leaves you in a more fragile state than we would want.
But there exists a very effective practice that renders the negative aspects of the zone very close to non-existent.
In psychology terms “The Zone” sounds like flow. Flow is described as a state of focus, motivation and productivity. I want to make a semantic difference between these two states and add negative connotation to “The Zone” and positive connotation to “The Flow”.
Pairing gets you into a flow fast and it is easy to stay in the flow!
Pairing gives you enough focus but it isn’t too tight. It’s like having someone to read the map to you while driving to an unknown location for the first time. And it beats the GPS and other map utilities hands down. You always have someone there to question your train of thoughts, helping you to take the right exit or turn and to stop when it is time to stop.
While pairing interruptions don’t cost even nearly as much as they while in the zone. The pair can very quickly regroup and maintain their momentum. You can momentarily split up and continue after the interruption has been dealt with.
You can’t hide information while pairing and you can’t become a silo. You will learn, teach and gain information while pairing.
Pairing while programming gives you a feedback loop of seconds. Your thoughts are evaluated as soon as you articulate them. And articulating your problems is the best way to solve them.
Don’t keep zoning, start pairing