Software development is unpredictable and that specifications and requirements will never be fully understood. When you are creating something new, regardless of the amount of similarity to what has been created before, it is impossible to be certain of all the needs and constraints. We can forecast with varying degrees of accuracy, and should caveat all forecasts with a degree of certainty, but we really cannot predict precisely all the functional and non-functional requirements.