dr_tectonic: (Beem-Ur the Destructor)
[personal profile] dr_tectonic
Just went to a neat seminar about project management and estimating how much time a project will take.

The interesting thing about it is that the hardest part of managing uncertainty is getting people to admit, even to themselves, that things are as likely to come in above the mean as they are under the mean. Once you've overcome that psychological barrier, thinking rationally about it is pretty easy, folks are just really loathe to acknowledge the possibility -- the likelihood, even -- that things will go wrong.

Date: 2006-09-13 02:36 am (UTC)
dpolicar: (Default)
From: [personal profile] dpolicar
Yeah, I've observed this before.

Every once in a while people ask me how we can improve our estimation process.

I always reply something like "That depends... how do you want to improve it? Do you want to lower the chance that we overestimate? Lower the chance that we underestimate? Lower the average _amount_ by which we over/underestimate, never mind the chance? Increase the consistency among our estimates, never mind how accurate they are? Reduce the amount of time we spend coming up with them? More accurately identify our confidence level in a given estimate? Something else?"

They usually then say something like "We just want to improve the predictablity of our development process." To which I usually reply "OK, then I recommend we concentrate our attention on consistent PRIORITIZATION so we can identify the 2/3 of what we intend to do that we're likely to actuall do by our deadline, and treat the remaining 1/3 as unpredictable gravy."

They then run away and ask somebody else.

I'm not sure what lesson to draw from this.

Date: 2006-09-13 03:53 am (UTC)
From: [identity profile] bryree.livejournal.com
They don't care for gravy?

:)

Date: 2006-09-13 02:24 pm (UTC)
From: [identity profile] dr-tectonic.livejournal.com
The lesson is probably that you should figure out a way to say it that doesn't scare them...

Date: 2006-09-13 03:23 am (UTC)
From: [identity profile] nehrlich.livejournal.com
Yeah. One of the project management books I've read points out that if you're estimating accurately, you should come in late 50% of the time. Of course, by business standards, if you come in late 50% of the time on your estimates, you're a total failure. So what managers really want is something like the 3-sigma probability of coming in on time, where most of the bell curve happens before the estimate. Then when the project comes in early, they think that the programmers must have been sandbagging their estimates, so they squeeze the "extra" out of the schedule estimate next time. And we end up in Dilbert-land.

Not that I'm cynical or anything.

Date: 2006-09-13 05:05 pm (UTC)
From: [identity profile] dr-tectonic.livejournal.com
Yeah, he definitely said that the target you commit to is not the estimate when you think it'll be done. I don't have the handout in front of me, but the way he does it, I think you put the target at about +2 sigma from the mean, and then you can rerun the estimate halfway through the project and move the target closer if things are going well.

See some of the other comments, also. Part of the idea is that if you're doing it this way, people shouldn't need to sandbag, because the safety margins have been taken care of explicitly.

I guess the question is, why are the managers trying to squeeze the extra out? Their part of the project came in early and under budget -- isn't that good? Do they want to increase the odds of having late penalties associated with their work?

Date: 2006-09-13 05:26 pm (UTC)
From: [identity profile] nehrlich.livejournal.com
Coming in early and under budget is often not considered good in Dilbert-land. Early means your people were sandbagging their estimates, and that next time you should arbitrarily take their estimate and cut it down by the same amount. Under budget is often also bad, because it means that your project will be given less money next time since it's been shown you won't need it.

Sadly, I have often found it is to my benefit to goof around to use up my cushion rather than turn in work early because I might need that cushion next time and my employers don't understand the uncertainties associated with scheduling. My favorite example was when the MBA running one project asked us to give her a precise estimate on when we would make what was basically a scientific breakthrough. She needed it for her Gantt chart. We tried to explain to her that we didn't know when we'd figure it out; it would depend on how the experiments went. She wouldn't budge. We made up a number; it was easier than arguing.

There are also often business pressures that are swept out of sight and treated as assertions e.g. "It must be done by Date X, and it must include all of these features or we won't be successful". In an open, honest work environment, there could be a rational discussion where the realistic estimates of what it takes to accommodate those features would be balanced with the business cases for each feature. Unfortunately, most work environments are not like that. Instead, the communication is happening through a game of Telephone such that that discussion can't take place.

Date: 2006-09-13 05:31 pm (UTC)
From: [identity profile] dr-tectonic.livejournal.com
Yeah, I sorta think the next big socio-technology that we need to develop is a way to shoot people's careers in the head when they follow that particular path of unreason.

Date: 2006-09-13 05:46 pm (UTC)
From: [identity profile] nehrlich.livejournal.com
I think we're slowly moving in that direction because of the increase in employee mobility, especially in the realm of high-tech workers like developers. If they feel ignored and Dilbert-ized, they will move on until they get someplace where they don't. The places that do honest schedules will not only get better developers, but I'd like to believe they will do better as businesses since they will be less likely to miss their targets.

