Published on April 14, 2009
This post was previously on the Pathfinder Software site. Pathfinder Software changed its name to Orthogonal in 2016. Read more.
The knowledge and skill of a software developer are often the most expensive, and therefore most valuable, part of a new development effort. As a professional, it’s our duty to try to maximize our programming efforts to give the client a good return on their investment. Unfortunately, our job entails much more that just that writing software. Going to meetings, answering email, working with vendors, participating in a code review and many other things come part and parcel. In this blog, I’d like to share a couple ways I like to increase my productivity and efficiency when I get to do what I enjoy the most; code.
Recently I’ve been reading quite a bit of Anthony Bourdain, chef and host the Travel Channel’s “No Reservations”. In discussing what it takes to be a professional chef, one that is going to crank out several hundred orders a night at a high level of quality in concert with a team of other chefs, he constantly comes back to a couple of important points. Central is the concept of mise en place, translated to roughly “everything in place”, as in setting up and ready for business. All common ingredients are measured out, washed, chopped and placed in individual bowls. All utensils are washed and within easy reach. It allows the chef to be able to accomplish things quickly and efficiently and feel things are in orderly despite the chaotic atmosphere. For him, there is a religious quality about it.
I think there are some definite lessons here for developers. We all love to be in the zone. You’re not tired or feeling edgy, no one is tapping you on the shoulder, all the pieces of the code are falling right into the correct places the first time. A sort of zen place that we want to maintain as much as possible. To achieve this, things need to be in place. Some things that work for me:
- Design document – This doesn’t have to be much, but you should have always put something down on paper that outlines your plan of attack for a feature. This will help keeps things from derailing by minimizing the “Crap. I didn’t think of that. How am I going to handle it?” moments that can be complete zone killers.
- Keep a list – Keep a list of goals, thoughts, and come-back-to’s. I have a small notebook that I use to plot the order of the tasks that i want to do, making notes as things come up, and creating a secondary list of things to do after the first list is done. Most of these are small details. I didn’t think of it initially, and yes, it needs to get done, but it’s not essential to the main functionality and I’m not going to let it sidetrack me from my plan. Writing all these things down helps keep my mind clear without feeling like some things may be falling through the cracks. I prefer real paper and pen to digital as I tend to be a visual person, with lots of diagrams and visual shorthand that are much quicker and more personal than what a text editor offers. The goal is to stay focused and not go off on tangents while still capturing things that need to be mopped up or communicated later.
- Pair programming – Check out my colleague Jason Pearl’s post here; I spent most of my day pairing with him today (and many other days) and the benefits are very real. He presents a good way to keep your mise en place and still pair effectively.
- Team seating – We are constantly moving our desks in the office based on the current project. We sit team members in the same block of desks. If I need to ask my BA for clarification of a spec, she’s right there, not across the office. It keeps things rollings and helps foster team problem-solving.
- Supplies at hand – Have your coffee where you like it and chocolate covered pretzels stocked before sitting down. You don’t want to break out of the zone for any reason if it can be avoided.
The other concept that Bourdain loves to bring up is dans la merde, translated to “losing it”, or “in the weeds”. It’s the opposite of being in the zone.
“the line cook looks up at his board, scans the long line of fluttering dinner orders, and sees only incomprehensible cuniform, Sanskit-like chicken scratches that to his shriveled, dehydrated, poached, and abused brain mean nothing at all. He’s lost it …he’s dans la merde now” – The Nasty Bits
I am currently lucky enough to work at a place that understands the importance of keeping developers de-stressed and in a positive mental state, but I’ve had enough gigs with deadline death marches, “marketing needs this NOW” surprise features and 24/7 production support with scary SLA penalties where the pressure to deliver can be high to know that the danger of dans la merde is real. Also bad is when a developer is stretched thin, too many projects, too many meeting, too many contact switches. Ways that I like to keep out of weeds.
- Know your wheelhouse – Know the time of day you program the best and plan meetings and likely distractions around it. For me, its 8-9:30am and 3-6pm; I feel good, alert, and ready to go. I do my best problem solving and produce my highest quality code in these hours. Try to make part of a wheelhouse in nonstandard hours. Either get in early or stay late. It’s easy to stay focused when the rest of the office is empty. This coding may not be paired, so can be a good time to turn up the tunes.
- Turn off distractions – When you are in your wheelhouse and you are likely to get too distracted, turn off email, phone, IM, and any other communication channels whenever possible. Make em hunt you down in person. Stand up for yourself when challenged on this. You simply cannot get good coding done when constantly context switching.
- Getting a good nights sleep – We’ve all probably had some all-nighters, either for business or pleasure. Some like to see it as a badge of honor to be showing off. “Man I’m tired ’cause I was up till 3 am coding.” I’ve experienced and read too much about the effects of sleep deprivation to think that I am going to do a very complex job well without getting enough sleep. A sleep deprived mind may write code that works, but is it readable and maintainable? Does it use the best design available? Unlikely.
- Take regular breaks – Ideally 10 minutes every hour. Get up, get a good stretch (this really helps), refill the water glass, get some sun, etc. Let your brain take a quick breather.
Hope this helps and happy coding.