The legend has it that in a big corporate meeting the youngest guy in the team stood up against the Senior Director of their business unit over his belief that "Every software is unique and you can't estimate its delivery dates. If you do then if you don't meet the dates, its disheartening for someone working day and night to achieve the goal. So why estimate in the first place? Just press the pedal to the floor and deliver at the earliest.".
But there was a mutual consensus at the end of the meeting that over a period of time, on an average, similar software solutions take similar time to code. Which could only mean that it was possible...
The Director was kind and patient. He later met this junior guy and appreciated the honesty and asked if this junior guy would some day want to lead a team of developers?
The junior guy said "Yes." promptly.
The director then asked if the stakeholders would be eager to know how long the team would be able to deliver the software.
The junior guy said "Yes." again.
The director asked - "So, how would you learn to estimate?"
"By experience" was the reply.
The director asked - "How would you gain that experience?"
This hit the junior guy in the face. Both he and the director knew what he was thinking.
The answer was - "By estimating regularly".
The junior guy had learnt early in his career a very important lesson which later helped him give estimates better that Dilbert.