Our prof said last night that a recent survey of IT projects showed that 22% were completed within the original estimate, 52% were late by an average of 100% (double the original estimate), and 26% never finished. And developers wonder why their estimates have no credibility. Admittedly, many of those estimates were poorly constructed because of management pressures, etc., but there's definitely a competitive advantage to being able to deliver on time repeatedly.

Then again, most people don't want to hear how long a software project will actually take. "It's just software! Why does it take that long?!" So even if you give them realistic estimates, they don't believe them.

I am full of cynicism and bitterness. Can you tell?

Date: 2006-09-13 05:28 pm (UTC)
From: [identity profile] nehrlich.livejournal.com
Oh, I also meant to say that the bit where you rerun the estimate and update it throughout the project is a great idea. I really liked Steve McConnell's description of that process in his Software Project Survival Guide. Or maybe it was in Scott Berkun's Art of Project Management. Iterations are much better for scheduling and for dealing with a fast-changing environment than trying to do everything at once.

Date: 2006-09-24 09:48 pm (UTC)
From: [identity profile] hapaxeslegomena.livejournal.com
Forgive the ignorance, but: What’s a “sigma”?

Now that they’ve reorged our company and gotten rid of all the project managers, it falls on me (as the QA guy) to give daily reports to the CFO about why the IT projects aren’t on schedule.

So I feel like maybe I should find out what the Hell you guys are talking about in this thread.

Date: 2006-09-25 02:15 am (UTC)
From: [identity profile] dr-tectonic.livejournal.com
No worries!

If you've got something that follows a normal distribution (aka Gaussian distribution or bell curve), the variability of the distribution (the standard deviation) is customarily represented by the letter sigma. It's a measure of how wide the curve is.

The useful thing is that about 2/3 of the area under the curve is between (mean+sigma) and (mean-sigma). If you go out to 2 sigma on either side of the peak/center, you've got 95% of the area, and 3 sigma gets you to about 99%.

So if I do an estimate the way this guy described and it tells me that, on average, my project will take 20 weeks, with a standard deviation of 3 weeks, I know that I can come in under deadline 97.5% of the time if I commit to doing it in 26 weeks (+2 sigma). [That's assuming that the estimate is accurate, of course.]

Date: 2006-09-13 01:41 pm (UTC)
From: [identity profile] zalena.livejournal.com
I always over-estimate the time and money it will take to do a project. This way people are happy that my projects almost always come in early and under budget.

Sadly, I am about the only person who understands the psychological benefits of this approach, not to mention how useful a little extra time and money can be when things go wrong.

And they do go wrong.

Date: 2006-09-13 05:08 pm (UTC)
From: [identity profile] dr-tectonic.livejournal.com
And they do go wrong.

People are so unwilling to think about that. I think you're the only one there who's not just mired in denial.

Date: 2006-09-13 02:02 pm (UTC)
From: [identity profile] backrubbear.livejournal.com
There's an unfortunate circle of death involved in the whole project estimation process. I'm sure you're aware of it, but I'm always curious how other people deal with it.

Most people who are wise will "Scotty" their answers. Their Scotty-factor may be a percentage (15%, 50%) or it might be a whole multiple.

The unwise people give a best-faith estimate to their managers. There are usually a lot of factors the person giving the estimate is unaware of, so their number is low through no fault of their own.

Management often doesn't have well defined requirements. This means that no estimate can be good.

Management also knows that their people often Scotty their numbers. They can either add their own padding, or subtract it.

Bad management will simply pick a fixed date with no regards to any estimates.

IMO, there's plenty of blame to pass around. :-)

Date: 2006-09-13 04:44 pm (UTC)
From: [identity profile] dr-tectonic.livejournal.com
The Scotty-factor on my latest project was x4, and it's coming in slightly over -- which really says more about my own estimation abilities than anything, and is one of the reasons I padded it so much.

Yeah, he actually talked about how meaningful estimation depends on being able to have an adult discussion about uncertainty with your Darth Vader manager. If you say that you honestly think it'll take 5 months, but could shift a month either way depending on how things go, and the manager says "do it in 2", the problem is not estimation.

The stuff he presented is also entirely orthogonal to padding for things like how much time you lose each day to required activity that isn't working on the project. This was all just uncertainty related to the amount of staff-days of work needed, not actual calendar time, which is kinda neat.

Date: 2006-09-14 02:37 pm (UTC)
From: [identity profile] backrubbear.livejournal.com
"Overhead" is a concept a lot of programmer folk have difficulty wrapping their minds around. :-)

