I teach several courses for computer science undergrads, including algorithms, programming and game development. In all my courses there are weekly homework assignments. I encourage my students to do the assignments in teams of 2 or 3, both to practice team-work and to learn from each other's ideas. Most of them indeed submit in teams. I have learned from my students that, in many teams, there are "dummy members" - team members that just write their name on the page without spending any work. The other team members are OK witih it, since it does not cost them anything - they do the assignment anyway, so they do not mind helping a friend. Additionally, these "dummy members" sometimes help them out in other courses.
I thought of several ways to prevent this "free riding". One is to require students to present their homework in front of the class. The "dummy members" will probably fail this presentation. The problem is that, in a large class, it takes a lot of time and it is logistically complicated. It also puts some students into too much mental stress.
Now I have thought of a new idea. In every weekly assignment, there will be 7-8 different questions to choose from; each team of n students will have to choose and solve n+1 questions. So a lone student will have to solve 2 questions, a pair will have to solve 3 questions, etc.
On one hand, the number of questions per student decreases with n. Therefore, if all team members share the work equally, they have an incentive to form large teams.
On the other hand, the total number of questions increases with n. Therefore, a dummy member is no longer a "free" rider - he/she costs the team by adding to their work load, so they have no incentive to let him/her write the name without working.
What do you think of this scheme? What other ways are there to encourage teamwork while discouraging freeriding?
EDIT: the number of registered students is about 40-60 per class, though only about 10-20 come to class - the rest prefer to learn from home.