Sam, I’d like to propose an alternate idea:
- Estimate in the same way that you normally would (guess)
- Then, manage scope and priority aggressively to meet those estimates.
Time and cost always seem to be more important in the end than scope ever was. This is especially true when the project gets past the midway point because the original scope gets muddy. Nobody every seems to remember that plenty of things changed and were added, but the additional cost and missed delivery dates get remembered every time!
Readers might also like my take on the way many software dev shops like to operate (hope I don’t get fired by anyone):