Which people are you talking to?
I've found that I didn't become great at making estimates until I had been programming for 20 years.
For years 21-30 I've been great at making estimates.
If you're working with customers hiring programmers from India with only a few years of programming experience or you're working with companies who practice age discrimination, then you're going to find that nothing ever gets done on time.
If you're working with experienced programmers, then your experience will be the opposite. Being able to accurately estimate how long your work is going to take I think is the last skill that a programmer acquires, and in my experience it takes decades of experience.
The biggest folly of inexperienced programmers is that every programming job is that everything is either a 15 minute hack or will take a few days at most. If this sounds familiar then you're not hiring the right programmers, or you're being penny wise and pound foolish in your hiring.