The following image about programmer productivity is making its rounds on the internet:
I haven’t figured out the secret to being productive yet, largely because I have never been consistently productive.
Sometimes I just can’t get anything done.
Sure, I come into the office, putter around, check my email every ten seconds, read the web, even do a few brainless tasks like paying the American Express bill. But getting back into the flow of writing code just doesn’t happen.
These bouts of unproductiveness usually last for a day or two. But there have been times in my career as a developer when I went for weeks at a time without being able to get anything done. As they say, I’m not in flow. I’m not in the zone. I’m not anywhere.
I’m glad I’m not alone.
I’m not here to share any secret methods to being productive, but I can tell you what has kept me from being productive:
- Open Floor plans
- Developers arguing about Django vs. .NET
- Developers arguing in general
- A coworker coming up to me and asking, “Hey, did you get that email I sent?”
- Not understanding the problem I’m working on
- Not really believing in the project
- Not understanding where to start
- Facing more than one task that needs to be complete BECAUSE THINGS ARE ON FIRE RIGHT NOW
- Things BEING ON FIRE RIGHT NOW DROP EVERYTHING
- Twitter Notifications on my Phone
- Email pop ups
- Really, any pop-ups
- My wife asking, “Hey, when you have a minute could you do X?”
- Long build times
- Constant parade of people going past my desk
- Wikipedia (Seriously, don’t click on any links)
- Hacker News
- The Internet in General
Things that have contributed to making me productive in the past:
- Quiet atmosphere
- Quiet workspace (A private office works wonders)
- Understanding the next step I need to take in a project
- Knowing the problem space well
- No interruptions
- Seriously: No interruptions
- Staying off Twitter
- Staying off Hacker News
- No hardware problems
- Loving the project I’m working on
- Short build and debug times
- Not debating politics on the internet
It’s telling that half of the things that keep me from being productive are problems I’ve created; but some of them aren’t. Like Open Office floor plans.
Ultimately, each of us controls what makes us unproductive. I suck at peaceful confrontation. I either come of too strongly, or I sit there and let the other person walk all over me. I’m really not good at it at all. As such, I don’t have any good advice for handling the external forces that contribute to not being productive, but I do know this: Whatever I can control, I should control. That means:
- Turning off notifications on my iPhone (this has the added benefit of increased battery life)
- Giving myself a reward for 3 hours of continuous coding (usually in the form of “internet time” like checking Hacker News or twitter)
- Working from home when I really, really, need to get something done
- Investing in a good-for-the-price pair of noise canceling headphones
- Scheduling ‘no meeting’ times on my calendar. These are times shown as busy to everyone else. It’s my work time.
- Not getting into programmer arguments around the office; people have strong opinions, and the programmers who have arguments love to argue. If there’s an actual business problem that needs to be solved, let’s grab a conference room and come up with the advantages and disadvantages of each approach. Let’s get some data. Let’s not just argue.
- Position my desk in such a way that passersby aren’t distracting.
Taking a first pass at the problem, and *then* asking another developer to walk me through the problem so that I can get a better understanding of what to do. This accomplishes two things: First, it allows me to get the ‘lay of the land’ so that I’ll at least have a basic understanding of the forces at work. Second, it allows me to ask more intelligent questions when I ask for help