10 Ways to Improve Your Programming Productivity

The following is a quote from Matthew Moore. He has an interesting post on his blog Adventures in Starting-Up

Having worked at Google and now working in my own business, I’ve noticed that some days I’m just a rockstar at getting everything done, and others I can barely get a few lines of code out, or accomplish anything on my todo list.  Of course, now that I’m in a really small business, every single day counts, for each person in the business.

After looking back and trying to figure out what separates one day from the next, here are some commonalities I’ve noticed.  All of these are obvious with a little bit of thought, and I’m certainly not the first one to come up with these ideas.  But a reminder of them can go a long way. Also, some of these only apply when you’re in Marathon mode (like when you’re trying to be effective over the course of a year or two), and not in Sprint mode (like when you have a major, major deadline in 2 weeks).

1. Limit News Intake to twice a day, Including Google Reader & News Sites
Straight from the four hour workweek.  Let’s be real: Your minute-to-minute life isn’t affected by anything you read in your blogs unless you’re a news reporter.  Reading the news is an enjoyable way to procrastinate under the veil of being important.  I have 2 times of the day when I read news: google reader in the morning, and news in the evening.  Anything more is a distraction which lowers my effectiveness.

2. Leave Yourself a Place to Start (or: Leave work with something small broken)
Programming effectively (at least, for me) requires me to have a lot in my brain at one time – which I ‘load’ when I start, and which rapidly dissipates when I get distracted or stop.  That means that getting started and ‘into the zone’ is the hardest part.  What makes it easier to get started is if I have a simple task to complete that gets me in the zone.

So, any time I stop (lunch, or in the evening), I intentionally break something so I can get right back and fix it – when I get back to work, I’m not only anxious to fix it, but I’m in the zone after I’m done fixing it.

There was a famous sculptor (or ten) who, before he’d leave for the night, would smash a sizable dent into his sculpture – so in the morning, he’d know where to start.  Many programmers I know have a problem with this – but seriously.  Try it a few times, and see if it gets you up and running faster, more consistently.

3. Draw it Out & Research First
I can’t really explain it, but I’m so much more productive whenever I use a pen and paper to draw out what I need to do.  I don’t know if it gives me time to sort out all the details in my mind, or if it’s just giving me a road map so I don’t get distracted.  But paper and pen is my favorite, whether it’s a flow chart or a UI mockup.  I know others love their whiteboards.  But for some reason, doing it in OmniGraffle or PPT just doesn’t have the same effect.

Also, if I know I’m going to need some algorithms that require knowledge I don’t currently have, I spend 30 minutes researching the answers to them.  That way I don’t get distracted or have to redo anything.

4. Architect Your Perfect Distraction-Eliminating Work Environment
Unfortunately in big companies, you don’t necessarily have control over your designated workspace.  However, you can probably control your home work environment, or find an area at the office building that you can make your own.  My work environment includes:

* Big computer monitor, big desk (for when I want to work at a desk)
* A recliner chair (for when I want to work in a relaxing posture)
* Conducive Work Music (my mood is a bit different each day, but I have to know the song well, otherwise I end up listening to the words!)
* Good sound system
* Well-Lit with natural light
* Wide-open space
* Very few people (or no one) walking by
* Well ventilated, preferably with outside air
* Modern feel
* Calm pets I get along with

5. Eliminate IM during productive hours
Other people don’t usually spend the time to think whether or not something is urgent AND important when they IM you.  Chances are if they think about it for 15 seconds after their initial impulse to IM you, most IMs can be done over email, and can be answered in non-productive hours.

The same goes for you.  Before you ask someone on IM for something, see if it’s actually urgent and important.  If it’s not, send them an email and ask for the answer by the end of the day, or week.  Then you won’t get distracted, either.

6. Only Respond to Emergency Emails during productive hours
This goes hand in hand with the tip above.  You can lose a few hours just in the context switching between programming and doing other things.  If you can, make a label, with a rule to filter out emergency emails and bring them to your attention.  Otherwise, answer all other types of emails after productive hours.

7. Limit Meetings to once a week (or less)!
I saw this at the big company I worked at the most, but if your team runs effectively, and is an effective size, you should only have to have meetings once a week, to get everyone back on the same track.  If you have meetings more than once a week, there’s most likely a serious problem with how your project is managed, or how your team is structured.

In our small team, we meet once a week to prioritize the next 3 features being built – mostly because each feature takes a week to build (or two).

8. Get out, and be social every 2 weeks
It might just be me, but I think it’s universal – I need human contact other than my work friends at least every two weeks, and go somewhere other than home and work.  Otherwise something inside me starts to get distracted easily.  I have a need to talk about myself to friends, and listen to my friends; and doing so regularly keeps me from getting too antsy & feeing couped up.  I’m sure the rest of you experience some similar phenomenon, perhaps on a different timescale.  Tailor your routine to your own emotional needs!

And on a related note, even playing video games on weekends doesn’t really keep me from feeling antsy – I really have to leave my normal environment and interact with other people.

9. Take evenings off most days
This is worse at a startup – the inertia of working 24×7, as well as anxiety (or being anxious and excited) can keep you glued to doing work for far too long.  I’ve found that if I take evenings off, I’m more likely to need less sleep, and less likely to get caught up in reading the news or getting distracted on IM.  Each evening, unless there’s a problem, I’ll take at least a few hours to enjoy the companionship of my girlfriend, pets, some TV, or a book – and just let my brain unwind and refresh.  I think you’ll find your creativity improve, too.

10. Get 20 minutes of exercise in the morning, 3 times a week – but use that time!
I don’t know about you, but I used to think exercise was a complete waste of time – but I knew it was important.  However, what I’ve found is that when I exercise regularly, I need less sleep – which is crucial in a startup!  I also bring along a great podcast I can listen to on an iPod.  Typically they’re a perfect length – 30-40 minutes, and I can get in my exercise while I’m getting a new perspective on things.

I suggest: Stanford Technology Ventures Podcasts (my favorite),  Ruby on Rails Envy (and other technical podcasts)

Bonus. Make/Use Better Tools
This isn’t concrete enough to be an actual method (plus, 11 just isn’t a good number), but I’ve found it incredibly valuable.

The best time savers from a coding perspective for ThriveSmart is when we’ve made plugins out of repetitive code – or when we’ve found plugins for things we thought we’d have to do ourselves.   Take a look: can you write any tools that would automate parts of your life or drudge tasks?  Perhaps you can even outsource parts of your life, like in 4 hour workweek.  Just something to revisit every few months, to see if you can work smarter, instead of harder!

Original post: matthewpaulmoore.com

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s