\u003C/a>\u003C/figure>\n\u003C!-- /wp:image -->\n\n\u003C!-- wp:heading -->\n\u003Ch2>\u003Cstrong>Approving vs Requesting Changes\u003C/strong>\u003C/h2>\n\u003C!-- /wp:heading -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Once a reviewer completes their review, they can either mark it approved, block the review with change requests, or not set a specific status, leaving it in a “not yet approved” state. How reviewers use the approve and request changes statuses is telling of the code reviews.\u003Cbr>\u003Cbr>\u003Cstrong>Good code reviews\u003C/strong> don't approve changes while there are open-ended questions. However, they make it clear which questions or comments are non-blocking or unimportant, marking them distinctively. They are explicit when approving a change - e.g. adding a thumbs up comment like “looks good!”. Some places use acronyms like\u003Ca href=\"https://www.urbandictionary.com/define.php?term=LGTM\"> LGTM\u003C/a>—these also work, but be aware that newcomers could misinterpret these insider acronyms for something else. Good code reviews are equally explicit when they are requesting a follow-up, using the code review tool or team convention to communicate this.\u003Cbr>\u003Cbr>\u003Cstrong>Better code reviews\u003C/strong> are firm on the principle but flexible on the practice: sometimes, certain comments are addressed by the author with a separate, follow-up code change. For changes that are more urgent than others, reviewers try to make themselves available for quicker reviews.\u003Cbr>\u003Cbr>\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:heading -->\n\u003Ch2>\u003Cstrong>From Code Reviews to Talking to Each Other\u003C/strong>\u003C/h2>\n\u003C!-- /wp:heading -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Code reviews are usually done asynchronously and in writing through a code review tool. This is usually out of convenience, to enable remote code reviews, and to allow multiple people to review the same code change. But when is it time to stop using the tool—however good it might be—and start talking face to face about the code?\u003Cbr>\u003Cbr>\u003Cstrong>Good code reviews\u003C/strong> leave as many comments and questions as are needed. If the revision does not address all of them, they will note those as well. When the conversation gets into a long back-and-forth, reviewers will try to switch to talking to the author in-person instead of burning more time using the code review tool.\u003Cbr>\u003Cbr>\u003Cstrong>Better code reviews\u003C/strong> will proactively reach out to the person making the change after they do a first pass on the code and have lots of comments and questions. These people have learned that they save a lot of time, misunderstandings, and hard feelings this way. The fact that there are many comments on the code indicates that there is likely some misunderstanding on either side. These kinds of misunderstandings are easier identified and resolved by talking things through.\u003Cbr>\u003Cbr>\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:heading -->\n\u003Ch2>\u003Cstrong>Nitpicks\u003C/strong>\u003C/h2>\n\u003C!-- /wp:heading -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Nitpicks are are unimportant comments, where the code could be merged without even addressing these. These could be things like variable declarations being in alphabetical order, unit tests following a certain structure, or brackets being on the same line.\u003Cbr>\u003Cbr>\u003Cstrong>Good code reviews\u003C/strong> make it clear when changes are unimportant nitpicks. They usually mark comments like these distinctively, adding the \u003Cem>“nit:”\u003C/em> prefix to them. Too many of these can become frustrating and take the attention away from the more important parts of the review, so reviewers aim to not go overboard with these.\u003Cbr>\u003Cbr>\u003Cstrong>Better code reviews\u003C/strong> realize that too many nitpicks are a sign of lack of tooling or a lack of standards. Reviewers who come across these frequently will look at solving this problem outside the code review process. For example, many of the common nitpick comments can be solved via automated linting. Those that cannot can usually be resolved by the team agreeing to certain standards and following them—perhaps even automating them, eventually.\u003Cbr>\u003Cbr>\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:heading -->\n\u003Ch2>\u003Cstrong>Code Reviews for New Joiners\u003C/strong>\u003C/h2>\n\u003C!-- /wp:heading -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Starting at a new company is overwhelming for most people. The codebase is new, the style of programming is different than before, and people review your code very differently. So should code reviews be gentler for new starters, to get them used to the new environment, or should they keep the bar just as high, as it is for everyone else?\u003Cbr>\u003Cbr>\u003Cstrong>Good code reviews\u003C/strong> use the same quality bar and approach for everyone, regardless of their job title, level or when they joined the company. Following the above, code reviews have a kind tone, request changes where needed, and will reach out to talk to reviewers when they have many comments.\u003Cbr>\u003Cbr>\u003Cstrong>Better code reviews\u003C/strong> pay additional attention to making the first few reviews for new joiners a great experience. Reviewers are empathetic to the fact that the recent joiner might not be aware of all the coding guidelines and might be unfamiliar with parts of the code. These reviews put additional effort into explaining alternative approaches and pointing to guides. They are also very positive in tone, celebrating the first few changes to the codebase that the author is suggesting.\u003Cbr>\u003Cbr>\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:heading -->\n\u003Ch2>\u003Cstrong>Cross-Office, Cross-Time Zone Reviews\u003C/strong>\u003C/h2>\n\u003C!-- /wp:heading -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Code reviews get more difficult when reviewers are not in the same location. They are especially challenging when reviewers are sitting in very different time zones. I have had my fair share of these reviews over the years, modifying code owned by teams in the US and Asia, while being based in Europe.\u003Cbr>\u003Cbr>\u003Cstrong>Good code reviews\u003C/strong> account for the time zone difference when they can. Reviewers aim to review the code in the overlapping working hours between offices. For reviews with many comments, reviewers will offer to chat directly or do a video call to talk through changes.\u003Cbr>\u003Cbr>\u003Cstrong>Better code reviews\u003C/strong> notice when code reviews repeatedly run into timezone issues and look for a systemic solution, outside the code review framework. Let's say a team from Europe is frequently changing a service that triggers code reviews from the US-based owner of this service. The system-level question is why these changes are happening so frequently. Are the changes done in the right codebase or should another system be changed? Will the frequency of changes be the same or go down over time? Assuming the changes are done in the right codebase and the frequency will not go down, can the cross-office dependency be broken in some way? Solutions to these kinds of problems are often not simple and could involve refactoring, creating of new services/interfaces or tooling improvements. But solving dependencies like this will make the life of both teams easier and their progress more efficient for the long term, meaning the return on investment is often quite impressive.\u003Cbr>\u003Cbr>\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:heading -->\n\u003Ch2>\u003Cstrong>Organizational Support\u003C/strong>\u003C/h2>\n\u003C!-- /wp:heading -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>The way companies and their engineering organizations approach code reviews is a big element of how efficient they can be. Organizations that view them as unimportant and trivial end up investing little in making reviews easier. In cultures like this, it might be tempting to just do away with code reviews entirely. Engineers advocating for doing better code reviews might feel isolated, without support from above and eventually give up. The result is an organization where problems continue to repeat and compound upon themselves. \u003Cbr>\u003Cbr>\u003Cstrong>Organizations with good code reviews\u003C/strong> ensure that all engineers take part in the code review process—even those that might be working on solo projects. They encourage raising the quality bar, and teams facilitate healthy discussions on code review approaches both at the team and org level. These companies often have code review guides for larger codebases that engineers initiated and wrote. Organizations like this recognise that code reviews take up a good chunk of engineers' time. Many of these companies will add code reviews as expectations to the developer job competencies, expecting senior engineers to spend a larger chunk of their time reviewing the code of others.\u003Cbr>\u003Cbr>\u003Cstrong>Organizations with better code reviews\u003C/strong> have hard rules around no code making it to production without a code review—just as business logic changes don't make it to production without automated tests. These organizations have learned that the cost of cutting corners is not worth it; instead, they have processes for expedited reviews for urgent cases. These organizations invest in developer productivity, including working continually to develop more efficient code reviews and tooling improvements. Helpful engineering executives don't need convincing on the benefits of code reviews and other engineering best practices. Instead, they support initiatives on better tooling or more efficient code review processes that come from teams. \u003Cbr>\u003Cbr>When people come across reviews that feel hostile, they feel they can speak up and have support all-round to resolve the issue. Senior engineers and managers consider code reviews that are not up to the bar just as much of an issue as sloppy code or poor behavior. Both engineers and engineering managers feel empowered to improve how code reviews are done.\u003Cbr>\u003Cbr>\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:heading -->\n\u003Ch2>\u003Cstrong>Start With Good, Make it Better\u003C/strong>\u003C/h2>\n\u003C!-- /wp:heading -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cstrong>Good code reviews \u003C/strong>already have lots of good effort going into them. They do a thorough review of the change itself, avoid being opinionated with the tone of comments, and make nitpicks clear. They maintain a consistent bar, regardless of who is requesting the review and try to make cross-time zone reviews less painful by paying additional attention to these. Organizations that have good reviews ensure that every developer regularly receives and does code reviews. This is already a high bar—but if you get here, don’t stop. Code reviews are one of the best ways to improve your skills, mentor others, and learn how to be a more efficient communicator. \u003Cbr>\u003Cbr>\u003Cstrong>Get to better code reviews \u003C/strong>by continuously improving on the details, but also start looking at changes at a high level as well. Be empathetic in the tone of comments and think of ways outside the code review process to eliminate frequent nitpicks. Make code reviews especially welcoming for new starters and look for systemic solutions for painful cross-time zone reviews. Organizations that are forward-looking encourage investing in tooling and process improvements to make code reviews better, reaping more of the benefits.\u003Cbr>\u003Cbr>-------\u003Cbr>\u003Cbr>\u003Cem>Gergely is currently an engineering lead in Amsterdam. This blog post originally appeared on Gergely’s blog, \u003C/em>\u003Ca href=\"https://blog.pragmaticengineer.com/\">\u003Cem>The Pragmatic Engineer\u003C/em>\u003C/a>\u003Cem>. If you’d like to read more from Gergely, you can subscribe to \u003C/em>\u003Ca href=\"https://blog.pragmaticengineer.com/newsletter/\">\u003Cem>his monthly newsletter\u003C/em>\u003C/a>\u003Cem> for his articles on engineering, tech leadership and distributed systems. If you would like to contribute articles to the Stack Overflow blog, send an email to pitches@stackoverflow.com. \u003C/em>\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:block {\"ref\":13752} /-->","html","2019-09-30T14:21:57.000Z",{"current":496},"how-to-make-good-code-reviews-better",[498,506,508,513,518,523,525,530,535],{"_createdAt":499,"_id":500,"_rev":501,"_type":502,"_updatedAt":499,"slug":503,"title":505},"2023-05-23T16:43:21Z","wp-tagcat-bulletin","9HpbCsT2tq0xwozQfkc4ih","blogTag",{"current":504},"bulletin","Bulletin",{"_createdAt":499,"_id":500,"_rev":501,"_type":502,"_updatedAt":499,"slug":507,"title":505},{"current":504},{"_createdAt":499,"_id":509,"_rev":501,"_type":502,"_updatedAt":499,"slug":510,"title":512},"wp-tagcat-code-for-a-living",{"current":511},"code-for-a-living","Code for a Living",{"_createdAt":499,"_id":514,"_rev":501,"_type":502,"_updatedAt":499,"slug":515,"title":517},"wp-tagcat-code-review",{"current":516},"code-review","code review",{"_createdAt":499,"_id":519,"_rev":501,"_type":502,"_updatedAt":499,"slug":520,"title":522},"wp-tagcat-engineering",{"current":521},"engineering","Engineering",{"_createdAt":499,"_id":519,"_rev":501,"_type":502,"_updatedAt":499,"slug":524,"title":522},{"current":521},{"_createdAt":499,"_id":526,"_rev":501,"_type":502,"_updatedAt":499,"slug":527,"title":529},"wp-tagcat-software-development",{"current":528},"software-development","software development",{"_createdAt":499,"_id":531,"_rev":501,"_type":502,"_updatedAt":499,"slug":532,"title":534},"wp-tagcat-stackoverflow",{"current":533},"stackoverflow","Stackoverflow",{"_createdAt":499,"_id":536,"_rev":537,"_type":502,"_updatedAt":538,"slug":539,"title":541},"wp-tagcat-productivity","ZP7627ZkmfDRGke9Ig9IwB","2024-01-23T15:01:58Z",{"current":540},"productivity","Productivity","How to Make Good Code Reviews Better",[544,550,556,561],{"_id":545,"publishedAt":546,"slug":547,"sponsored":12,"title":549},"9fd8968d-abaa-4253-b14b-3129c6e85408","2025-09-10T17:00:00.000Z",{"_type":10,"current":548},"ai-vs-gen-z","AI vs Gen Z: How AI has changed the career pathway for junior developers",{"_id":551,"publishedAt":552,"slug":553,"sponsored":12,"title":555},"1d082483-6dc6-424b-8b09-9c84b54779da","2025-09-02T17:00:00.000Z",{"_type":10,"current":554},"back-to-school-developers-at-stack-overflow-have-some-advice-for-you","Back to school? Developers at Stack Overflow have some advice for you",{"_id":557,"publishedAt":552,"slug":558,"sponsored":12,"title":560},"5cd91820-9515-4be5-87ae-e919fd443c18",{"_type":10,"current":559},"getting-started-on-stack-overflow-a-step-by-step-guide-for-students","Getting started on Stack Overflow: a step-by-step guide for students",{"_id":562,"publishedAt":552,"slug":563,"sponsored":12,"title":565},"614538a9-c352-4024-adf1-fa44a9f911b6",{"_type":10,"current":564},"stack-overflow-is-helping-you-learn-to-code-with-new-resources","Stack Overflow is helping you learn to code with new resources",{"count":567,"lastTimestamp":568},23,"2024-03-11T20:18:16Z",["Reactive",570],{"$sarticleModal":571},false,["Set"],["ShallowReactive",574],{"sanity-Z5nRyKGD1rWcYuSUohrsWkU2pSVHQhsPnMcWHYJJSok":-1,"sanity-comment-wp-post-13132-1758129937491":-1},"/2019/09/30/how-to-make-good-code-reviews-better"]