In my legal life, I was used to churning out 'perfect' work. I would have trainees check documents thoroughly for typos and spelling errors, and we would be at pains to make sure the client was impressed with the document first time round.
This might work well for a legal document, where the number of possible permutations is quite limited. That is especially the case where you are working from a 'standard form', ie starting from a template, where the bulk of the work is done for you already and based on precedent.
But even if we talk about a simple 'add' and 'delete' function in a piece of software, the number of permutations is huge. For example, which browsers are people using to access the software? What happens if their internet connection drops halfway through? Do we need a feature that lets people copy and paste items? Do we need a multi-select item? Does the software work for screen-readers? Whereabouts in the list of items will the item be added: top or bottom?
There’s no right or wrong answer to any of these questions. But you can only answer them if you ask the people using the product. You can get a certain amount from asking people in the abstract, but in many situations you need to put something in front of people and let them use it before you get the answers you need.
All of this means that, for most products, you will only succeed if you have been through a process of trial and error. And there’s no such thing as a 'perfect' product. All you can do is keep improving it by putting it in front of people and seeing what happens.