How to Run a Fair Random Draw
When a result matters to people, such as picking a presenter, drawing a prize, or deciding an order, the real question is not just 'was it random?' but 'was it fair?'. A pick can look random and still quietly favor certain items if the method is wrong.
Random and fair are different
Random means the outcome cannot be predicted. Fair means every item has the intended probability under a clear rule. A draw can be unpredictable yet structurally favor one item, which makes it random but not fair.
So a fair draw needs two things: a good source of randomness, and an algorithm that spreads that randomness across the items without bias. If either part is off, results drift to one side.
The common mistake: sort(() => Math.random() - 0.5)
This popular one-liner does not shuffle evenly. Sorting assumes comparisons are consistent, but a random comparison breaks that assumption, so some items tend to stay near their original position. Certain slots end up favoring the items that started there.
The bias grows as the list gets longer. It is fine for a throwaway shuffle, but not for order or prize draws where the outcome carries weight.
The right way: Fisher-Yates shuffle
The Fisher-Yates shuffle walks the list from the end, swapping each item with a random position inside the not-yet-shuffled range. It is mathematically guaranteed to produce every ordering with equal probability, and it stays unbiased no matter how many items you have.
The random picker, order picker, and team maker on this site all use Fisher-Yates, so no name becomes structurally more likely than another.
Fairness when weights are involved
Equal probability is not the only kind of fair. When prize tiers differ, or you want more entries to raise someone's odds, you intentionally assign weights. What matters then is that the actual odds match the weights you set.
The random picker and roulette accept a name*number format, and the real selection probability follows that ratio. A probability preview is shown as well, so you can make the rule transparent to everyone.
FAQ
Can I trust results generated in the browser?
For everyday decisions, yes. For draws with money or legal weight, add a separate verification step or run the draw in front of participants.
What happens if I enter the same name twice?
It is treated as two separate entries, so its chance of being picked doubles. Clean the input to avoid duplicates, or use weights when you actually want higher odds.