Date: 2006-09-14 03:43 pm (UTC)
From: [identity profile] dr-tectonic.livejournal.com
Overhead! That's the word I was trying to think of! I think my brain refused to suggest it because when we talk about overhead here at work, it's always in a financial context.

"Overhead" is a concept a lot of programmer folk have difficulty wrapping their minds around.

That surprises me. Just about every resource on a computer has overhead, so it's hardly a foreign concept...

Date: 2006-09-14 04:10 pm (UTC)
From: [identity profile] backrubbear.livejournal.com
While programmers readily understand overhead, they usually don't apply it to themselves.

I suggest going around and chatting with yours. Ask them how many hours of the day they think they're productive in each of their tasks that would be reflected in a project plan. I'd bet you a drink that they'll overestimate by at least an hour or two.

Date: 2006-09-14 04:33 pm (UTC)
From: [identity profile] dr-tectonic.livejournal.com
Heh. "My programmers" consists of me.

And I have no illusions about my own (in)efficiency.

Fortunately, when I am doing something productive, my output rate is usually pretty high, so it all works out in the long run...

Not a rant

Date: 2006-09-13 04:12 pm (UTC)
From: [identity profile] ng-nighthawk.livejournal.com
This topic is so rant-worthy, but everyone else pretty much covered it.

One point: in project management land, extra time is called "padding" or "pad." In a non-disfunctional system (and really, I've worked in several, it's not actually impossible) you gather the actual time estimates then add in a standard amount of pad to cover what you don't know.

However, on a different point, you also cannot schedule something if you don't know what people want you to build. However, you CAN schedule something if the people who are defining the requirements agree to consult you: "Can you do X and Y in the time you have left?" If you can't get it done, that feature is automatically scaled back or dropped. Alternately, everyone agrees the date must be moved.

Again, I have worked in places (and do currently) where this really happens--people are really interested in doing their best to overcome these kinds of challenges.

But here's a question, Dr. T: there is one theory that says that people generally over- or under-estimate how much time something is going to take by a fairly consistent factor. Assuming you can identify a few variables (Sue always thinks db work takes longer than it does, Bob always thinks he can just whip out the help files and forgets they have to be approved by the marketing department before he's done with them) you can get a pretty good idea of how to adjust the estimates to be more (but not perfectly) realistic. The key, however, is never to tell the people doing the estimating how you adjust their numbers, or they'll try to compensate which throws everything off.

It seems a bit underhanded, but in a lot of ways this approach seems like it makes a lot of sense. Did the seminar touch on this kind of approach and say whether it's a good or bad idea?

Re: Not a rant

Date: 2006-09-13 04:56 pm (UTC)
From: [identity profile] dr-tectonic.livejournal.com
Actually, the way he presented it is slightly more sophisticated than what you describe. Using this method, you get an estimate of the amount of work (staff-days) that will be required, taking in to account the uncertainties. You don't need any padding for the things you don't know if they've been incorporated into your estimate. Then you have to translate work into actual calendar days, and that's when you add padding to deal with all the other stuff people have to do that isn't working on the project itself.

He talked about it as being primarily a way of being honest with yourself. Instead of asking just how long will it take, you ask how long will it take on average, how quickly could it be done if everything goes well, and how long might it take in the worst-case -- and then you combine those. If you ask Bob those questions, you'll get a different, and probably much more accurate, number, even given his tendency to underestimate (which you could then account for in the way you describe).

Re: Not a rant

Date: 2006-09-13 05:17 pm (UTC)
From: [identity profile] nehrlich.livejournal.com
The hard part for inexperienced people is to include all of the work that needs to get done. I'm talking about things like testing and integration - doing the feature may take one day, but testing it will take another day, and integrating it with the main branch and ironing out bugs is another day. But if you ask a developer how long it will take to do X, they will just give you the original one day estimate. So adding in the two extra days isn't really padding in the sense that it's unforeseen or unanticipated, it's just inexperience on the part of the estimator.

This was dramatically illustrated to me in my first couple months working as a consultant, where we were asked to add a single feature to an already working test system. I wanted to do it right then and there, and my boss said "We'll go to lunch and get you a good estimate". He asked me at lunch my estimate, and I said 4 hours. His estimate was more like 16 hours after including all of those elements I listed above. Guess who was closer to right?

And, yeah, then you have to take into account meetings, coffee breaks, lunch, picking kids up after school, vacation, sick days, etc. It adds up - I think I've read that 20 hours of actual development in a week is doing really well, and that fits with my own experience.

Date: 2006-09-13 10:08 pm (UTC)
From: [identity profile] melted-snowball.livejournal.com
Have I mentioned, recently, how grateful I am to have my job?

Perhaps now is the moment to do so, despite this post.