You need people to get the project done, but people are eventually error prone. Just like in government there are "separation of powers", software projects can also benefit from such separation. As a general rule, for production code, the same person should not both:
- Code and Review - The reviewer checks the code quality (It's too easy to give a free pass, or have bias, to your own code)
- Develop and Test - The tester checks the developer. (The dev already thinks their code works fine)
- Build and Deploy - Having someone else deploy what the developer built encourages easier and objective deployment, and helps invalidate the it works on my machine.