RE: Have you worked in a Peer or Mob Programming environment?
At my current company we do a ton of peer programming, a lot of the developer culture is built around that (there's even special pairing stations set up around our desks to make it easier to do). We don't really have any structure in place like you describe with switching off roles. Instead it's a bit more informal process where we decide to pair when it makes sense, and we talk/discuss the code at hand as needed.
I've found it to be very useful not only as a way of improving the quality/organization of our code, but also very useful as a method of learning. I've learned a bunch of things from other devs at the company this way, and I've also taught a bit too. Personally I think pair programming is a very effective practice, though obviously it can't be the only thing you do :)
Yep fully agree with all your points. I was in a team of 3, we would split off or pair up and discuss around the whiteboard with all of us.
So right about learning new stuff. You get more insight into how people think when you work that tight