"Testou o botão e publicou: os 4 testes que ninguém faz e que derrubam o app na primeira semana"
"Conta nova, celular no 4G, dois usuários ao mesmo tempo, 45,90 com vírgula: as quatro condições em que o cliente chega e o seu teste nunca passa."
"Simplesmente existem tantos por menores que ninguém conta."
Escreveu um brasileiro que não é programador, num fórum, depois de duas semanas tentando montar um sistema com IA. Relato de uma pessoa, não estatística. E os "por menores" de teste têm um detalhe cruel: nenhum aparece quando quem testa é você.
Você testa com a sua conta, cheia de dado, no Wi-Fi de casa, sozinho, digitando do jeito que o computador gosta. O cliente chega sem dado nenhum, no 4G, junto com outro cliente, e digita "45,90". São quatro condições, e o seu teste não passa por nenhuma delas. Não é descuido: elas não existem na mesa onde você constrói.
As seis entradas maldosas cobrem o que a pessoa digita. Este checklist cobre em que condição ela chega.
1. Conta nova, do zero
Como: crie uma conta com um e-mail que nunca entrou no app e passe por todas as telas antes de cadastrar qualquer coisa.
Deveria: cada tela vazia dizer o próximo passo. "Você ainda não tem pedidos. Crie o primeiro."
Costuma: tela branca, erro, ou um "NaN" no painel (sigla em inglês pra "não é um número", o que aparece quando o app tenta tirar a média de zero pedidos). A sua conta nunca mostra isso, porque tem dado desde o primeiro dia.
Pedido: "Para cada tela, mostre o que aparece quando o usuário não tem nenhum registro. Nenhum número pode aparecer como NaN ou vazio; troque por uma mensagem com o próximo passo."
O e-mail de confirmação que não chega pra quem não é do projeto é outro defeito da conta nova, e está aqui.
2. Celular no 4G
A TIC Domicílios 2025, pesquisa do Cetic.br (o centro de estudos do comitê que cuida da internet no Brasil), mediu que 65% dos usuários de internet no país acessam só pelo celular, sem computador. Na classe C são 67%; nas classes D e E, 87%. Cuidado com o que o número não diz: ele mede o aparelho, não a rede, e muita gente está no Wi-Fi de casa. Mas diz o principal: o seu cliente não está no seu notebook.
Como: no Chrome do computador, aperte F12 (abre as ferramentas de desenvolvedor), vá na aba Network (rede) e, no menu de velocidade, escolha Slow 4G (4G lento). Faça o fluxo principal do app. Melhor ainda: celular de verdade, sem Wi-Fi.
Deveria: todo botão que espera resposta ficar travado e dizer "enviando…".
Costuma: a tela fica parada uns segundos sem sinal nenhum, o cliente aperta de novo, e o pedido sai duplo.
Pedido: "Todo botão que envia dado deve ficar desabilitado e mostrar 'enviando…' até a resposta chegar. Se falhar ou passar de 15 segundos, diga que não foi salvo e deixe tentar de novo sem perder o que foi digitado."
3. Dois usuários ao mesmo tempo
Não é o teste das duas contas, que confere quem vê o quê. Aqui as duas pessoas disputam a mesma coisa.
Como: uma janela normal e uma anônima (ou dois celulares), duas contas. Os dois abrem a mesma coisa escassa: o último horário, a última unidade do estoque. Conte "três, dois, um" e confirmem juntos.
Deveria: um consegue; o outro recebe "esse horário acabou de ser ocupado".
Costuma: os dois conseguem. O app perguntou "está livre?" pros dois antes de qualquer um gravar, e você descobre quando as duas clientes chegam no mesmo horário.
A tela não resolve isso; quem resolve é o banco de dados. O PostgreSQL, o banco por trás do Supabase, tem a restrição de unicidade, que segundo a documentação "garante que o dado de uma coluna, ou de um grupo de colunas, é único entre todas as linhas da tabela". Com ela, o segundo agendamento no mesmo horário é recusado, não importa quantas telas tentem juntas.
Pedido: "Garanta no banco de dados, com uma restrição de unicidade, que não existam dois agendamentos do mesmo profissional no mesmo horário. Quando o banco recusar, mostre 'esse horário acabou de ser ocupado' em vez de erro. Depois me diga como confiro com duas contas."
4. Dado com acento e vírgula
Como: no campo de valor, digite 45,90. Depois 1.234,56. Abra o registro de novo e leia o que ficou. Na busca, procure joao por um cliente cadastrado como "João".
Deveria: gravar 45,90 e 1.234,56 exatos, e a busca achar o João.
Costuma: gravar 45. Não é azar. A função que muito código JavaScript usa pra transformar texto em número, a parseFloat, segundo a referência oficial da Mozilla, ao achar um caractere inválido "devolve o número representado até ali, ignorando esse caractere e todos os seguintes". Pra ela, a vírgula é inválida. 45,90 vira 45, e 1.234,56 vira 1,23. Nenhum erro aparece: o app salva um número, só que outro.
Pedido: "Todo campo de valor deve aceitar o padrão brasileiro, vírgula nos centavos e ponto no milhar, e gravar o valor exato. A busca por nome deve ignorar acento e maiúscula. Me mostre o registro salvo de 45,90 e de 1.234,56."
Se o acento sai torto no próprio banco, é outra história, e ela está aqui.
A folha
OS 4 TESTES DA PRIMEIRA SEMANA
[ ] Conta nova: toda tela vazia diz o próximo passo
[ ] 4G lento: o botão trava e diz "enviando…"
[ ] Duas contas, mesmo horário, "3, 2, 1": só uma consegue
[ ] 45,90 e 1.234,56 gravam exatos; "joao" acha o João
Rode as quatro hoje, com o app como está, e de novo sempre que a IA mexer na tela daquele teste.
Era uma parede de várias
Essas quatro dizem em que condição o cliente chega. Não dizem quem pode ver o quê, nem o que conferir depois de cada mudança, nem qual conferência merece virar automática. São listas diferentes, cada uma com a sua hora, e o mapa de qual entra quando é o começo. Fechar as quatro hoje derruba uma parede. Saber a ordem das outras é o que impede a próxima.
Fontes
- Relato "existem tantos por menores que ninguém conta", TabNews (registrado na pesquisa do blog,
pesquisa/03-swipe-file-verbatim.md) - Cetic.br / NIC.br, TIC Domicílios 2025, indicador C16A (usuários de internet por acesso exclusivo ou simultâneo por celular e computador: 65% só celular; classe C 67%; DE 87%): https://cetic.br/pt/tics/domicilios/2025/individuos/C16A/
- Chrome for Developers, "Network features reference" (menu de limitação de velocidade com Fast 4G, Slow 4G e 3G): https://developer.chrome.com/docs/devtools/network/reference
- PostgreSQL 18 Documentation, "Constraints" (restrição de unicidade em uma coluna ou grupo de colunas): https://www.postgresql.org/docs/current/ddl-constraints.html
- MDN Web Docs, "parseFloat()" (ao achar caractere inválido, devolve o número até ali e ignora o resto): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat