Fog Creek Software
Discussion Board

I get it, but don't get it done...

I'd like to think of this as a common problem, but in writing my code I often run into the trouble of figuring out what I want to do and then not following through.  Is it as common as I think to be able to discuss program optimization, but spend so long worrying about it no code gets written?  A month and a half ago I started writing a program to convert TIGER data into maps for a GPS map application.  I worked on it for a week, then didn't touch it for 3.  Now I'm at the same problem.  I got back to it for another week and it's been 2 weeks since I touched it again.  It's a great package that I'm sure could be of use to other users of open source software once it's done.  I just have trouble focusing on it, but when I do I get some good code written.

I guess what I'm getting at is what can I do to help myself keep my objectives clear?  What do most people do?  This is affecting my job, not just my personal code, so for the sake of continuing employment I need to figure this out.

Shaun Kruger
Wednesday, December 5, 2001

To be honest I've found getting paid the best motivation possible.  Writing for a grey featureless blob of possible users is very difficult if writing neat software isn't in itself a sufficient reward.

If you need the gumption to get through (read Zen and the Art of Motorcycle Maintenance), create commitment.  Open up an Open Source project, argue out the marketing of the product in public, make a case for its existence, then when someone says that sounds good ~ deliver it.

If no one says that sounds good then leave it be and find something else.

Simon Lucy
Wednesday, December 5, 2001

Why do you keep getting dragged away from projects for weeks? If this is "just" happening when working on open source projects after hours then perhaps the projects are not quite as urgent needed as you thought? If you had a real demand - from yourself or others - that should help you stay on focus.

As for the job - what happens to interupt the flow? Are people stopping you working to do other things? If so, you need to either eliminate this or take it into account when scheduling work, depending on your circumstances.

If you are finding personal difficulties in motivating yourself to work on projects in your day job then you need to go back to what is wrong and what you can do to fix it. Is your environment wrong? Are you upset at pay or conditions? Is it just time to move on?

Robert Moir
Wednesday, December 5, 2001

You know, I think you're a perfectionist.  Now laugh if you know this not to be true... but some people just can't create things and have them be bad.  their creations are extensions of them, and reflect on the Creator.

You can use this to your Advantage.  Just write the thing.  Don't optimize, don't even worry about the best algorithm.  After you write and and find it's all rickety, you will be pushed to improve it, chisel it.  Everyone learns from hindsight -- so put it behind you.

Wednesday, December 5, 2001

Shaun, think I have a medicine for you.
Write the test for what you have to accoumplish.
Make it work. Write next test. Make it work.
At the end - optimize.
Never optimize first.
Make it work, make it work right, make it work fast.
This is the shortest way to get things done.

Roman Eremin
Wednesday, December 5, 2001

I think the last two posts are quite correct.  I am a perfectionist, often times things need to be just a certian way.  The first thing I have trouble with is getting started.  The second problem I have is the distraction factor.  My job has some constant tasks for me to do, but there are many side tasks that come up during the day, and it is that switching where I often get lost.  My open source work suffers when I'm trying to do too many things at once.  I have a life, and that often takes priority over programming.  I have a job, and though when things are slow I take a little time for my code I make sure I get my job done. 

To comment on a previous response, I am quite pleased with my job.  I like it, I like the people, embedded Linux devices are exactly what I want to work on.

I hope I can remember your comments for future reference.  The top thing though is to get myself to stop worrying about doing things poorly, but get them done then fix mistakes.

Shaun Kruger
Wednesday, December 5, 2001

I have the exact same problem. It's most noticeable on my personal projects - I get a certain distance into them, and then they stall. One such project is about a year old now, still fantastically pre-alpha, but if I had actually put some effort into it, I could have been well into v1.0 territory by now.

For me, the diagnosis is pretty simple. It's nothing to do with perfectionism, and all to do with craving mental stimulation - looking for the neat problems to solve that got me programming in the first place.

Personal projects start for one of two reasons. Either you need to use a particular tool, or you want to exercise your programming skill. Most of my projects are of the latter variety, I have a neat idea of a program I'd like to have written, not that I want to use, and I dive into it like it's a problem-solving exercise.

The problem is, once I'm far enough into the project that I've got it mapped out in my head, once I've solved the problem that made me start the project in the first place, the rest becomes mere drudge-work. Lacking the incentive to continue (nobody pays me for completing my pet projects), it all just becomes something I sneak into when I have nothing better to do, instead of being something I deliberately make spare time for.

Your problem is that this is seeping into your working life as well. This happens to me on occasion as well, I have weeks of off-time when my productivity goes to hell. Right now, I'm multi-tasking reading joelonsoftware with my programming because the task is so mind-numbingly boring that I need external stimulation just to stay awake. And yes, it's a personal performance hit.

What stopped this happening was when we instituted pair-programming at work. (I'm not doing it right now, but for most important work I try to find someone to pair with) I think one of the reasons that pair-programming doesn't result in a significant loss of productivity is that each coder has to be on best-behaviour as far as time spent working while at work is concerned, but at the same time if you feel your concentration lapsing, you can switch and let the other person drive for a while.

If you're facing frequent interruptions, that's a big problem. There's a fantastic chapter in "Peopleware" about how it takes programmers 15 minutes of uninterrupted work before they're coding efficiently, so if you interrupt someone for a minute, you've just set them back 15, and if you have to answer the phone every 15 minutes, you'll not get any work done at all.

See if you can get a personal firewall. If you're going to lose some of your day to interruption, could it be arranged so it all happened in one go, early in the day, and afterwards you could lock your door? Say to management "Look, these interruptions are really hurting my ability to write software. I'd be much better off if I had someone take messages for me all afternoon for everything that wasn't red-hot urgent, and then dealt with it all as a block in the morning."

Charles Miller
Thursday, December 6, 2001

*  Recent Topics

*  Fog Creek Home