(^100) 97 Things Every Programmer Should Know
Learn to Estimate
Giovanni Asproni
AS A PROGRAMMER, you need to be able to provide estimates to your man-
agers, colleagues, and users for the tasks you need to perform, so that they
will have a reasonably accurate idea of the time, costs, technology, and other
resources needed to achieve their goals.
To be able to estimate well, it is obviously important to learn some estimation
techniques. First of all, however, it is fundamental to learn what estimates are,
and what they should be used for—as strange as it may seem, many developers
and managers don’t really know this.
The following exchange between a project manager and a programmer is not
atypical:
Project Manager: Can you give me an estimate of the time necessary to
develop feature xyz?
Programmer: One month.
Project Manager: That’s far too long! We’ve only got one week.
Programmer: I need at least three.
Project Manager: I can give you two at most.
Programmer: Deal!
The programmer, at the end, comes up with an “estimate” that matches what
is acceptable for the manager. But since it is seen to be the programmer’s esti-
mate, the manager will hold the programmer accountable to it. To understand
what is wrong with this conversation, we need three definitions—estimate,
target, and commitment: