I have heard two opposite views on this:
- It should be done by the people who know the overall architecture but doesn't know the intricacies of that particular component (i.e. people from same project but with different component). The argument here they don't have any preconceived notions about how things work and may be able to take a fresh view of the code.
- It should be done by the people who know in and out of that component. This is because they know the history of the code like why particular piece of code is written in a certain way and may be better handled in anticipating the problem. But since they know all about the component, they may assume certain things.
I guess it would be ideal to have both types of people. But if I assume that due to some reason I can have only one type of review, which one may be more productive? What is your experience about it?