I agree with the pair programming idea, however, you can also switch in a different person for a second code review on commit.
To keep it streamlined, the presenter should be ready to explain:
- The problem/requirement that created the need for the code.
- An overview of how that code was implemented.
- How other systems are known to interact with the areas the changes touched.
- Any technical problems that were encountered and how they were overcome, including reasoning behind any decisions made.
- Any conventions that will have to be used from then on because of the changes.
All of this should be explained up front, before looking at code. Then they should start walking through the code and review it all again.
I think this process works for a few reasons:
- It forces the presenter to think through or write down everything s/he did, which is good for seeing if what you did makes sense.
- It helps the presenter get better at organizing knowledge, which improves several technical and non-technical skills.
- It gives the reviewer time to think about the problem itself, separate from the code.
- The code then annotates the ideas for the reviewer instead of creating them, which means s/he can spend more brain power thinking about whether or not the changes were correct instead of thinking about whether the for loop is terminated correctly.