In principle, at least for business applications, the middle ground is something like low code - data access, UI, user management, authentication, logging, auditing, ... all taken care of already, you make the data model and business logic. In practice this works up to a point, when you have requirements that do not fit the model or capabilities that the creators of the platform had in mind, when you have to start fi…
This might not catch all the surprise requirements, but it might catch the worst ones.
A sure way to get surprised is to do the opposite:
- don't talk to the people who use your software, but some middle-men
- just take the customers first idea as gospel and assume they disected the problem space themselves
- keep everything constrained and never let anybody get wild or crazy with ideas
- don't anticipate potential future requirements and don't let them influence your decisions ever
Of course those things don't come for free, but it is important to realize that the initial phase of a project is crucial also for the impression your shop will leave behind. If people feel they have been heared and had a chance to come to a shared understanding with you, they are less likely to view your software in an unfairly harsh light later on. They will remember this and will hire you for the next thing.