Yes, I agree with this fully.
But what’s interesting now is that the degree of determinism is increasing, as the community as a whole keeps refining the individual parts. The importance of spec becomes more obvious when the feedback loop speeds up, from spec to running software. That already made a huge difference in how many think about spec. There are multiple GitHub projects that are "spec only," where the goal is to spec it out in such a way that the software one wants is the inevitable result, if you just input the spec into a AI/harnes.
And the AI gets better, and the harnesses get better. So at some point we probably live in a reality where we can say: "If you spec out the software you want in this specific way, and add in these guidelines in AGENTS.md, and use X AI with Y harness, you almost certainly get identical software out the other end".
And yes "almost" is faaaaar from "always identical output". But the fact that we are even in the game of increasing determinism, in the Spec->AI->Software flow, is just mind-blowingly cool to me.
That is a detour from my main point, though, that on one specific level of analysis (can we move up one level of abstraction and lose some detail understanding, but gain more in productivity), AI, compiler, software frameworks, are all examples of the answer being: Yes.
And I do agree that we need to mitigate the damage that people with less experience can do because they don't know what pitfalls to avoid. But I would rather we focus on fixing that by improving the AI and harness, than the people that just keep saying that "AI is bad". In the same way I would rather make a tractor safer to use, not just complain that it's dangerous because someone drove it into the lake. Because the goal is not to make the perfect deterministic output from a compiler. that's just a step towards the real goal, which should, in my mind, be to help other people solve problems and do useful stuff. In the same way that the goal of the tractor is not to just plow the field, but to plow the field as fast and efficiently as possible so we can feed ourselves.
Wall of text because this topic has been bothering me for a while now, and Im using this thread to sort out my own thinking on it.
> you almost certainly get identical software out the other end
I think you'd get a set of convergent solutions, where the actual implementations might be very different.
This also explains why you might want to keep more artifacts than just the design. There might be different performance overall, or interesting properties/side effects on axes that were not defined in the spec.
Possibly -at the limit- a theoretically 'perfect' spec would be 100% deterministic (eg. by defining the final object code down to the bit) but that wouldn't be a useful operation I don't think?
The other approach to getting bit-perfect output would be to aim for deterministic model runs. But this has numerous issues including making the model less "creative" or "smart" and anyway might not be the thing you actually want (to wit: a working artifact) .