It also doesn't help that the bid/contract process is skewed to select the lowest bidder.
You can always forget to add some margin here or there, or fail to plan for problems that might pop up. It's easy to game the system because sunk costs make it nearly impossible to switch once you've started.