Adjusting to the requirement for perfection is, I think, the most difficult part of learning to program.
But I will argue that knowing complete product requirements up front is a quite rare exception, not the norm.
Design work doesn't just satisfy requirements, it elicits them.