Voltar ao índice
04Trabalho

Bolão de Futebol

Palpites, apuração e ranking

Meu papel
Desenvolvedor full stack
Cliente
Catsuc Labs
Setor
Produto de consumo · web
Status
Em produção

Código proprietário. Sistema privado de cliente — o repositório não é público.

Números

apito

trava do palpite

Prazo verificado no servidor — nunca no relógio do cliente.

100%

apuração recalculável

Pontuação é função pura do resultado, então correção é reprocessamento.

A

Contexto

Bolão entre amigos sempre existiu em planilha e grupo de mensagem. O problema nunca foi calcular — foi confiar: quem palpitou antes do jogo, quem mudou depois, e por que o ranking mudou de um dia para o outro.

B

O problema

Três coisas que parecem detalhe e não são: o palpite tem que travar no início do jogo de forma inegociável; a regra de pontuação varia por campeonato e não pode estar espalhada pelo código; e resultado oficial pode ser corrigido — então a apuração precisa poder rodar de novo sem virar bagunça.

C

A abordagem

O prazo é do servidor. O cliente esconde o formulário por cortesia, mas quem recusa o palpite atrasado é a rota — relógio de cliente é sugestão, não autoridade. A pontuação virou função pura de (palpite, resultado, regra do campeonato), então apurar de novo é seguro por construção: se um resultado é corrigido, reprocessa e o ranking se refaz sem estado sujo pelo caminho.

D

Módulos

01Rodadas e jogos

Campeonatos

Estrutura do torneio, com a regra de pontuação atrelada ao campeonato em vez de fixa no código.

02Com prazo

Palpites

Registro e edição até o início do jogo. Depois disso, a rota recusa — e o participante vê exatamente por quê.

03Determinística

Apuração

Roda sobre o resultado oficial e pode rodar de novo. Correção de resultado é reprocessamento, não remendo.

04Com desempate

Ranking

Classificação com critério de desempate explícito, para que dois participantes empatados tenham ordem estável.

E

As partes difíceis

O relógio do cliente mente

Esconder o formulário quando o jogo começa é UX. Recusar o palpite atrasado é integridade — e só o servidor pode fazer isso. Num bolão, um palpite aceito depois do apito não é bug de borda: é a razão para ninguém mais confiar no ranking.

Regra de pontuação como dado

Cada campeonato pontua diferente. Espalhar isso em condicional pelo código garante divergência na primeira mudança. Tratar a regra como configuração do campeonato e a apuração como função pura tornou o recálculo trivial — o que salvou quando resultado oficial foi corrigido.

F

O que é meu

  • Modelagem de campeonatos, rodadas, jogos e palpites
  • Trava de prazo no servidor e as mensagens que explicam a recusa
  • Motor de apuração determinístico e reprocessável
  • Ranking com desempate e as telas de participação
G

Resultado

O bolão saiu da planilha e do print no grupo. O prazo é o mesmo para todos, o ranking se explica, e correção de resultado deixou de ser uma discussão para virar um reprocessamento.

O que eu levei

  1. 01Prazo é regra de servidor. Qualquer coisa validada só no cliente não é validada.
  2. 02Cálculo determinístico e reprocessável vale mais que cálculo rápido.
  3. 03Em produto competitivo, o ranking precisa ser explicável — senão a discussão vira suporte.

Stack