A perfect model of your problem exists, you will just never be able to find it and that should be OK.
I believe the moment you have typed your code, it’s already becoming obsolete and it’s already wrong, because of your understanding of the problem will only expand with time, and since every problem is an ocean of complexity, you are pretty much hopeless in trying to code your way to enlightenment.
My approach: do OK code when solving the problem for the first time, fast, kinda dirty, see how it performs, see if it solves the problem, with a bit of time and patience you will see patterns solidify. The catch is: you have to clean it up, with the same energy and fervour you wrote it the first time.
I find this technique so invigorating though, instead of sloshing through endless discussions, I get the satisfaction of solving the problem first, instead of wasting my time on a potential dead-end. Afterwards, I get the pleasure of polishing the solution to a shiny state.
Now if I could only convince my team to see it that way…