I posted a link last week to Evan Robinson’s article explaining why crunch mode doesn’t work. Coincidentally, Ruben Ortega’s latest post on the ACM site asks, Why Do Software Developers Tolerate “Crunch Time”? His answer is “progress”, or at least, developers’ need to feel like they’re making progress. A couple of paragraphs later, though, he says:

It is unrealistic to deliver any project without going through some “Crunch time.”

I personally think that is the root of the problem. If you believe broken builds are inevitable, you’re not going to work very hard to make sure that code always compiles. If you believe that users are dumb, you’re not going to put much effort into fixing your user interface. And if you believe that it’s unrealistic to deliver code without all-nighters, guess what? You’re going to wind up pulling all-nighters.

So here’s my data. I haven’t stayed up to see the sunrise since the night my daughter was born, and you’d have to go back at least 15 years before that to my previous all-nighter. Despite that—no, because of that—I get a fair bit done on time and on spec. My algorithm is pretty simple:

  1. List the things that need to be done.
  2. Figure out which ones really matter, and which ones don’t.
  3. Estimate how long each one is going to take.
  4. Sort.
  5. Start work.

For every thing I do, there’s a dozen that I set aside. I always feel a pang of regret (sometimes two), but trying to do everything is a good way to accomplish nothing. And while it took me twenty years to learn how, I’m not pretty good at abandoning things that are half done if it turns out that they’re not as important, or as doable, as I thought they were. (“I’ve started so I’ll finish” sounds macho, but it’s lousy project management.)

I’ve also learned to ask people, “Is this a good idea?” before I put too much work into it. This one was hard too; I’ve always enjoyed walking into a room and saying, “Ta da, look what I’ve done!” These days, though, I’ll ask my wife or a fellow prof or a student what they think before I start writing or coding. As my dad used to say, “A week of hard work can sometimes save you an hour of thought.”

So: what’s your strategy for getting things done? How well does it work? And do you think you’re getting better at it?