During my days as a consultant, things started-out easy. I got paid “time and materials”. Which means that it was somebody else’s responsibility to keep me productive. After a few years, the consulting world changed a little and the customers started asking for “fixed bid” projects. They would tell us that they wanted a polly-wally-doodle and they wanted to know “how much”. Just like that.
At first, our sales reps tried the ole over-the-shoulder-shot-in-the-dark-behind-you-with-a-mirror, while blind-folded, technique for estimating. After shaking the customer’s hand, the sale rep would hand everything (nothing) over to the developers and require us to fit the (vaguely described) project into that (arbitrary, yet rigid) cost window. As you can imagine, it didn’t go well.
After breaking-even (as-in, no profit) a few times, the sales people started asking how we could work together to get more-accurate time estimates. Thus began our journey.
Flash-back to when I was in college: In my “Software Engineering” course (a weeder class at U of M Dearborn), we were required to build a team project and apply all of the principals/techniques that we were learning. One of those things was estimation techniques. I recall applying CoCoMo and Function Point analysis to our big project and being shocked at the size of the time estimate (120 hrs).
Throughout the course, we developed our project and logged the hours that we spent on it. In the end, my hours came out within 8% of one of those estimates. The winner was Function Point analysis, with a total of 130 hours. I couldn’t believe it. I had to check my journals to make sure I hadn’t mis-represented anything. No. FP was a clear winner.
Fast-forward to 2000. I present this anecdote to my boss (a sales rep). We decide to retry my experiment with a project that just completed. Once again, FP came out within 8% and CoCoMo was over by 20%. The original guesstimate was under by 20%. Ouch.
Now, of course, I make it sound so easy, right? As long as you know exactly what you are building, you can plop it into this formula and get a reasonably accurate result. Ha! However, if for some reason, you don’t know exactly what you are about to build, then forget your stupid formulas.
So, the question behind the question is this: How do you accurately define your scope, so you can get accurate numbers to plug-into the FP formula? Oh yes. That sir, is the right question!