Software development is an exercise in refinement. As we develop software, we make decisions that affect the outcome of the project. For example, we decide our project needs to store data. After investigation, we determine a traditional database would make the most sense for this project. We choose MySQL. Next, we create the tables we believe the software needs, and then the columns to represent the data. Each decision brings the project closer to its final form.
Not having the answers to these decisions is why it is so difficult to create software estimates. We develop estimates made on assumptions, but those assumptions are invalidated by the decisions made along the way.
If the estimate assumed a document-oriented database like MongoDB was appropriate, it is invalid as soon as we decide to use a traditional database. Once this decision occurs, it is up to the project manager to support the change and trigger a re-estimation. Good project managers will be able to navigate a project to successful completion through reasonable project control. As long as the project is about the right size and meets most of the requirements, it “meets the estimate.”