This question has been asked before - previous replies here on HN include:
brg: Because software development is an act of invention. While
experience and education often tell us that something is
possible to accomplish, the route to the end is unknown.
The metaphor Michael Wolfe provides is good. But software
scheduling isn't so much about diversions and stumbles as
it is about the trials of invention and artisanship.[0]
zoowar: It doesn't matter what estimate software developers
make, program management sets arbitrary release dates.[1]
(Typos fixed)
More than one person here referred to Michael Wolfe's answer.
And for reference, here are some of the submissions:
https://news.ycombinator.com/item?id=6033335
https://news.ycombinator.com/item?id=6028623
https://news.ycombinator.com/item?id=6024765
https://news.ycombinator.com/item?id=3808866
https://news.ycombinator.com/item?id=3743048
https://news.ycombinator.com/item?id=3598325
https://news.ycombinator.com/item?id=3588950
https://news.ycombinator.com/item?id=3535100
https://news.ycombinator.com/item?id=3530928
https://news.ycombinator.com/item?id=3528809
https://news.ycombinator.com/item?id=3527970
https://news.ycombinator.com/item?id=3521393
https://news.ycombinator.com/item?id=3520585
----
[0] https://news.ycombinator.com/item?id=3535010
[1] https://news.ycombinator.com/item?id=3743088