[Mark == [EMAIL PROTECTED] on Mon, 1 Nov 2004 15:45:34 +0000 (UTC)]

  Mark> So, what resources are recommended to consult to make great
  Mark> estimates?  What habits to develop?

Estimate only what you know.  My preferred model is to "bid" on only
"one phase at a time".  During kickoff, I'll give a client a firm
budget for the discovery phase, but only a "rough estimate" of the
planning, implementation, and rollout phases.  When discovery is done,
I'll prepare a firm bid for "planning", but still only have a rough
estimate for implementation.

Most clients respond relatively well to this.  If they push hard on
wanting a firm estimate up front for something that's not already
well-specified, then the developer's risk inevitably goes up.  The
standard mechanism to absorb this risk is to increase your profit
margins to readjust the risk/reward ratio.

Really smart clients actually realize that fixed-bid estimates
generally end up costing more than straight time-and-materials, since
they are forcing their vendor to absorb risk.  (Assuming of course the
vendor is honest in general.)  But few clients are actually this
savvy, so I sympathize with the pressures to deliver an "up front
estimate".

  Mark> I know that before the good estimate comes the strong
  Mark> technical specification so you can know what you are
  Mark> estimating-- that much I think I do well at.

I'm pretty good at it too, but that really only works for smaller gigs
where the work is substantially similar to something you've done
before.  My limit for being able to write a complete tech spec up
front is about 4-6 person-weeks.  Beyond that, it's best to get over
the fantasy of being able to do accurate "up front specification"
leading to a solid, accurate estimate.  You're just guessing at that
point, and no estimation tips-and-tricks is going to replace
experience and gut instinct on the right price tag to put on a piece
of paper.

Consider changing how both you and clients approach the idea of an
estimate.  Estimation is an ongoing process, not a 1-time activity up
front.  Use phrases like "current best estimate".  Always have an
estimate range for how long the remaining work will take to reach
certain milestones.

I actually tend to jump on this process, and walk out of the first
phone call/meeting already having told the client my "current best
estimate".  "So, off the cuff, my experience tells me this should be
about a 2-4 week planning phase followed by about 2-6 week
implementation/rollout phase, broken into about 4 releases.  We of
course won't find out reasonably accurate implementation costs until
about release 2, but I'll try to continually refine these numbers for
you.  I know you need to control your budget, so I'll commit at this
point to delivering a list of things we need to decide by the end of
planning for a fixed bid of 40 hours work".  Whatever, something like
that, to lead them into seeing that you are offering them cost
control, but that a fixed bid right now isn't in anyone's best interest.

If the client pulls back hard, you've got a client management
situation on your hands.  You're best off just doubling or tripling
your gut instinct, write up an "assumptions" document, and hoping the
law of averages works to your favor this time.

  Mark> I have also read about the 'XP' model, but I find it does[n't]
  Mark> map well onto smaller "one off" projects that flow through
  Mark> here.

I don't advocate XP for most professional services situations.  But
the teachings of XP have been hard won and most make sense in even
your situation, and are not lightly ignored if you want to have a
realistic perspective on the real-world software development process .
I had adopted the procedures described above before even the very
first XP mentions, but they can rightly be called "XP-like".

The key XP lesson for professional services situations is "release
early, release often".  If you can get your client to pay you for
functionality in "phases" or "releases" (where the func spec and tech
spec are distinct releases), you are well on your way to breaking the
tyranny of the up-front estimate.  My pitch to clients is all about
their benefits: lower cost, better risk management, higher confidence
by knowing there's actual code being worked on, provable deliverables
("full test suite from release #1"), and various other slants
depending on how they've been hurt by development costs before.

Another sort of XP-ish approach is the completely transparent
estimate.  Write down every task you intend to do (possibly by
fleshing out the test plan first), put a number by each one, and add
it all up in a single spreadsheet document to get to a bottom line.
If a client balks over the price, you say, "is there a particular task
you think is overbid?"  Make them point to the line they think is
wrong, and if they can't, they will realize they need to actually dump
tasks to make the cost go down.

  Mark> I also wouldn't mind hearing stories about "software estimates
  Mark> in the real world", the good the bad and ugly.

The above recommended patterns come after about 300-400 software
project estimations.  I worked for many dotcom-years at a professional
services firm where the expectation was always fixed-bid estimates,
both from internal account management teams and clients.  But people's
expectations can be changed.  Clients individually and on the whole
get smarter over time regarding how to manage this whole "software
thing".  You can't just out-right refuse to give something that looks
like a firm estimate, but you can change how people think about
estimates and expectations of what business/project approach will lead
to the lowest costs.

-- [EMAIL PROTECTED]

"Truth is a great flirt." -- Franz Liszt

Reply via email to