Question: I have 3 levels of users in my Team Foundation Server:

1. **Programmer**: A code reviewer must review their code and they cannot check in their own code
2. **Professional Programmer**: Their code doesn't need to be reviewed but a copy of their code should be automatically sent to a code reviewer
3. **Code Reviewer**: Their code doesn't need to be reviewed and can be checked in directly

How can i implement this ?

Answer: 
One approach would be to use Branches and Alerts. For example...

* Senior programmers would work directly on your "main" branch so they can check code into the live codebase.
* Junior programmers would work on the "RequiresReview" branch, and then the code reviewers would review their check-ins and merge them into Main only when they are satisfied with the code.

TFS can send email Alerts for various events, so the code reviewers could just subscribe to the check-in events to know when code has been checked into Main (by a Senior programmer) or needs to be reviewed (has been checked into RequiresReview by a Junior Programmer)

The use of branches in this way would mean that you would have to merge in both directions (merge junior's checkins across to Main, and merge senior's checkins back into RequiresReview)

Another approach for Junior Programmers is to use ShelveSets instead of another branch. In this approach, Juniors would not check in their code, but would simply move it into a shelveset and then email the code reviewer to request that their shelveset is reviewed and checked in for them. This avoids the need for merging code from Main back into RequiresReview - the juniors would be working "on" the Main branch, but their checkins would be "gated" via the shelveset.

There are also some 3rd party tools you can purchase to manage code review processes for you in a much more integrated manner. A web search should help you find these sort of tools.

**edit**
*Please note that Visual Studio 2012 and 2013 now include integrated support for code reviews (essentially a proper user interface on top of the shelveset idea above), so upgrading from 2010 may be a better option than my suggested workarounds above.*
+1 Jason
one of the good 3rd party is team review

<http://teamreview.codeplex.com/>