What "pick from list" is good for
It's the simplest tool in the world and yet it's used every day in offices, classrooms, homes and online communities:
- Drawing winners: in a Discord community or a WhatsApp group, paste the names, draw one.
- Deciding what to eat: 10 dishes, pick 1.
- Assigning tasks: 5 people, 5 tasks, shuffle and each takes one.
- Forming groups: 30 people, you want 5 groups of 6. Shuffle and split.
- Picking a movie/book/podcast: your 50-title watchlist, pick one and start.
- Statistical sampling: from 1000 customers, pull 50 at random for a survey.
How it works internally
With "no repeats" on, we apply the Fisher-Yates shuffle algorithm:
for (let i = arr.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[arr[i], arr[j]] = [arr[j], arr[i]];
}
Every possible permutation has exactly the same probability of appearing. It's
the industry-standard algorithm since 1938 (Ronald Fisher and Frank Yates, hence
the name); every shuffle in serious libraries uses it.
The naive shuffle bias
Many people implement shuffle like this:
arr.sort(() => Math.random() - 0.5). Incorrect:
it produces biased permutations because sort doesn't expect a
comparator that returns random values. On large arrays certain elements end up
closer to the front than others. If fairness matters (raffles, selection
algorithms), use Fisher-Yates.
Best practices for trustworthy raffles
- Share the list before the draw so everyone can verify their name was on it.
- Post a screenshot of the result in the group or channel where the draw happened.
- Run the draw live (stream, Zoom). Eliminates doubts.
- If there are physical prizes, consider a platform with verifiable timestamp or notary presence. A homemade draw, no matter how well-intentioned, has no legal weight.
Useful variants
The generator supports two modes: pick N items (sample) and shuffle the whole list (return everything in random order). The second mode is ideal for assigning presentation order, pairing people up (shuffle, take in pairs) or reordering a playlist.
Cases where it doesn't work well
- Lists with meaningful duplicates: if you have "John, John, Mary", John has double odds. Want equal-by-name? Dedupe first.
- Weighted selection: if "John" should have more odds than "Mary" (raffles with different ticket counts), this isn't the tool. Multiply entries in the list or use weighted selection.