With optimization functions, the general process is pick a point, iterate until a local maximum, pick a new point, iterate until a local maximum, and repeat until you have an answer you're comfortable with. You might run out of time, or evaluate enough of the space that you're confident you've found an anawer.
When you apply the same idea to iterating on a product, or an engineering problem, the end result of your iteration depends on you choosing a good starting point. that's where experience comes in - you don't start all the way at the beginning, you start at the place where you know you can iterate to higher maximum. You've already had those repeat failures in the past.
A slightly silly but less abstract example. Let's say im brought in to a company to help solve the problem that the developers can't work on the project together because they can't share code.
_A_ starting point is a network drive, and you can iterate on that with file locks and faster networks, but you hit a local maximum. You then decide to use a database or something, and eventually you reinvent CVS.
Meanwhile, an experienced developer will skip all of that and start with git, and iterate on things like code review, merge pipelines.
Iteration is still key.