I’ve found it helpful to have a model write a detailed architecture and implementation proposal, which I then review and iterate on.

From there it splits out each phase into three parts: implementation, code review, and iteration.

After each part, I do a code review and iteration.

If asked, the proposal is broken down into small, logical chunks so code review is pretty quick. It can only stray so far off track.

I treat it like a strong mid-level engineer who is learning to ship iteratively.

I play Claude and Codex against each other

Codex is pretty good at finding complex bugs in the code, but Claude is better at getting stuff working