✨Today I Learned: The Subtle Art of Code Reviews 💡✨
Tags: programming, opensource, github, todayilearned
Published: 2022-11-20 08:14:07

Code reviewing is hard. The pull requests I reviewed were for the [My Photohub](https://github.com/humphd/my-photohub) project. 

Code reviewing for the first time in my life made me realize how difficult the task is. As a first-time code reviewer, I found myself staring at the code, pondering about what could be done to make it better. Feeling rather lost. I came up with some mediocre suggestions. Nothing too great. Nothing that I felt truly satisfied with suggesting. Then came [professor Dave](https://github.com/humphd) to do his code review on the same pull request I was reviewing. I just sat there astounded at the details he looked at and all that I missed. He suggested major things such as better programming logic, and minor things such as updating the project description. I could have suggested those minor issues too; a better project description, a better logo that goes with the project instead of the default React logo, and creating follow-up issues for certain things. Why did I overlook the obvious, which professor Dave so elegantly and effortlessly pointed out? 
Well, I was so fixated and overloaded with trying to find something big to suggest that my senses had completely shut down on the easy stuff. This made me realize just how much I need to practice reading other people's codes and thinking critically about them. Like attaining mastery in any skill, being a good code reviewer is a skill that takes time, patience, and practice. 

## Some code review best practices 🌱

[This is a great article](https://google.github.io/eng-practices/review/reviewer/looking-for.html) I came across while researching for the code review best practices. 
It beautifully elaborates on how design, functionality, complexity, testing, naming, commenting, style, consistency, documentation, and context are all important components of a code review. 

## Time. Attention. Communication ⏳‼️

A good review takes time and attention. It requires us to think critically about the programming logic. For beginners, it can feel overwhelming to stare at the code someone else wrote to suggest something meaningful. There is a fear of being wrong. A fear of offending the person writing the code. I know, because I felt all those. However, in open-source development, it is always important to remain polite and respectful in communication while giving constructive feedback. We can sometimes disagree with the review but if we do so, we should communicate that politely. 

It is also important to keep an open mind while giving and receiving feedback. It is through this exchange of ideas, and feedback that we can improve over time. 

If you have some coding experience and spend enough time and give undivided attention to the code, it is almost always possible to come up with suggestions for improvement. 


## Start small 🐌 🌱

If you are a beginner, start small and learn from others. I learned a lot of important things by reading professor Dave's reviews. Then I realized that it is by seeing how more experienced people review code, that I can get better. I made some notes of the things I learned by reading a lot of his code reviews on GitHub. I turned those things into some sort of a checklist:  

- Ask specific questions regarding certain lines of code, if unclear.
- Look for unused dependencies and ways to optimize package.json.
- Look at the code from the context of the entire codebase.
- Leave some words of encouragement to point out what the developer is doing right! 
- Focus on functionality and compatibility.
- Look for clear names and proper naming conventions. 
- When reviewing README or CONTRIBUTING.md files, look for consistency in style, formatting, spelling, and grammar. 
- Make sure that the design and UI look good. 
- Ensure that the unit tests are appropriately designed for the code. 
- Make sure that the code conforms to a certain style guide provided.


## My code reviews 

Here are the code reviews I did over the last few days. Click on the links to view the entire review :) 

While suggesting changes, I also provided the rationale behind suggesting the changes and asked for the developer's opinion. This kept communication professional and polite.

### [Review 1](https://github.com/humphd/my-photohub/pull/10#pullrequestreview-1179813555)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w5uepmc7n5hj9f5g0iu2.png)



### [Review 2](https://github.com/humphd/my-photohub/pull/9#pullrequestreview-1179806293)


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i5xukg5svkpbh7lhaoy6.png)




## In `linters` we trust 🚀

Automated code checkers and static tool analyzers can help a reviewer save a lot of time looking for silly typos or stylistic errors. Linters and scanners act like spell and grammar checks for a code. With the headache of formatting and other stylistic issues out of the way, the reviewer can focus on the actual logic of the code. As code reviewers, it is essential to make use of the automated code checkers available to save time and sanity. 


## Closing thoughts on productivity 💭

If you are someone like me who loves reading about psychology and productivity, [this is a great article](https://jamesclear.com/focus#Focus%20on%20the%20Process)!