Time is precious. Development time doubly so.
Getting in "the zone" is a phrase used by software developers to mean the ultimate level of mental focus. The metaphor is borrowed from sports psychology and describes the most productive mindset for programming. When developers are in the zone they can perform amazing feats of mental dexterity that would be unattainable at any other time. The zone is where the most complex of problems are resolved, and in the shortest amount of time.
Much like "creativity" though, the zone or "flow" is an elusive beast. Over the years I've developed a few techniques to help me get there quicker. The trick of course is to minimise distractions...
1. Shut down all communication.
This is the obvious one but I can't not mention it. Switch off your phone. Switch off all your messaging apps. That means chat clients, Twitter, Skype, email, the lot - especially Facebook. You're going to get some work done and interruptions will kill your concentration.
If you've been sent a spec by email then copy the contents out into a text file. You don't want to have your email client running while you work.
2. Know when you work best.
You may not always be able to set your working hours but it's worth knowing when you are naturally productive. Try and tackle your complex problems then. Late nights work well for me, I can get a pile of work done after midnight. If you're a morning person go for that.
3. Wear headphones.
One of the quickest ways into the zone for me is to put some headphones on and crank out some tunes. This works especially well when working in noisy environments like trains and planes. Limiting your sensory input from the outside world should minimise distractions.
Wearing headphones can actually be useful even when you don't have outside distractions. I often wear them just to tackle a particularly tricky piece of code. That extra level of sensory insulation can often make the difference between fixing a problem and not.
4. Have an iTunes playlist for working.
You can't play just anything through your headphones. For the best 'zone time' I keep a 'coding' 'playlist. These should be four or five familiar albums as you are aiming to create a comfortable thoughtful state of mind.
- No new music. New music, and by that I mean music unfamiliar to you, requires more attention and that becomes a distraction.
- No vocals. Vocals become distracting.
- Mix your genres. I've found I can remain in the zone longer if I mix up the genres from album to album. Ambient, classical and industrial all work well.
- White noise is good. This doesn't have to be 5 hours of Atari Teenage Riot (unless that's your bag) but background noise like waves, gulls or rain can be helpful towards the end of your playlist.
As an example here's my current coding playlist:
Brian Eno: "Music for airports"
Manitoba: "Start breaking my heart"
Jan Garbarek: "Officium"
Nine Inch Nails: "Ghosts I-IV"
Miles Davis: "Kind of blue"
If you've got any recommendations for other good 'zone' albums I'd love to hear them!
5. Have a 'work' tab on your browser homepage.
A friend of mine works for a console game developer in Brighton and part of their working environment is a total ban on internet access on the dev machines. While this works for them it's really not practicable for web work - web access is essential for research and testing.
One way I've found to avoid typical web distractions is to setup a 'work' homepage. If you use a website with a customisable home page such as iGoogle or NetVibes then this should work for you. In iGoogle I have set up a dedicated 'Work tab'. This is full of helpful tools, search aids and timesavers and is themed in calm blue colours. Distractions such as RSS feeds, Twitter clients and the like are all kept on a separate 'News' tab. iGoogle remembers which tab you are on so firing up a new browser will always presents you with a work window with no distractions.
6. Take a break to think.
No really. This sounds counter intuitive but if you have had a good run of zone time then you should come up for air. You probably do this already, even if you don't realise it. If you are wrestling with the best way to tackle a problem then you're not coding, so take a break and go do something else.
Some people smoke, others play Foosball, I drink coffee. Pick a vice. It's not the activity that matters it's the change of activity. Chances are you are still mulling over the problem at hand and by the time you're back at you're desk you'll have a plan to tackle it.
7. The "F**k off" hat.
And lastly, this is one I picked up while working at Pogo. When it comes to crunch time project managers get a little jumpy. Inexperienced ones will compensate by scheduling lots of meetings, asking for updates and randomly popping in to "see how things are going". All of these things make a project take longer because they take you out of the zone.
The solution we came up with was the "F**k off" hat. The process works like this:
If I'm wearing the "F**k off hat" then don't interrupt me: I'm concentrating very hard on meeting your deadline. If I take the hat off we can talk. Project managers aren't mind readers. You have to let them know when you are being most productive. I've heard similar stories of flags or indicators in other workplaces - speak to your team and find something that works for you.
I'm sure there are plenty more great concentration tips out there in web-land. If you've got any good ones I'd love to hear them.