The day you implement the first edge case to your prototype you basically commit to using it forever or spending a lot of money to replace it.
Heard it so many times.
Experienced developers in a domain can sometimes anticipate the issues, but experience only comes from failing.
The real answer is allowing some budget to fix things and then fixing them as you go along.