# Code Review Process This document outlines the code review process for the LCFS project. Effective code reviews are crucial for maintaining code quality, sharing knowledge, and fostering a collaborative development environment. This addresses requirements for ticket #2410. ## 1. Purpose of Code Reviews * **Improve Code Quality**: Catch bugs, logical errors, and deviations from coding standards. * **Ensure Readability & Maintainability**: Verify that code is clear, understandable, and easy to maintain. * **Knowledge Sharing**: Help team members learn about different parts of the codebase and new techniques. * **Mentorship**: Provide opportunities for junior developers to learn from senior developers, and vice-versa. * **Collective Ownership**: Foster a sense of shared responsibility for the codebase. * **Validate Against Requirements**: Ensure the implemented solution meets the intended requirements of the feature or bug fix. ## 2. Before Requesting a Review (Author's Responsibility) Before submitting a Pull Request (PR) for review, the author should: 1. **Self-Review**: Review your own code first. Check for typos, obvious errors, and adherence to style guides. 2. **Test Thoroughly**: Ensure all [Testing Procedures](Testing-Procedures.md) have been followed: * Relevant unit and integration tests are written and pass. * E2E tests (if applicable to the changes) pass. * Manual testing of the feature/fix has been performed. 3. **Ensure CI Checks Pass**: All automated checks in the CI pipeline (linters, formatters, automated tests, builds) must be passing. 4. **Clear PR Description**: Write a clear and concise PR description: * Explain *what* changes were made and *why*. * Link to the relevant issue(s) in the issue tracker. * Provide clear steps for reviewers to test or verify the changes. * Include screenshots or GIFs for UI changes. 5. **Keep PRs Focused and Manageable**: * Submit small, focused PRs where possible. Large PRs are difficult and time-consuming to review effectively. * If a feature is large, break it down into smaller, logical PRs. 6. **Check for Debugging Code**: Remove any temporary debugging code (e.g., `console.log`, `print` statements not intended for production). ## 3. The Review Process (Reviewer's Responsibility) Reviewers should aim to provide constructive, respectful, and timely feedback. ### 3.1. Understanding the Changes * Read the PR description and linked issues to understand the context and purpose of the changes. * Try to understand the overall approach before diving into line-by-line details. ### 3.2. Key Areas to Review * **Functionality**: Does the code work as intended and meet the requirements? * If possible, pull down the branch and test the changes locally. * **Correctness**: Are there any logical errors, race conditions, or edge cases missed? * **Readability & Simplicity**: Is the code clear, concise, and easy to understand? Could it be simpler? * **Maintainability**: Is the code well-structured? Will it be easy to modify or debug in the future? * **Adherence to Standards**: Does the code follow [Coding Standards and Conventions](Coding-Standards-and-Conventions.md)? * **Testing**: Are there sufficient tests for the changes? Do the tests cover important scenarios and edge cases? ([Testing Procedures](Testing-Procedures.md)) * **Security**: Are there any potential security vulnerabilities introduced? (See [Security Guidelines for Developers](Security-Guidelines-for-Developers.md)) * **Performance**: Are there any obvious performance bottlenecks or inefficiencies? * **Documentation**: Is new code adequately commented? Is any related documentation (e.g., READMEs, other wiki pages) updated if necessary? * **Naming**: Are variables, functions, and classes named clearly and appropriately? * **Error Handling**: Is error handling robust and user-friendly (if applicable)? ### 3.3. Providing Feedback * **Be Specific**: Refer to specific lines of code or files. * **Be Constructive**: Offer suggestions for improvement rather than just criticism. * **Explain Your Reasoning**: If you suggest a change, explain why it's better. * **Distinguish Importance**: Differentiate between critical issues, important suggestions, and minor nits (e.g., use prefixes like "Nitpick:" or "Suggestion:"). * **Use GitHub's Review Tools**: Add comments directly to the code in the PR. Use "Request changes," "Approve," or "Comment" appropriately. * **Be Timely**: Aim to review PRs within a reasonable timeframe (e.g., 1-2 business days, as per team agreement). ## 4. After Receiving Feedback (Author's Responsibility) * **Acknowledge Feedback**: Respond to comments, indicating whether you agree or want to discuss further. * **Make Necessary Changes**: Address the feedback by making code changes, pushing new commits to the same PR branch. * **Clarify if Needed**: If you disagree with a suggestion or don't understand it, discuss it respectfully with the reviewer. * **Re-request Review**: Once changes are made, notify the reviewer(s) that the PR is ready for another look (GitHub often does this automatically when you push to the PR branch). ## 5. Approval and Merging * **Approval**: Typically, at least one approval (or as per team policy) is required before a PR can be merged. * **CI Checks**: All CI checks must be passing. * **Merging**: Once approved and checks pass, the PR can be merged into the target branch (e.g., `main` or `develop`). * Refer to [Git Workflow and Branching](Git-Workflow-and-Branching.md#3-pull-request-pr-process) for preferred merge strategies (e.g., squash and merge). * **Delete Branch**: The feature branch should be deleted after the PR is merged. ## 6. Number of Reviewers * **Action**: Define the team's policy on the number of reviewers required (e.g., one for most PRs, two for critical changes). --- *A positive and collaborative code review culture is key to a healthy and productive development team. Treat reviews as a learning opportunity for everyone involved.*