Perform code reviews like they are a conversation. Don’t use them as an approval process. It’s a process for incremental course correction, mentorship and learning. It’s a friendly sanity check on the code, not a judgment on the person who submitted the code. It’s an opportunity to understand what your teammate wanted to accomplish and to be understood yourself, in your attempt to make things better and share responsibility. Reach out in person if you think that there are basic, fundamental problems with the code you’re reviewing to prevent you and others from overwhelming the code review with corrections and negative comments.