Code reviews guidelines
This guide describes some best practices we apply when doing code reviews.
How to perform a code review
Review all the code, line by line, and apply the checklist to all the reviewed code.
Test all the code: Check both that there are no exceptions and that the correct result is produced.
Check it correctly solves the issue it addresses. No more and no less.
Check the produced architecture:
It is simple enough, not over-engineered.
It is easy to understand.
It is easy to extend.
It is not trying to predict the future. It just fits the issue it is addressing.
Check if it has enough automatic tests.
It's useful to take an algorithmic approach when reviewing the code: take one line, apply the checklist, move the next, and repeat.
Testing the code
Testing the code while doing a review is not something that all companies do, mainly because it can be time consuming. At MarsBased we strongly think it is important to test the code when doing a review. However, take into account that depending on how critical / complex the code is and how difficult it is to test, testing should be less or more exhaustive.
It is a matter of analyzing the cost / benefit ratio and applying common sense to it (is it worth spending a lot of time testing it? it depends on how critical the code is).
Checklist
This is the main things you should be looking out for in the reviewed code:
Code additions: Is the new code used?
Code deletions:
Have all uses of the code been removed?
Can more now-unused code be removed?
Typos: Are there any typos in methods / classes / variables names, comments, literals and documentation?
Good practices: Is the code DRY, with short methods and small classes?
Code style: Does the code follow the MarsBased conventions and it's idiomatic according to the programming language?
I18n: Are all strings I18n-ized? (when doing a review for back-end code).
Background jobs: Are background jobs idempotent? (when doing a review for back-end code).
Naming: Do classes, methods and variable names use proper naming?
Database migrations: Do database migrations apply correct constraints that follow model validations? (when doing a review for back-end code).
Are changes to schema.rb correct and only related to this PR? (when doing a review for Rails code).
You might have other things that you usually check for. The key idea is that it's useful to have a written list with all those points and apply it consistently without having to think about it every time.
Comments in code reviews
When writing comments:
Use "we", not "you". The software engineer is not alone, you are a team.
Provide objective reasons that support the change. "Because I don't like it" is not a reason.
Provide an alternative or a sketch of how you would do it instead.
Don't write only negative comments, write also positive comments:
Positive comments increase motivation.
Positive comments encourage the software engineer to keep doing the right thing.
Example of a not constructive comment:
you made this too complex, simplify
Example of a constructive comment:
This can be simplified, we don't need to extract the numeric values for the status:
For assignment status we can directly do
where(status: %[preselected selected]).For appointment status we need to use
mergeotherwise will not work. Instead of.where(customer_jobs_appointments: { status: appointment_statuses_keys })we can do.merge(CustomerJobs::Appointment.where(status: %[warning ready])).Also with these changes we don't need the rubocop disable flag.
Last updated
