How to be a Productive Programmer
The following image about programmer productivity is making its rounds on the internet:
As Homer Simpson might say, it’s funny because it’s true.
I haven’t figured out the secret to being productive yet, largely because I have never been consistently productive. Ever. Joel Spolsky talks about this in one of his blog posts:
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’ve read that blog post about half a dozen times now, and It still shocks me that someone who we see as an icon in the programmer community has a problem getting started.
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?”
- Chewing. Apparently I suffer from Misophonia
- 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
What makes you unproductive, and what do you do to combat it?
There’s no One Weird Trick! to being productive, and anyone who says there is is selling you something. What makes you productive may not make me productive, and vice versa.
I rail against open floor plans, but that’s because they make an easy foil. I’ve never met a programmer who thought they were good for getting actual programming done, and I’ve never met a business person who thought they were bad for business. If anything, when a company goes to an open floor plan, there’s almost a cultish reverence of it, complete with tours and media opportunities (never mind the documented negative effects it has on productivity). See? There I go again.
Open Floor Plans are just like everything else on that list: They’re a vehicle for distraction. Distraction is easy; concentration is hard. As many times as not, I’m not productive because of me, because of something I’ve let distract me.
It may seem tautological, but:
Remove anything that distracts you, and you’ll be productive. If you’re lucky.
Post from George Stocker
February 20, 2015
February 20, 2015
February 20, 2015