If you just keep track of how long features take and who's working on them (like a bug/feature tracking system), a seat of the pants estimate based on complexity (i.e. this feature is 1/2 as complex, twice as complex) times the previous baseline data is surprisingly accurate and in general much better than if people actually try and figure out based on first principles. Basically people just ignore the base rate historical data for how long sw development tasks take, or don't know it. The other thing to avoid is telling someone a deadline because you will immediately induce an error based on the anchoring effect. Once you have a historical performance based estimate, then use that baseline (or anchor) to figure out what is practical for the project in question.
Note: You have to keep track of things for 2-3 years to start before this works, which is why I suspect most people don't do it.