Software best practice: Never say “X% done”

Note: This is a post from 2007 that I just updated a little bit because I think there’s still some value in it.

A lot of people have written to say that it’s unfair that I think developers should never say “I’m 75% done,” or “I’m 90% done.”

So, to explain myself, here’s why I think you should never use a phrase like that:

Manager Developer
I hear you’re 75% done with the XYZ effort, is that right? Yep, absolutely.
Well, first things first. When you say “done,” what do you mean exactly? Um, what do you mean?
Let me give you a few standard options: You’re done with initial development and you or a partner haven’t tested it. Or, you’re done with initial development and a partner has tested it. Or, you’re sending your code to QA. Or you’re also including bug-testing time in your estimate. Or you mean something else. Well, there’s no way to estimate bug-testing time, and nobody else on the team has tested the code, so I guess I’ll be ready to have a partner test it before we send it to QA.
Okay, now back to your “75% complete status.” Your original estimate was 10 days, and you haven’t revised that, so you’ll be done in 2.5 days, is that right? Um, well, it’s probably a little closer to 3.5 days.
So, 3.5 days until someone nearby tests it? Yes.
All right. Does that include the changes to component #1? Um, well, huh, no, I forgot about that. That’s probably an extra day.
How about the meeting tomorrow morning to discuss the design changes to the Foo Bar page? Oh man, I forgot about that meeting. Uh, no.
Oh, and you start vacation on Wednesday, right? Yeah, we’re going to the lake for a few days.
Okay (sounding like the manager on Office Space) ... so your initial estimate was 75% done, which meant 2.5 days, but now, barring any further changes, it’s really looking like you won’t be submitting your code for pre-QA testing until the end of next week, at the earliest. Why don’t we get together at the end of next week and see where you are then? Okay (thinking that his manager sounds like the manager from Office Space), sounds good.

FWIW, when I’ve been a project lead, this is a typical conversation I’ve had with developers, not an exaggeration or atypical conversation.

I understand that developers are typically introverts, but they/we also need to see the big picture. My biggest problem here is that someone wants me to go to the Project Sponsor and say “It looks like we're 75% done with the XYZ Widget,” when in fact we have no clue when it will be done. That’s just irresponsible. If I say stuff like that too many times the Sponsor is going to quit believing anything I say, and I won’t stand for that.

So that’s where my angst with the “75% done” phrase comes with. First of all, you’re 75% done with what? Next, does this factor in all the changes, meetings, and other time? Finally, let’s put a date on your deliverable.

I know estimating is hard, I used to be as bad at it as anyone, but when people that say they’re “75% done,” that really makes me cringe.