I've learned there are three main things that set me up for a productive programming session.
My current coding wonderland.
An endless supply of new beats works wonders. This is the absolute most important thing for me. If I have to context switch every 3 minutes to find a better song to play, not much is going to get done. Sometimes I'll loop through a Deadmau5 album on Spotify, or listen to a set like Trance Around the World. While I really enjoy leaks and mashups on Hype Machine, it is so hit or miss that I end up having to change the track often.
Getting in the coding zone starts by isolating myself from the rest of the world with my headphones. That's also a sign to Akshay, who works a few feet in front of me, that I'm in get-shit-done mode but have Campfire open if he needs anything.
No Chance of Interruption
I must have a seemingly endless block of time at my disposal. If I have a meeting in one hour that severely limits how much of a zone I can get into. My most productive work tends to happen at odd hours where there is no possible way that I will get a text about going out for lunch, an IM from Olark or a bunch of emails filling my inbox.
For example, it's early on Sunday morning, my cofounder is sleeping (I've slumped into a nocturnal phase.. we're in a no-meetings-until-we-ship-some-new-stuff mode) and I will probably be up until 7am in a blissful coding rage. Everything is perfect right now.
I'm never far away from our Trello board, my own personal Trello "scratch" board, my trusty Pilot Hi-Tec C Cavalier 0.3mm pen and browser sketch pad on my desk. Anything that crosses my mind worth doing now goes on my sketch pad and anything worth doing later goes on our Trello. I used to hate Trello because I thought it was fugly, but the simplicity has grown on me.
For some reason I can't seem to shake the "to do.txt" file on my desktop. Nowadays it has evolved into more of a scratch pad as well — random snippets of code or copy that I don't need this moment but don't feel like having to browse through github to find later should I need it again.
Honorable mentions: A depth charge or cappuccino on my desk, being motivated about what I'm actually building (that's the easy part for me and why I have only ever worked on my startups), and having a clean workspace, both in my physical living area and on my computer's desktop and Picplum Dropbox folder.
In hindsight I would have rather purchased an external USB DAC and some quality Sennheiser headphones.
Organization as mentioned above also means mental clarity; knowing that both Akshay and I are on the same page about what we're building at all times and sharing our progress with each other as we execute each task. It makes for a smoother product roadmap when the bigger picture has been thought out and every deliverable builds up to it and is not a random wouldn't-it-be-cool-if.
The best thing we have done for Picplum? Purchased this 6 foot by 4 foot whiteboard (better than shower board and Whiteyboards in my opinion -- they become hard to erase after a while). We've got the next three months planned out on it and are constantly updating it with tasks, deadlines, who's doing what or explaining various new user flows or UIs to each other.
Thoughts? How do you dive your coding zone? Have you signed up for Picplum yet? We'll be pushing some cool stuff soon so be sure to sign up now so you don't miss out. :)