The Reassuring Review
It’s time for yet another insight regarding reviews. You probably know this is one of my favorite topics, so this should come as no surprise.
In my previous posts on reviews, I described different types of reviews, or more accurately different motivations for reviews.
In Are Your Code Reviews Effective? I described reviews designed merely for identifying functional defects. In Sharing Project Knowledge With Your Peers I discussed a common motivation for performing reviews: spreading knowledge regarding the project (its design, code, tests, etc.) among team members.
Truth be told: both these motivations could be served better if we change the goal of the review and define it as a mentoring platform. Such professional reviews will improve the product (by improving the reviewed artifact) and the skills of the developer at the same time. By doing so, we create a better setting for fewer functional defects and better project-knowledge transfer among developers.
But there is another type of review — one that is more “dangerous” the types mentioned above. Why? Because the motivation for a review of this type is often hidden. It’s the reassuring review.
Reassuring reviews are mainly for the reviewer. They are “designed” to reassure the reviewer that things are in control and to ensure that the reviewee is on the right track. There’s nothing really bad with this motivation as-is, but in a reassuring review this is often the sole motivation.
Let’s analyze some of the symptoms of reassuring reviews:
1. The review is always conducted by the reviewee’s manager
Many novice development leaders (and some experienced ones) find it hard to trust some developers in their team. Well, it’s not that they don’t trust their team – they just feel an urge to constantly check what their developers are doing. When reviews are done in this particular mindset the developer will immediately feel he is not trusted.
I’m not suggesting, of course, that a manager should not be involved in the work of his developer. But when the relationship between the two is based on reassuring reviews, the developer feels he is constantly being scrutinized. Such feeling is bound to prevent the developer from learning, building experience, and improving himself.
Professional reviews, on the other hand, are not necessarily conducted by the development leader. If the development leader is the one conducting the reviews, he does so when acting as a professional mentor. This fact places the review activity in the right context — helping the developer improve the product and gain additional experience. The purpose of the review is not to reassure the manager that the developer is doing a fine job. The purpose is working together to create improvement.
When the focus of the review activity is not the reviewer, it is much easier for the development leader to accept other approaches for conducting reviews. The notion of a professional reviewer, who is not necessarily part of the development team, starts to make sense.
2. Only novice developers are being reviewed
Many development leaders are tempted to review only the work of novice developers. This tendency goes hand-in-hand with the trust issue. After all, trusting the work of a novice developer is much harder. This is a sure sign of reassuring reviews.
If you think about reviews as a platform for personal improvement, the implication of such a practice is that most developers have finished their learning process. But in real life, professional learning is a process that never ends. Part of being a professional is to constantly challenge your work. And what better way is there to do that than having it reviewed.
3. Smaller segments are reviewed as time goes by
Since the sole purpose of reassuring reviews is to reassure the reviewer, it is only natural that if everything goes as planned the reviewer will find them less necessary as time goes by. The fact that the center of reassuring reviews is the reviewer makes this activity unnecessary after awhile.
If, however, we think of reviews as designed for the benefit of the developer, and if we accept the fact that professionalism is a process of continuous improvement, there is no sense in stopping the review activity. If the review activity is a platform for discussing one’s work and learning from it, it should not lose its momentum.
***
Reassuring reviews are extremely illusive. They create the facade of a good process. They increase the confidence of the reviewer, who is usually the direct manager of the reviewee, thus creating the illusion of improvement.
To be really effective reviews must focus on the developer. They should be designed to create ongoing improvement — to challenge his work in the positive sense. This challenge is the key to constantly gaining new knowledge and building experience. And that’s what being a professional is all about.












August 19th, 2006 at 8:58 pm
After getting past the point of introducing code reviews, I do have a slight fear that they will seem less neccessary because developers are rarely making basic mistakes anymore. Every once in a while we don’t find much in a particular review and of course the value question pops up even if no one verbalizes it.
I’ve managed to avoid the first two points so far. Everyone on the team reviews everyone’s code and I’m on some of the reviews and not others. As everyone becomes more accustomed to it I plan to drop off almost all the reviews.
August 20th, 2006 at 1:28 am
Hi Ed,
The question is are you utilizing your reviews to their full extent. You say that basic mistakes are rare. That’s great. Now, how about reviewing more subtle issues? How about reviewing design decisions made by developers? How about trying to improve the quality of unit tests by reviewing them?
I truly believe almost every developer can benefit from systematic reviews as long as their goal is to create improvement and increase professionalism.
Lidor
August 21st, 2006 at 6:47 am
Great insights, Lidor. As a frequent reader of Ed’s blog, I gather that he has been introducing agile practices in his organization in an incremental way. Seems to me code reviews could be a great tool for advancing that effort. You suggest “reviewing more subtle issues.” Let’s offer a more specific recommendation.
TDD is one of the most beneficial development practices people are using these days. The third step in the TDD cycle - refactoring - seems to create challenges (there’s that word again) for many developers. Now that Ed’s teams are past the point of making a lot of basic errors, what about using code reviews to mentor developers on exactlyhow to recognize when code needs refactoring, and then just what they need to do with the code to clean it up?
I suggest Joshua Kerievsky’s book, Refactoring to Patterns, for some practical guidance. Code reviews could be an effective tool to help developers apply those practices. It’s not something you can pick up in five minutes of casual reading. The repeated sanity checks and reinforcement provided by code reviews seem like a great way to build those skills in an organization.
As the development staff continues to improve its knowledge and effectiveness, continue raising the bar at code reviews to help them reach the next level. There shouldn’t be a time when code reviews become obsolete, as long as you’re targeting the right level of knowlege for the particular team.