Estimates Are Not Deadlines
Stating the obvious, estimates are not deadlines, and buffers -- proper spacing between milestones -- are needed for good project management. In practice, this advice is lost, and the result is bad software.
Failure to implement buffers ignores the unexpected: people leave, requirements change, a show-stopping bug is found. Without buffers, one unexpected problem cascades to all the milestones downstream.
Some project managers play it "close to the vest." They really do have buffers in the schedule, keep them a secret, and hope the developers continue to work hard to meet the original deadlines. The hazard here is that the developers will make (unnecessary) compromises to meet them.
"Do we have time to add an extra field in the database record for faster lookups?"
"Wouldn't it be better to implement a server to assign unique sequence numbers?"
"Shouldn't we generalize this function so we can put it in our library?"
In each situation, the developers won't even broach the subject with management because they believe the deadline is looming, and will thus implement the ugliest and most expedient solution.
Project managers hiding buffers is a sign a project is in trouble. It also shows their lack of trust and their inability to communicate. I recently wrote about The Mythical Man-Month, a classic book that explores why software is so hard, and that the solution needs what these managers don't have: trust and communication. If more project managers read the book, we developers would see less Dr. Evil and more Austin Powers.