Ask for a counterexample,
not just an explanation.
Michal, I’d add one requirement to code ownership: explain a scenario where your fix would be wrong.
An explanation can be generated as easily as an implementation. A counterexample makes the assumptions testable.
Take duplicate payments. Disabling the submit button looks reasonable. But what happens if the server charges the customer and the response is lost? The user retries. The button guard cannot tell whether the first payment succeeded.
if (isSubmitting) return;
setIsSubmitting(true);
await submitPayment();
Now the engineering question becomes: how does the server recognize the same payment intent across retries? That requires a durable idempotency mechanism, not just a UI change.
The revealing review question isn’t “Does this work?” It’s “What sequence of events would make this look correct while still failing?”
That tests understanding much better than a polished explanation.