All abstraction layers are predictable and repeatable when used correctly.
You specify something in the language of the abstraction, and get a result that is precisely understood by the rules and requirements of the abstraction.
Only those who programmed by trial and error before AI do not see a difference. That's because they treated their compilers as mysterious AI, and must massaged their programs into working. In other words, they were already accustomed to a kind of prompt engineering.