Fair team splitting: snake draft vs pure random

Random, snake-draft and greedy team splits compared on real numbers, why straight drafts favour the first pick, and how to handle friends and rivals.

On this page

Splitting a class, a five-a-side group or a workshop into teams sounds trivial until someone says "that's not fair". There are two different kinds of fair: nobody chose the teams (pure chance) and the teams are even (balanced strength). They pull in different directions. This article compares the three methods in our random team generator on the same list of players, with numbers from 2,000 simulated splits, and covers the practical problems: odd numbers, friends, rivals and how to prove the draw was honest.

The test group

Twelve players with a skill rating from 3 to 9: An 8, Bình 6, Chi 9, Dũng 5, Em 7, Giang 4, Hà 8, Khoa 6, Lan 7, Minh 5, Nga 9, Phúc 3. The ratings add up to 77, so three teams of four cannot all have the same total; the best possible split has totals 26, 26 and 25, a difference of 1.

Pure random

Shuffle the names and deal them out. Every arrangement is equally likely, which is exactly what makes it fair in the first sense: nobody can claim the teams were stacked. The cost is balance. Over 2,000 random splits of the test group, the gap between the strongest and weakest team averaged 6.6 points, and in the worst split it was 16. One typical draw gave teams of 22, 28 and 27.

Random is the right choice when skill does not matter much, when there is no fair way to rate people (a mixed class, a party game), or when the appearance of fairness matters more than the score.

"Random" also has to mean random. A shuffle that picks positions with a simple remainder (random % n) makes some orders slightly more likely than others; ours draws from the browser's cryptographic generator and rejects the values that would cause that bias, as explained for the random name picker.

Straight draft: the first pick wins

The playground method has captains take turns: team 1, team 2, team 3, then team 1 again. With nine players rated 9 down to 1 and three teams, team 1 gets 9, 6 and 3 (18), team 2 gets 8, 5 and 2 (15), and team 3 gets 7, 4 and 1 (12). The team that picks first is ahead in every round, and the gap adds up: 6 points between first and last.

Snake draft

Reverse the order every round: 1, 2, 3, then 3, 2, 1, then 1, 2, 3. The team that picked last in one round picks first in the next. The same nine players give 9 + 4 + 3 = 16, 8 + 5 + 2 = 15 and 7 + 6 + 1 = 14: a gap of 2 instead of 6. On the twelve-player test group, snake draft reached the best possible split (25, 26, 26) in every one of the 2,000 runs; only the order of players with equal ratings changed.

The generator sorts players by rating, strongest first, with equal ratings in random order, so two people rated 8 do not always land in the same team.

Greedy

Greedy takes the players strongest first and gives each one to the team with the lowest total so far. It is what a careful organiser does by hand. On the test group it also found a gap of 1 every time; on other lists it can beat snake draft, especially with uneven ratings or teams of different sizes. Both are heuristics: finding the perfectly balanced split is a hard problem in general, but for groups of a few dozen people these two get within a point or two.

Odd numbers, friends and rivals

  • Uneven sizes. Thirteen people in three teams means one team of five. The generator makes sizes differ by at most one and, for balanced methods, the totals still come out close; you can compare averages if team sizes differ.
  • Keep together. Write "An + Bình" to keep two people together. The pair is placed first as one unit, so it can never be split, and its combined rating counts toward balance.
  • Keep apart. Write "Chi, Dũng" under keep apart. Every placement checks the rule. If the rules cannot all be met (three people kept apart into two teams), the generator tries other random orders and then reports which pair it could not separate, instead of silently ignoring it.

Proving it was fair

If people may question the split, turn on Repeatable and keep the seed. The same names, settings and seed always produce the same teams, so anyone can rerun it and check. Choose the seed before seeing the result (a date, a lesson number), or it stops proving anything.

Common mistakes

  • Letting captains choose in public. Straight drafts favour the first pick, and the last person chosen remembers it.
  • Using balanced methods with made-up ratings. If the numbers are guesses, the balance is a guess too. Random is more honest.
  • Re-rolling until you like the result. Then it is not random anymore; decide the method and accept the draw.
  • Forgetting the constraints are listed by name. A misspelled name in a keep-apart rule is reported as not on the list.
  • Balancing only total skill. A team with all the defenders is not balanced. For important matches, adjust by hand after the split.

To pick one person rather than make teams, the random name picker uses the same unbiased draw.

Tools mentioned in this article

Back to the blog