Some other thoughts -
If you notice some habitual thing you do when feeling initial frustration (surf to a website, turn on the TV, whatever) - then try changing your environment slightly to make it harder. If you use Google Chrome, delete or move a site you go to habitually. This can help a lot for not bailing out during that first 15-30 minutes of warmup when working on something a little frustrating and a little beyond current skill level.
Silence is good, but if you have a hard time finding it, try to find music that drowns out the outside world for you. Electronic music helps me - a nice mix of Benny Benassi, David Guetta, or John Digweed and I can ignore background noise. Also, if lyrics distract you and you like electronic, maybe try looking up some "minimal techno" - it's kind of weird, but very cerebral. I work very well to it, it's zone-getting-into music for me.
Silence or kill your phone entirely.
Make very clear to people when you're about to work on something important and don't want your concentration broken, let them know you're going to be an angry cave bear woken up from hibernation if they bother you, and let them know exactly what to bother you on - "Don't disturb me from working unless something is on fire, and maybe not even then" tends to get the point across.
Also, you've kind of got to regular your caffeine/sugar/food a little bit so you don't totally spike and crash. It takes a while to get this down, but there's very few things that are as much of a bummer as having your blood sugar crash, caffeine withdrawl, and hunger kick in all at the same time when you were doing good work. Knowing your own rhythms and eating/drinking/caffeinating intelligently during your work helps a lot.
As for music: I've lately found that Digitally Imported radio is awesome when my personal electronic/techno library gets stale or repetitive. There's always something different there.
I get a solid 8 hours since quitting caffeine, and it's really good sleep, too. I'm almost 100% ready to go as soon as I wake up.
And I get a lot less of the "you look tired" comments from my partner.
When I sit down to do work, it's usually around 7pm and it's homework. I don't like homework, but I dislike spending too much time on it even more. Often I'll go to check Facebook or HN after typing out a sentence or so, because it feels like a reward. It took me a while to realize how miserable it made the whole process.
Now if I want to get stuff done I'll remove distractions. No computer if possible---if I do have to use it I'll turn off Internet or edit my hosts file, which is usually a big enough roadblock to send me back to work. I turn off my phone. I also find that Tea helps me tremendously, in addition to tasting delicious :)
'Moving Immobility' :
I need internet for what I do, but I keep all of my bookmarks (especially RSS feeds) on my laptop in the next room. The laptop is also at bar height, with only a hard plastic stool in front of it. So procrastinating for too long is uncomfortable.
I can still go to various distracting sites (I'm doing it now), but it's a decent speedbump (and noprocrast is your friend).
1) Easier to get into my work. When I restore a VM, it's still in the exact state it was in the last time I worked on that project. Terminals open, commands still partially typed in, working files open, notes typed to myself, docs/references still open, etc.
2) Easier to avoid distractions. The logical sandboxing of work and play has really been helpful for me - once that VM opens up, everything else gets hidden and drowned out. There is no temptation to "just peak at HN" - I'm either completely in my work VM or completely out of it. When the divide between work and play is blurry, I err, but this keeps that divide very crystal clear.
3) It's easy to recover from distractions when they do occur (and they are inevitable). I just minimize the entire VM I'm working in, and all of my work is kept in its exact state: positioning of windows, files open, etc.
The extra bit of effort separating doing your work from consuming Internet junk food is significant. I've noticed this myself when I'm coding for school projects. I tend to be much more productive on a frozen system* in a public/private lab, rather than on my own laptop at home.
*For the unfamiliar -- DeepFreeze removes any changes made to a disk from the frozen state at each restart requiring you to save work on a flash drive, Dropbox, etc.
Also, I use Textmate as 'mate .' in a terminal to open projects, with a global configuration making my TM workflow/workspace stateless (no tab bar, heavy use of cmd+T).
It's called Flow (http://en.wikipedia.org/wiki/Flow_%28psychology%29) and to me is a really interesting topic, as well as a mental state I'm sure most programmers are experiencing regularly. At least unless they are sitting in a hectic environment, like say, a home office with 3 cats and a frequently insisting girlfriend (theoretical example).
But the time quantum for hacking is very long: it might take an hour just to load a problem into your head. So the cost of having someone from personnel call you about a form you forgot to fill out can be huge.
This is why hackers give you such a baleful stare as they turn from their screen to answer your question. Inside their heads a giant house of cards is tottering.
One thing that helps me with this is to "sketch out" my plan in comments before I start. That way, if I get interrupted, I have comments to jog my memory of what I was doing.
This also helps when I have to chase a rabbit trail. Maybe my comment for a particular step just says "capture the substring and replace it with foo," but to actually do that, I have to look up the method documentation. When I finish with that detail, I don't want to have to say "now where was I?" My next comment helps me get back on track.
I beat myself up because sometimes I don't feel like I'm working hard enough, whereas what I actually think is happening is my brain has associated "working hard" with being in "the zone" - something I find hard to do with this type of work.
I'm currently sitting in Photoshop doing some logo resizing for our homepage, and its nice being "back in the zone"!
The corollary to this is that you can't wait on the zone to do your job. Muses have no respect for deadlines.
This phrase is wonderful.
This is a problem for me. I try to remember that the company has entrusted me with a lot of details about how stuff works, and providing access to that is a legitimate part of my job, but I feel much better when I can see some commits when I'm done for the day.
Where do These People Get Their (Unoriginal) Ideas?
Human Task Switches Considered Harmful
+1 to "Flow" by Csikszentmihalyi
- It's a routine, so I can plan a difficult job to work on
as I'm walking to the station
- There's no internet, so no HN/other distractions
- It's normally quiet
"Replicating conditions" rarely works for me. No matter how much I stage the room, the lighting, the time of day, my mood, etc., it doesn't seem to matter. Why? Because I'm focusing on byproducts, not the real thing. The only way I can get back into the zone is to work on "zone appropriate" work that is "zone ready". Call it whatever you want: the most important thing, the critical path, the lowest building block, etc. It needs to be ready to be worked on (all the prerequisites done) and I need to be ready to work on it. Necessary and sufficient conditions.
One thing that struck me the other day is that when I'm interrupted by a living human being when in the zone I'm probably not the nicest person to be around.
That's OK, because you're not yourself anyway. You're some other persona living in the body you share. Sometimes I think I have multiple personality disorder, my personalities are "me in the zone" and "me not in the zone". We both know each other exists, we respect each other, but we have never met.
Total immersion is a powerful tool, it makes it possible to achieve things that are normally at or just beyond what I could do in a regular work setting.
I'll take it a step further: it's the only way to get some things done. Sometimes I look at some work that I did and I can't believe I did it. (Worse, I wonder how I'll ever do something at that level again.) Then I realize that I was in the zone when I did it and all I have to do is return to the zone and trust that my other persona takes over. You don't have to be able to build something right now, you just have to believe that it's possible for you to build it when you're in the zone.
Nice post, Jacques. A few other things that may be helping:
- I do all my work in my private home office.
- no land line
- only 6 people have my cell phone number for emergencies only
- no texting
- no chat
- I only check email in batches
- I only check Hacker News in batches
- L-shaped desk, single 19" monitor
- great office chair
- 3 kinds of light: natural, overhead, and task
- green & black full screen Textpad editor
- alt-tab to full screen test session
- windows open all year round (in winter it gets cold)
- sweat suit in winter, gym clothes in summer
- I work on only one thing: the most important.
- When I'm stuck, I go away from the computer.
- I always have pen & pad nearby. Always.
- Certain foods & drink help - this changes and is tricky.
- I face the door.
- I face southwest in every desk I've ever had. (I don't know why.)
- Cats remind me I'm not alone, but don't interrupt (much).
- SO knows: If I'm typing & looking at screen: don't interrupt!
Worth bearing in mind, however, that "multiple personalities" can be an explanation for how you behave the way you do, but they are by no means an excuse. The danger in this book is that some people will take it as an excuse to do whatever they want and blame it on their "other personalities".. that would be bad.
Still, the book is very interesting and even useful, as it includes tips for mapping your personalities and getting them talking to each other so that "they" are in agreement about which personality should come out in what situation (for example, you don't want your aggressive zone personality to come out when meeting a client for the first time).
I discovered my own little productivity-hack/zone-portal recently. If it's still working after a few weeks maybe I'll blog about it.
In programming, I doubt if it's as easily discernible. I've been programming for a few years and had a few productive stretches coding 8-10 hours at a time(with small breaks in between of course), but never felt like I was in the zone even once.
"I could take on anything my opponent would throw at me and without even breaking a sweat"
If I'm 'in the zone' as it were, you could replace 'opponent' with 'bugs' and it would be very similar to my experience. Not so sure about 'expending very little effort' though. While it doesn't feel like hard work while I'm coding 'in the zone' I end up completely mentally exhausted by the end.
I can assure you that it is just as discernible in programming, but I suppose different people experience it with different intensity on the same activities.
just to name a few... So these are a lot of questions to handle all at once. I find myself asking suprisingly similar questions now that I'm coding/designing. The basic principles of physical space don't differ much from web space. My analogy for this sort of juggling is an image of a person standing one-legged on a ball with a stack of plates on his head and juggling an array of different objects.
When I'm in the zone, my mind is hyper-extended and I tune everything else out. I often won't even answer someone who comes up to speak to me. In college, my mother would call me and I wouldn't answer for hours. She'd get angry and say.. you couldn't spare 5 minutes? 5 minutes means having to drop all the things I'm juggling, fall off the ball and break the stack of plates on my head.
In the most extreme cases, when in the zone for extended periods of time, I've forgone eating and sleeping (no caffeine needed in the zone), without any ill effects until snapping out of zone, which ends in a crash.
I'm never tempted to open Reddit/HN/email/etc in my work-related profiles because I hate the idea of polluting my browser history.
The other key to this, for me, is virtual desktops that roughly correspond to the FF profiles. There's at least a little effort involved in switching desktops, but sometimes I need to shut down the personal FF instance, too.
A second monitor will make me 10% more productive but I can live without it if I have to. Give me a laptop and my productivity falls to a crawl.
For me the zone happens somewhat randomly. If I tell myself that I'm going on a programming binge after work I'm probably not. I'll find some excuse, pick up a 6 pack and watch a baseball game or something. But if I read about some new library or a new technique, I'll often pop open a text editor and play around with it. Next thing I know I've decided to use it instead of some other library than I previously was working with, and have completely replaced the code in a couple of hours.
I think one of problems with the work environment is that they don't know how much they leave on the table because of the environment, and without a cost, there can be no cost/benefit and no impetus to change.
This usually means changing the desk I work at every few weeks, possibly going to a sofa for a few days. Today I even went to work at a coffee shop despite having a readily available office. It's just too boring there.
Another thing I seem to need is enough low-grade internet to quickly refresh my mind when I get stuck on a problem. It lets me delegate whatever I'm thinking to the back of my mind while I mindlessly surf the internets until the problem is suddenly solved and I can get back to work.
With the internet, you're still deciding when to up to you when to take a quick break. When others who are unaware decide for you, it can be a pretty big setback, like he describes.
Hi. I'm a programmer who's never been in the zone (as I understand it). This is in spite of being engaged in my work, and vigorous efforts to improve my practice.
I wonder how many of us there are.
When I'm not in the zone it seems like I'm grinding compared to them, like I'm walking in a swamp. Yet when I'm in, I work at what seems like stratospheric speeds.
Sometimes the zone happens when collaborating on solving a complex but rewarding problem, or an involved yet insightful discussion. When this happens, I feel 'offseted', like I'm on a different flow of time. My brain churns away, evaluating solutions, and I can almost hear the colleagues mind slowly ticking. I seem to have computed how every path of the conversation tree will unfold, which questions they will come up with and which conclusion they will reach. It's terrible because in that case I can subtly nudge their thought flow in one direction or another, making them reach a given conclusion faster. Everytime I feel like performing some dirty Jedi mind trick. Most of the time I refrain from doing so and adopt a maieutic approach to let them reach their solution by themselves, only cutting dead branches around.
The zone is a wonderful, timeless moment when experienced alone, but every time third parties are involved it's a frightening experience. It's also a bane of sorts, because I'm utterly improductive without it.
I've tried to use this analogy with my wife. Still working on it.
Who it's for
What it should do
When I think it'll be done
Where it needs to happen
Why I'm doing it
How much it will cost
This frames the project for me. Then after that I come up with what I think the next thing I need to accomplish on the project is and write it down. Later when I site down at my computer, I have no questions about what to do next and so I can hit the zone really fast.
I imagine high performing athletes are able to achieve this feeling of being in the "zone" quite often.
Sometimes, I will deliberately engage in nothing but research until everyone is out of the office. Then, I start coding. Not an optimal resolution, by any means, but until articulating this amicably is possible, it's what I've got.
I miss those old sessions. Lost in my own world, code flying out for hours at a time sometimes straying far from the next compile but certain that if I just kept hacking there would be a glorious moment when it burst into life. I wouldn't go back now though, the red, green has me. I'll just have to wait for that cloud editor I'm longing for, the one that'll run tests instantly as I type.
How do you guys deal with these while 'in the zone'? Got a book or notes lying around? Or are visiting the web/irc to get unstuck?
Being in the zone does not exclude research tasks. Being in the zone is simply a state of hyper focus.
It's very possible to be in the zone and constantly switching back and forth between the IDE and API reference, the point is that even though you are switching windows you aren't switching tasks. You've got this clear model or objective you're working towards and you're just referencing details plugging them in as you go along.
> to get unstuck?
The definition of the zone, what makes it so amazing, is that you aren't stuck--you're in constant motion towards the solution. The only way to get from stuck to the zone, is simply to stop being stuck. In other words, take the first step towards the solution do something, anything to address the problem set. That may mean, doing research, checking out code samples, etc. Just because you aren't typing characters into an IDE doesn't mean you haven't started coding. The research is helping you build a model, understand the scope and structure of the thing and eventually leads to describing it in the editor.
Why do you think people on IRC are often so snappy and aggressive? They're in the zone.
could be in the middle of a war zone, or my office that frequently mimics such, as long as I am interested in the problem at hand I can get in the zone.
For tips on how to create the zone that OP is talking about, read the wikipedia article . The book Flow by Mihály Csíkszentmihályi  is also highly recommended.
As for flow, I think it's like sleep in its onset. You can't force yourself into the state, but if you make the conditions right, it'll usually start in 10 minutes and fully set in within 40-60.
What makes flow impossible in most work environments is arrogant, short-sighted managers (there, I said it) who ask for detailed, impromptu status reports several times a day. They're so used to email clients and web services that can be checked 33 times per day, with no degradation in performance, that they think they can pull that shit off on the people working for them, and it's not that way. Establish a sane, regular reporting schedule and fucking stick to it.
Huh? How old is this guy? I thought structured programming was something that came out in the 30's or something.