In the custom software development world, requirements change. That is a fact of life. Why pretend that there will be projects where requirements will be so rock solid that they will not change at all.
As the project progresses, the understanding of the business about the project matures. They will realize that not everything they thought initially would be the way they want to build it.
So that means software development teams need to make this a part of their planning process. But how? How can you predict something that is not known? How can you plan for unknowns?
Well it turns out that one does not really plan for unknowns. What you do is you plan often. Whenever there is a change in an external variable, you plan for it. And more important than that, you let your plan be known to your business so that they are constantly aware of the changes in the cost and timeline.
All the more detailed plans hold valid on for a short period of time. After which you have to plan again. Periodic planning is an imperative for any project size. There will always be tasks that are overlooked. There will always be tasks that are completed either behind or ahead of schedule.