I’m currently estimating the effort for a piece of software. With 20 years of experience under my belt, I don’t find estimating hard any longer. But back when I started out, I was terrified whenever I was asked to provide an estimate.
In most organizations, too much of the estimating is art and too little is science. Experienced developers can produce good, realistic estimates, but these are often treated as individual efforts and no organizational learning takes place.
For every estimate, you should capture the requirements and the estimate in an estimation database. This will allow less experienced colleagues to browse this database for something that looks like the task they are asked to estimate, and provide a reality check for their numbers.