Trocas de presentes falham de maneiras previsíveis. As duas mais comuns são a mesma: alguém acaba tirando a si mesmo e alguém acaba tirando a pessoa para quem já comprou um presente no ano passado.
Ambas têm solução, e a segunda só passa a ter solução se você avisar a ferramenta com antecedência.
O que a atribuição faz
O gerador de Amigo Secreto combina cada pessoa com exatamente uma outra. A combinação é aleatória, com duas restrições aplicadas automaticamente:

Ninguém tira a si mesmo. Isso é uma propriedade matemática — uma permutação sem pontos fixos é chamada de desarranjo, e há mais de uma maneira de construir um, que é o que a ferramenta faz.
Suas exclusões são respeitadas. Antes de gerar, você pode marcar pares que não devem acontecer: pessoas que moram juntas, um gestor e seu subordinado direto, duas pessoas que achariam aquilo constrangedor. O gerador tenta de novo até produzir uma atribuição que satisfaça todas elas.
Todo o resto é acaso. Esse é o ponto.
Configurando
Liste todos, um por linha. Use nomes completos — “Alex Chen” em vez de “Alex”, porque a ferramenta não consegue distinguir dois Alex e uma duplicata não é um par que alguém queira.
Adicione exclusões. Este é o passo que as pessoas pulam e é o que determina se o resultado será utilizável. Exclusões comuns: parceiros e cônjuges, familiares, as duas pessoas que sempre acabam comprando presentes idênticos uma para a outra, um gestor combinado com alguém que ele avalia.
Defina um orçamento, se houver um. O orçamento aparece nos resultados e nas mensagens copiadas — ele não afeta a combinação, o que vale saber caso você esperasse que afetasse.
Gere. Quando a ferramenta informa que não consegue satisfazer todas as exclusões, isso é um sinal real, não um erro para tentar de novo. Normalmente significa que as restrições encurralaram alguém — verifique se alguém excluiu todos os outros, o que torna qualquer combinação válida impossível.
Avisando as pessoas
Copiar bilhete produz uma mensagem curta para uma pessoa, com o recebedor e o orçamento. Copiar todos produz a lista completa.
Esta é a parte incômoda de todo o exercício: alguém precisa distribuir os resultados, e essa pessoa consegue ver todos os pares. Não há link privado por pessoa na ferramenta.
Isso é tranquilo se todos se conhecem e a graça está no sigilo depois. É um problema se o ponto é que um gestor não saiba quem tirou quem; nesse caso, envie uma mensagem privada para cada pessoa, ou conduza o sorteio sem revelar quem o operou.
Diga que as atribuições são definitivas. Esta é a coisa mais importante a declarar desde o início, porque no momento em que alguém não gosta do seu par, o impulso de rodar de novo é avassalador. Rodar de novo transforma um procedimento justo em uma busca por um resultado preferido, e todos conseguem ver isso acontecer.
Práticas que fazem funcionar
Faça as exclusões primeiro. Uma conversa de dez minutos sobre quem não pode ser combinado evita uma discussão em dezembro.
Anuncie as regras antes de gerar. Definitividade, orçamento, prazo para comprar e a data da troca.
Dê um prazo real. As pessoas compram presentes de última hora mal. Duas semanas costuma ser a resposta, e uma data declarada é o que faz a troca acontecer no dia em vez de escorregar.
Mantenha em segredo depois. A coisa toda funciona porque ninguém sabe. Se o par for anunciado publicamente no dia, a expectativa acaba e ninguém fica ansioso com isso.
Quando o aleatório é a escolha errada
Quando as relações pesam. Uma troca de presentes em família entre pessoas que não se dão bem não é ajudada pela aleatoriedade. Ela tira o seu controle sobre um par que importava.
Quando você quer recompensar ou agradecer alguém específico. Um sorteio não pode ser ajustado, e se você se pegar querendo ajustá-lo, você quer uma atribuição manual.
Para grupos pequenos que você consegue combinar bem à mão. Com quatro pessoas, todos veem todos os pares possíveis, incluindo o que você quer evitar. A ferramenta economiza os mesmos três segundos que você levaria para escrever à mão.
Quando as exclusões são impossíveis de satisfazer. Um grupo de três em que duas pessoas se excluem mutuamente não tem resposta válida. A ferramenta vai avisar; a resposta é reconsiderar a restrição, não continuar tentando.
Uma nota sobre a aleatoriedade
A combinação usa a fonte aleatória criptográfica do navegador em vez de Math.random(), que é determinística e pode, em princípio, ser reconstruída para antecipar resultados. Onde há restrições, o gerador embaralha e tenta de novo até encontrar um arranjo válido — até um número limitado de tentativas, depois do qual informa falha em vez de retornar algo que viole suas exclusões.
A página de justiça explica o mecanismo.
Vale saber sobre esse comportamento de tentativa: a combinação não é um único sorteio uniforme entre todos os arranjos válidos, porque tentar de novo favorece arranjos fáceis de satisfazer. Para uma troca de presentes isso é irrelevante — ninguém consegue distinguir entre os arranjos. Importaria para um sorteio com um prêmio em jogo, em que a abordagem justa é um único sorteio a partir do conjunto válido.
Conduzindo um
Anote as exclusões, gere e copie imediatamente os bilhetes em mensagens individuais. Depois diga a palavra “definitivo” em voz alta antes que alguém responda.
Pronto? Abra o gerador de Amigo Secreto e cole sua lista.