In our development team, we divide developers into back-end and front-end teams. To develop a feature for a website, the 2 teams have to work in parallel. We starts by analyzing the requirement, talk about all possible business cases that should be handled, and have agreement on APIs interface specification that regards the solution for all cases. The back-end team then build the mock version of the APIs according to the specs (using Spring Boot). The front-end uses the mock APIs to develop the UI (using VueJs).
During the development, when the developers focus deeply into the real code, they always find more business cases that the team has never talked about. Meetings are arranged to discussed about this, and often the API interface specification will have to be changed. The developers always have to rework, and the project is delayed.
This problem reoccurs everytime in our development cycles. The management challenges us to find a solution so that all the business cases have been considered during specification design and no cases should be popped up during implementation that affects the specification.
As a developer, I list the cases as much as I can think in the design phase, but they are never completely covered all the cases. Only way I can discover the missing cases is to write the code.
Is it common (and okay) to have specification change during implementation phases?
If so, how do you handle the change to minimize the impact that causes project to delay?
If not, could you please suggest what might be wrong for development process in general that obstructs development team to have clear and complete specification before implementing.