Try to estimate the time to do each small task, sum up, then multiply by 2 (test, client interaction, integration...)
You can get better at that factor. Keep a backlog of
your estimates and the actual time you actually needed.
This way, you can adjust the multiplication factor for
future estimates. The factor will vary with many influences, including working environment, project scope,
growing experience, business domain, quality requirements,
and so on ad infinitum. Still, you will get much better
estimates by recording your past performance, and extrapolating from that by way of an adjusted multiplication
factor.
Christian Lemburg
Brainbench MVP for Perl
http://www.brainbench.com