Skip to content

Methodology

How Pick chooses

Every result on Pick comes from the same small set of carefully tested building blocks. Here's exactly what they do.

No account. No tracking. Your lists stay in your browser.

1. The random source

Pick uses your browser's cryptographically secure random number generator, crypto.getRandomValues(), which is seeded by your operating system. It is the same source browsers use for security purposes, and its output can't be predicted from previous results. Math.random is never used to decide anything.

Numbers are read in batches of 32-bit values. Each result is generated in your browser at the moment you press the button; nothing is precomputed or fetched.

2. Unbiased whole numbers (rejection sampling)

Turning a random 32-bit value into “a number from 1 to 6” by taking the remainder would make some faces very slightly more likely, because 2³² isn't a multiple of 6. This is called modulo bias.

Pick avoids it with rejection sampling: it only accepts raw values below the largest multiple of the range size, and draws again otherwise. Every outcome then corresponds to exactly the same number of raw values, so every outcome is exactly equally likely. On average fewer than two draws are needed. Ranges larger than 2³² values use 53-bit draws in the same way.

3. Shuffling (Fisher–Yates)

Lists are shuffled with the Fisher–Yates algorithm: walk from the last item to the first, swapping each with a uniformly chosen item at or before it. With unbiased random numbers, every one of the n! possible orders is equally likely. Pick's tests check this exhaustively for small lists — all 24 orders of 4 items appear exactly once across all 24 possible random sequences.

4. Picking several (sampling without replacement)

Picking several distinct winners uses a partial Fisher–Yates shuffle: only the first k positions are shuffled. Every set of k winners — and every order of them — is equally likely, and nobody can be picked twice. When repeats are allowed (Multiple Winner Picker with “unique” off), each winner is an independent draw from the full list.

In the raffle, each draw is uniform over the tickets still in the draw; once someone wins, all of their tickets are removed, so a person can win at most once.

5. Weighted entries

A weight is a positive number from 0.01 to 1,000 (rounded to two decimal places). Pick converts weights into whole “tickets” (weight × 100) and draws one ticket uniformly from the total, so an entry's chance is exactly its weight divided by the sum of all weights — with no floating-point rounding in the selection itself. Zero, negative, non-numeric and over-limit weights are rejected with a message, and those lines are left out until they're fixed.

The wheel draws each segment with a size proportional to its weight, and the Chances panel lists every entry's exact probability. When several weighted winners are drawn, each draw is weighted among the entries not yet chosen.

6. Teams and groups

People are shuffled, then dealt into the requested number of groups so that sizes differ by at most one. When the count doesn't divide evenly, the groups that receive an extra person are chosen at random too. “People per group” makes the smallest number of groups that keeps every group at or under the limit. Balancing is by headcount only — Pick knows nothing about skill and doesn't pretend to.

7. The animation never decides

When you spin, the order of events is always:

  1. the winner is chosen with the secure methods above;
  2. Pick calculates the final angle that puts that winner's segment under the pointer (several full turns, landing somewhere inside the segment away from its edges);
  3. the wheel eases to exactly that angle and stops.

No physics, timing or frame rate is involved in the outcome, so a slow device, a dropped frame or reduced motion can't change it. Name pickers and the raffle work the same way: the names that flicker past are decoration; the result was already chosen. With reduced motion, results appear immediately.

8. Numbers, coins and dice

  • Random numbers: unbiased over every integer from minimum to maximum inclusive. Decimals pick evenly from the grid of values with the chosen decimal places.
  • Unique numbers: sampled without replacement; for very large ranges, repeats are redrawn, which keeps every set equally likely.
  • Coin: one unbiased random bit per flip. Dice: each die is an independent unbiased draw from 1 to its sides.

9. Limits and honest caveats

  • Lists: up to 2,000 entries for pickers and wheels, 10,000 lines for Shuffle List, 100 characters per entry. Above 120 entries the wheel hides labels; the list still names everyone.
  • Random numbers: up to 10,000 per generation; a range can hold at most 2⁵³ values.
  • Duplicates count as separate entries (and so get extra chances) unless you remove them; the raffle asks first.
  • Randomness means streaks happen. A fair picker can choose the same person twice in a row unless you remove winners.
  • There is no seeded or reproducible mode in Phase 1 — results can't be replayed or predicted.
  • Pick is for everyday decisions, classrooms and fun giveaways. It isn't a certified random number generator for lotteries, gambling or regulated draws.

10. How it's tested

The algorithms take an injectable random source, so unit tests feed exact sequences and check exact results — for example that a weight-2 entry receives exactly twice as many of the possible outcomes as a weight-1 entry, that team sizes never differ by more than one across hundreds of cases, and that the boundary value just below the rejection limit is accepted while the one at it is redrawn. No test depends on luck. Browser tests then confirm the wheel always stops on the announced winner.

Found something that looks wrong? Email bsamjoel@gmail.com.