I used to be one of the three worst software development estimators in the world. Okay, I was probably *the* worst. I could not estimate the time or cost of a software development project to save my life. Then I learned about this thing called Function Points, and Function Point Analysis, and other common sense things, like the Law of Averages, and my estimating life is much, much better. I might even challenge someone to a contest one of these days.
The basic theory is that you use Function Points to determine the relative size of an application. Next, you start tracking important ratios on your projects, such as "Function Points developed per hour" and "Cost per Function Point". Do this over a short period of time, and very quickly you will be a good to great estimator.
I'll be talking about this more at the Borland Conference this year. I'll also have a 25+ page introduction to Function Point Analysis out here within the next 30 days. If you are involved in estimating software development projects I think you'll find it well worth your time.