This question being one of the trickiest questions to answer. Especially when its about software you are working on.
I have been working on a mobile app since about 6 months now. There is API to be built and also the UI of the app. Laravel and React Native being my tool of choice. This is the first time I am using these tools for such a large scale project.
I have been developing software since more than 10 years now. I have come to terms with scope of work being an ever changing document. As you start to use / build the software, you realise you missed adding that one feature or did not think about how the UI would handle X scenario.
Ever changing scope of work although does not help with setting a fixed launch date. More features mean more edge cases, bugs, UI updates you did not estimate for before.
It’s also easy to loose focus/motivation if the software is not launched within a month or two of you starting to work on it. Loosing interest in work also leads to features now taking longer than expected to finish.
It’s important to have a launch date. A milestone, you are working towards. When the scope of work changes, look at the list of work which remains to be done and remove items which are no longer as important as the new feature/ bug being considered.
With most software now being hosted on the web, its easier to add features / fix non critical bugs after the initial release.
Always have a launch date for the initial release. Helps you focus and it’s good for morale.