You've nailed it - I am an inexperienced software engineer but when I lay down the architecture of a particular problem, think about it in excrutiating detail upfront; nothing goes according to the plan. Reality hits you like a brick and new things emerge when actually writing code. Even ambiguity in requirements surface when actually implementing the logic in code. So no matter how good the requirements are, theyll definitely need additional refinement. Software Engineering is really hard I've recently discovered and I value your decades long perspective.
100% - and even the best developer may not understand all of a user's needs until they get their hands on a prototype. We should always expect to learn and pivot as we learn more about users.
Exactly. I've never seen a (non-trivial) requirements specification that doesn't contain holes, contradictions, imprecision, or requirements that will be dropped or altered during development.