There is a big myth that goes around from time to time in the software industry. People say that they can finish projects on time and on budget. This normally does not happen. Software development is a creative endeavor so putting a timeframe against how long a task takes is not a science. In addition, humans are pretty bad estimators. For example, when was the last time you were late to a meeting? That is due to the fact that your estimation was off or something unexpected happened in between.
We combat this by flexing scope and we let the customer choose the scope. Customers usually have a budget and a deadline so the only thing left to do is to flex scope. The customers tell us what the most important features are and we implement those first. This allows the customer to release the minimal viable product usually under budget.