Dois Clientes, Uma Unidade: As Falhas Que Só Aparecem ao Mesmo Tempo
Estoque vendido duas vezes, horário agendado em dobro, cobrança repetida: falhas de concorrência não aparecem nos testes e só são evitadas com decisões de projeto.
Renan Montanari
Engenheiro de Software Full-Stack
Dois clientes abriram sua loja no mesmo minuto. Tinha uma unidade no estoque. Os dois compraram.
Do lado de quem comprou, nada de estranho aconteceu: os dois viram "disponível", os dois clicaram, os dois receberam a confirmação. Do seu lado existe um pedido a mais do que produto, e alguém vai receber um telefonema constrangedor.
A Falha Que Não Aparece no Teste
Esse tipo de falha tem uma característica cruel: ela não aparece quando você testa.
Testar é uma pessoa por vez, clicando devagar, olhando a tela. O problema só existe quando duas coisas acontecem juntas e o sistema confere o estoque antes de a outra venda ter sido registrada.
A Mesma Armadilha em Outros Lugares
Ela aparece em lugares que parecem inofensivos:
- duas pessoas agendando o mesmo horário;
- o botão clicado duas vezes por impaciência, gerando duas cobranças;
- o número do pedido que se repetiu porque dois processos pegaram o mesmo "último número";
- o saldo que ficou errado porque duas operações leram o mesmo valor antes de qualquer uma escrever.
Nada disso é erro de digitação. São consequências de assumir que as coisas acontecem em fila, quando na verdade acontecem ao mesmo tempo.
Decisão de Projeto, Não de Ferramenta
Evitar é decisão de projeto, não de ferramenta:
- deixar o banco de dados garantir a regra em vez de confiar na checagem feita antes;
- tornar a operação repetível sem duplicar efeito;
- desenhar o fluxo sabendo que ele vai rodar em paralelo.
Custa pouco quando é pensado no começo. Custa caro quando é descoberto por um cliente.
Já Aconteceu no Seu Sistema?
Se você já recebeu aquele telefonema constrangedor, ou quer garantir que nunca vai receber, dá para revisar os fluxos críticos antes que um cliente encontre o problema por você.
Falar comigo