Paired programming with an odd number of students
An extension I've come to appreciate is one where you have a "driver", "observer/navigator" and "keeper". 

This last role might be considerably more difficult, depending on the lab. The idea is to have someone who keeps track of the design. This means that at the start of the lab, the students should all (or just those who start as keepers) dedicate a bit of time to read up online about design patterns in the language they are using. It's important "not to delve too deep". Just a general idea of what "design patterns" means.

Then they begin working. Two out of the three work in usual pair-programming workflow. The third keeps in mind the design of the program. As with regular pair-programming, the students should switch roles every now and then. In the case of a trio, they should obviously cycle.

If not all students in the lab are in trios, then an additional for the navigator is to remember design patterns. It should be made clear that it's not their primary task, but that it would definitely help with debugging and maintaining the code.

The added bonus of this extension of pair programming is that students are exposed to design patterns. Seeing as they can sometimes be a complicated matter, starting to tackle them is better done sooner than later.

I have found this solution quite useful in labs about subjects in OOP (the more complex the system, the more important SOLID principles become).