If it's not deterministic you can never fully trust it. In a deterministic abstraction I don't need to audit the lower levels.
Writing code results in a much better understanding of the code than reviewing it
In fact I would say that in large complex codebases, in order to develop the same understanding of what the code is doing might actually take longer than writing it from scratch would have