Guia BA
Ninguém Consegue Reproduzir o Problema em Produção
Um playbook prático de BA para investigar problemas intermitentes em produção que ninguém consegue reproduzir sob demanda.
Surya · 13 de agosto de 2026 · 9 min de leitura · 8 práticas
Para Business Analysts investigando problemas intermitentes ou difíceis de reproduzir em produção, Times de QA e Desenvolvimento triando um incidente do tipo "funciona para a gente", Times de Suporte e Operações coletando evidências de usuários afetados e Qualquer um que já ouviu "a gente não consegue reproduzir" e precisa de um próximo passo.
“Funciona para a gente”
Um usuário relata:
“Pagamentos falham aleatoriamente.”
O Desenvolvimento tenta. Funciona.
O QA tenta. Funciona.
UAT? Funciona lá também.
Depois vem a frase que pode matar uma investigação silenciosamente:
“A gente não consegue reproduzir.”
Isso não significa que o problema não existe.
Significa:
Ainda não reproduzimos as condições que o criam.
É aí que a investigação começa.
Aqui está a situação
Imagine uma plataforma de e-commerce.
Alguns clientes dizem que pagamentos às vezes falham depois que clicam em Pagar Agora.
Nenhum padrão óbvio.
O QA roda vinte pagamentos com sucesso na UAT.
O Desenvolvimento tenta localmente. Sucesso.
O monitoramento de produção não mostra nenhuma queda importante.
Então, e agora?
O erro é rodar o mesmo teste de novo e de novo.
A pergunta melhor é:
O que foi diferente quando a falha aconteceu?
Vamos seguir um pagamento que falhou e descobrir.
1. Escute & Capture — consiga a história de verdade
Não comece com:
“Você consegue reproduzir de novo?”
Comece com o que realmente aconteceu. Pergunte:
- O que você estava tentando fazer?
- Quando aconteceu?
- O que você esperava?
- O que aconteceu em vez disso?
- Já aconteceu antes?
- Tentar de novo funcionou?
Capture qualquer evidência disponível:
timestamp → ID de usuário/referência → ID de transação/pedido → erro → screenshot → sequência
Compare esses dois relatos:
“O pagamento falhou ontem.”
versus:
“O Pedido 78431 falhou às 14:07 depois da verificação de OTP.”
O segundo dá ao time por onde começar.
No nosso caso de pagamento — capturamos: pedido 78431, horário 14:07, dispositivo Android, pagamento cartão internacional, falha depois da verificação de OTP.
Já ali, “aleatório” ficou um pouco menos aleatório.
2. Colete Evidências — antes que elas desapareçam
Problemas intermitentes são mais fáceis de investigar enquanto a evidência ainda existe. Procure por:
- logs da aplicação
- respostas de API
- IDs de correlação ou trace
- timestamps
- histórico de auditoria
- monitoramento
- detalhes de requisição/resposta onde for apropriado
Não colete dado sensível de produção sem cuidado. Use acesso aprovado, mascaramento e controles de segurança.
O objetivo não é mais logs. O objetivo é seguir uma jornada com falha.
No nosso caso de pagamento — o time rastreia o pedido 78431. A requisição de pagamento chegou na aplicação. Passou pela verificação de OTP. Depois um serviço de pagamento downstream rejeitou a requisição. Agora sabemos onde olhar a seguir.
3. Entenda o Contexto — o que foi diferente?
A mesma funcionalidade pode se comportar de forma diferente dependendo do que a cerca. Confira as condições ao redor da falha:
- Usuário — papel, permissões, tipo de cliente
- Dispositivo — navegador, versão do app, sistema operacional
- Localização — região, rede, fuso horário
- Dado — estado da conta, valor, moeda, produto
- Timing — período de pico, jobs agendados, janelas de batch
- Sequência — o que aconteceu imediatamente antes da falha?
Talvez o problema afete só:
Usuários Android numa versão mais antiga do app.
Ou:
Clientes com dois endereços.
Ou:
Transações acima de um certo valor.
Ou:
Requisições chegando enquanto um batch agendado trava um registro.
Você está procurando um padrão escondido dentro da palavra “aleatório.”
No nosso caso de pagamento — o time compara transações com sucesso e com falha. Uma pista aparece: a maioria das falhas envolve cartões internacionais. Essa vira a próxima hipótese.
4. Compare Ambientes — não compare só código
Uma suposição comum é:
“Mesmo código, então deveria se comportar do mesmo jeito.”
Mas a produção pode diferir da UAT em:
- dado
- configuração
- feature flags
- permissões
- integrações
- versões de serviço
- tráfego
- comportamento de rede
- agendamentos
- infraestrutura
Então compare UAT vs Produção, não só código vs código. Pergunte:
O que existe na produção que nosso ambiente de teste não reproduz?
No nosso caso de pagamento — a UAT usa um provedor de pagamento de teste. A produção roteia certos pagamentos internacionais através de outro provedor. Mesma aplicação. Caminho diferente. Agora a investigação está ficando mais estreita.
5. Replique de Forma Mais Inteligente — recrie condições, não só passos
O usuário seguiu:
Login → Selecionar produto → Pagar → Falha
Repetir esses passos pode não recriar o problema. Tente combinar as condições ao redor:
- mesmo dado
- mesmo tipo de usuário
- mesmo dispositivo/versão do app
- mesma configuração
- mesmo caminho de integração
- mesma sequência
- timing/carga parecidos onde for seguro
O objetivo não é copiar a produção de forma irresponsável. É recriar o menor conjunto de condições que dispara a falha.
No nosso caso de pagamento — o QA agora testa: cartão internacional → mesma rota de pagamento → payload parecido. A falha aparece. Pela primeira vez, o time consegue reproduzir.
6. Aumente a Visibilidade — quando o sistema não está te contando o suficiente
Às vezes você não consegue reproduzir um problema porque o sistema não expõe evidência suficiente. Essa ausência já é uma informação útil. O time pode precisar de:
- logging mais estruturado
- IDs de correlação
- métricas
- alertas
- eventos de auditoria
- diagnósticos temporários
- monitoramento mais seguro no nível da funcionalidade
Um BA não precisa desenhar a plataforma de observabilidade. Mas um BA pode perguntar:
“Se isso acontecer de novo, que evidência a gente vai precisar para provar onde falhou?”
Isso pode virar um requisito.
7. Isole & Estreite — mude uma coisa por vez
Uma vez que você tem uma hipótese, estreite ela. Suponha que pagamentos internacionais pareçam suspeitos. Compare:
- Doméstico vs internacional.
- Uma moeda vs outra.
- Mobile vs web.
- Cliente existente vs cliente novo.
- Provedor de pagamento A vs provedor B.
- Uma configuração vs outra.
Não mude cinco variáveis juntas. Você está tentando transformar:
“Falha às vezes.”
em:
“Falha quando essas condições são verdadeiras.”
No nosso caso de pagamento — o time eventualmente isola isto: cartão internacional + provedor de pagamento específico + endereço contendo um caractere especial. Agora a falha não é mais aleatória.
8. Prove & Corrija — não pare em “provavelmente”
A causa raiz é encontrada. Um serviço de pagamento downstream rejeita certos caracteres de endereço por causa de um problema de codificação. Agora temos:
gatilho → ponto de falha → causa raiz
O time corrige. Mas não pare aí. Verifique se:
- a condição de falha original agora funciona
- os cenários relacionados continuam funcionando
- a correção se comporta corretamente sob condições parecidas com a produção
- o monitoramento consegue detectar recorrência onde for apropriado
“O desenvolvedor disse que corrigiu” não é encerramento.
Evidência é encerramento.
Lugares comuns para investigar
Quando você ainda não tem uma hipótese forte, olhe algumas áreas amplas.
- Dado — nulos, formatos inesperados, valores de fronteira, registros antigos ou migrados
- Configuração — feature flags, variáveis de ambiente, limites, regras de roteamento
- Código / Lógica — casos extremos, condições de corrida, tratamento de erro, transições de estado
- Dependências — serviços de terceiros, timeouts, problemas de rede, diferenças de versão
- Usuário / Acesso — permissões, papéis, direitos, segmentos de cliente
- Timing / Carga — tráfego de pico, jobs agendados, processamento assíncrono, concorrência
Não marque caixas cegamente. Use essas áreas para gerar hipóteses melhores.
O erro de BA a evitar
Um usuário diz:
“Falhou.”
O time diz:
“A gente testou e funciona.”
As duas afirmações podem ser verdadeiras.
Não transforme a investigação num debate sobre quem está certo. Pergunte:
“O que foi diferente quando falhou?”
Fique curioso. Não defensivo.
Antes de fechar o problema
Prontidão
- A gente consegue explicar a causa raiz?
- A gente consegue reproduzir o gatilho ou provar pela evidência?
- A condição de falha original foi verificada depois da correção?
- Os cenários relacionados foram checados?
- O monitoramento é suficiente se acontecer de novo?
- Os usuários ou times de negócio afetados foram informados?
- O aprendizado foi documentado?
Às vezes um problema intermitente não pode ser tornado perfeitamente determinístico. Tudo bem.
O encerramento deveria ainda assim se basear em evidência — não exaustão.
O Playbook de Investigação de Problema em Produção
- Escute & Capture → Consiga a história exata.
- Colete Evidências → Preserve a jornada com falha.
- Entenda o Contexto → Encontre as condições ao redor.
- Compare Ambientes → Identifique o que difere.
- Replique de Forma Mais Inteligente → Recrie condições, não só passos.
- Aumente a Visibilidade → Capture a evidência que está faltando.
- Isole & Estreite → Encontre o gatilho.
- Prove & Corrija → Confirme, corrija e verifique.
Checklist de Investigação de Problema em Produção
Copie isso para o Jira, Confluence ou suas notas de incidente.
Escute e capture
- O que o usuário estava tentando fazer capturado
- Timestamp, ID de usuário/referência e ID de transação/pedido registrados
- Comportamento esperado vs real anotado
- Screenshot ou erro capturado
Colete evidências
- Logs da aplicação extraídos
- Respostas de API capturadas
- IDs de correlação ou trace encontrados
- Uma jornada com falha seguida do início ao fim
Entenda o contexto
- Papel e permissões do usuário checados
- Dispositivo, navegador e versão do app checados
- Localização, rede e fuso horário checados
- Dado e estado da conta checados
- Timing (período de pico, batch, agendamento) checado
- Sequência imediatamente anterior à falha revisada
Compare ambientes
- Dado de UAT vs Produção comparado
- Configuração e feature flags comparadas
- Integrações e versões de serviço comparadas
- Tráfego, infraestrutura e agendamento comparados
Replique de forma mais inteligente
- Mesmo dado, tipo de usuário e dispositivo recriados
- Mesma configuração e caminho de integração recriados
- Mesma sequência e timing recriados
- Menor condição de falha reproduzida
Isole & estreite
- Uma variável mudada por vez
- Condição de gatilho documentada
- “Falha às vezes” virou “falha quando X é verdadeiro”
Prove & corrija
- Causa raiz explicada
- Condição de falha original verificada depois da correção
- Cenários relacionados checados
- Monitoramento atualizado para detectar recorrência
Feche corretamente
- Usuários ou times de negócio afetados informados
- Aprendizado documentado
O que fica
“Não conseguimos reproduzir” não é uma causa raiz.
É um status de investigação.
Se o usuário está enfrentando isso, o problema é real — mesmo quando seu teste passa.
Não fique repetindo o mesmo teste esperando que o bug apareça.
Capture a jornada com falha. Compare as condições. Encontre o que mudou. Estreite o gatilho. Depois prove.
Uma boa investigação transforma “aleatório” num padrão — e um padrão numa correção.
“Não conseguimos reproduzir” não é uma causa raiz.
É um status de investigação.
Se o usuário está enfrentando isso, o problema é real — mesmo quando seu teste passa. Capture a jornada com falha. Compare as condições. Encontre o que mudou. Estreite o gatilho. Depois prove. Uma boa investigação transforma “aleatório” num padrão — e um padrão numa correção.
Leve isso com você
Checklist de Investigação de Problema em Produção
CHECKLIST DE INVESTIGAÇÃO DE PROBLEMA EM PRODUÇÃO ESCUTE E CAPTURE [ ] O que o usuário estava tentando fazer foi capturado [ ] Timestamp, ID de usuário/referência e ID de transação/pedido registrados [ ] Comportamento esperado vs real anotado [ ] Screenshot ou erro capturado COLETE EVIDÊNCIAS [ ] Logs da aplicação extraídos [ ] Respostas de API capturadas [ ] IDs de correlação ou trace encontrados [ ] Uma jornada com falha seguida do início ao fim ENTENDA O CONTEXTO [ ] Papel e permissões do usuário checados [ ] Dispositivo, navegador e versão do app checados [ ] Localização, rede e fuso horário checados [ ] Dado e estado da conta checados [ ] Timing (período de pico, batch, agendamento) checado [ ] Sequência imediatamente anterior à falha revisada COMPARE OS AMBIENTES [ ] Dado de UAT vs Produção comparado [ ] Configuração e feature flags comparadas [ ] Integrações e versões de serviço comparadas [ ] Tráfego, infraestrutura e agendamento comparados REPLIQUE DE FORMA MAIS INTELIGENTE [ ] Mesmo dado, tipo de usuário e dispositivo recriados [ ] Mesma configuração e caminho de integração recriados [ ] Mesma sequência e timing recriados [ ] Menor condição de falha reproduzida ISOLE E ESTREITE [ ] Uma variável mudada por vez [ ] Condição de gatilho documentada [ ] "Falha às vezes" virou "falha quando X é verdadeiro" PROVE E CORRIJA [ ] Causa raiz explicada [ ] Condição de falha original verificada depois da correção [ ] Cenários relacionados checados [ ] Monitoramento atualizado para detectar recorrência FECHE CORRETAMENTE [ ] Usuários ou times de negócio afetados informados [ ] Aprendizado documentado
Receba novos guias em primeira mão.