I'm sure this is going to be linked all over the place, but it's a very interesting read. It's a reposting by David Gristwood, of an original article by Jim McCarthy (a manager on the MS Visual C++ team).
Particularly interesting and useful, it delves into the topic of "slippage", but treats it as a necessary and good part of the process. Slippage becomes a transition from the unknown to the less unknown - as you know more, the timeline and estimates become more refined and realistic, often leading to slippage.
Perhaps the most important point is the first one: Don't know what you don't know. If you don't know something, state that, and come up with a plan to fill the gap. Incorrectly assuming knowledge, or worse - faking it - will lead to disaster.
UPDATE: Just came across a link to The Ten Commandments of Egoless Programming - more good stuff. Even comes with a handy downloadable (if butt ugly) stone tablet for printing.
I think I've been risking breaking Commandment #9: Don't be "the guy in the room" - going to have to work harder to prevent that. :-(