- Providing boilerplate/template code for common use cases
- Explaining what code is doing and how it works
- Refactoring/updating code when given specific requirements
- Providing alternative ways of doing things that you might not have thought of yourself
YMMV; every project is different so you might not have occasion to use all of these at the same time.