Apostila completa de Experimentação de Produto, Feature Flags & A/B Testing
Experimentação online controlada é como empresas de produto sabem se uma mudança causou uma melhora — não se correlacionou por acaso. Esta apostila cobre a cultura e os tipos de experimento, feature flags (separar deploy de release), a anatomia de um A/B test, a estatística necessária sem a dor, como rodar o experimento certo, a hierarquia de métricas, os desenhos além do A/B simples (redes, holdouts, bandits), a plataforma de experimentação, e as armadilhas e a ética.
Por que experimentar
Objetivo: por que a intuição erra, causalidade vs correlação, quando a cultura de experimentação faz sentido (e quando não), e os tipos de experimento.
1.1 A intuição erra — muito
- Em empresas grandes que medem, a maioria das ideias de produto testadas não move a métrica-alvo; uma fração pequena move para cima; algumas pioram. Isso vale para times muito bons.
- Sem experimento, você lança pela opinião de quem tem mais poder (o HiPPO — highest paid person's opinion) ou pela última pessoa que falou.
- Experimentação é o método científico aplicado a produto: hipótese → intervenção controlada → medição → conclusão sobre causa.
1.2 Causalidade vs correlação
- "Usuários que usam o recurso X retêm mais" — pode ser que X cause retenção, ou que quem já ia reter descobre X. Só um experimento randomizado separa os dois: você atribui X ao acaso, então os grupos só diferem em X.
- Análises observacionais (comparar quem usou vs quem não usou) são cheias de viés de seleção.
1.3 Quando a cultura faz sentido — e quando não
- Precisa de tráfego: com poucos usuários, você nunca atinge poder estatístico para detectar efeitos realistas (Módulo 4). Startup pré-product-market-fit: experimente qualitativamente, decida rápido, não gaste em A/B.
- Precisa de disciplina: pré-registro, não parar cedo, métricas honestas — sem isso, "experimentação" vira teatro que legitima qualquer decisão.
- Precisa de instrumentação: eventos confiáveis, um pipeline de dados, métricas definidas.
- Onde faz sentido: produtos com escala, mudanças incrementais frequentes, times que topam ser contrariados pelos dados.
1.4 Tipos de experimento
| Tipo | Quando |
|---|---|
| A/B | duas variantes (controle + tratamento); o pão com manteiga |
| A/B/n | várias variantes de uma mudança; cuidado com comparações múltiplas |
| Multivariado (MVT) | testar combinações de vários fatores; exige muito tráfego |
| Holdout | um grupo não recebe um conjunto de features por um longo período — mede o efeito acumulado |
| Switchback | alternar tratamento/controle no tempo (todo o sistema) — para marketplaces/logística onde não dá para randomizar por usuário |
| Quasi-experimento (diff-in-diff, regression discontinuity) | quando não dá para randomizar — inferência causal com mais suposições |
Um experimento responde uma pergunta: esta mudança específica causa uma melhora na métrica primária, sem piorar os guardrails? Tudo o mais — a hipótese, a randomização, o tamanho de amostra, a análise honesta — existe para que a resposta seja confiável. Experimento mal feito é pior que nenhum: dá falsa confiança.
Perguntas de abertura: "Por que A/B testing e não só analisar os dados?" (análise observacional confunde causa e correlação — viés de seleção; só a randomização isola a causa), "Quando uma empresa não deveria fazer A/B?" (pouco tráfego → sem poder; sem disciplina/instrumentação; pré-PMF), "O que é o HiPPO?", "Cite tipos de experimento além do A/B" (A/B/n, MVT, holdout, switchback, quasi-experimento).
✏️ Exercício 1 — Experimentar ou não
Para cada caso, diga se um A/B test é a ferramenta certa (e por quê): (a) uma startup com 200 usuários ativos/dia quer testar um novo onboarding; (b) um e-commerce grande quer saber se um novo layout de página de produto aumenta a conversão; (c) uma empresa quer redesenhar toda a marca; (d) um marketplace quer testar uma nova política de preços que afeta compradores e vendedores; (e) medir o impacto de longo prazo de todas as features lançadas no ano.
Gabarito (uma boa resposta): (a) não A/B — 200/dia não dá poder para detectar efeitos realistas em tempo razoável; usar pesquisa qualitativa, entrevistas, e decidir. (b) A/B clássico — tráfego alto, mudança incremental, métrica clara (conversão), unidade = usuário. (c) não A/B — rebrand é uma decisão estratégica holística, o efeito é de longo prazo e difuso, e você não vai "reverter a marca" pelo p-valor; usar pesquisa, julgamento, e talvez medir brand lift separadamente. (d) switchback ou cluster randomization — randomizar por usuário causa interferência (o preço de um afeta o mercado do outro); alternar no tempo ou por região. (e) holdout de longo prazo — um grupo que não recebe o conjunto de features por meses, para medir o efeito acumulado (que costuma ser menor que a soma dos ganhos individuais reportados).
Feature flags
Objetivo: o que são, separar deploy de release, os tipos, o targeting, a avaliação cliente vs servidor, e as ferramentas.
2.1 A ideia: separar deploy de release
Um feature flag (ou toggle) é um ponto de decisão no código: if (flags.isEnabled('novo-checkout', user)) { ... }. Você deploya o código com o novo caminho desligado, e depois libera (release) mudando a flag — para 1%, para um segmento, para todos — sem novo deploy. E pode desligar na hora se der problema (kill switch).
2.2 Os tipos
| Tipo | Vida | Uso |
|---|---|---|
| Release / kill switch | curta (semanas) | rollout gradual de uma feature nova; desligar em incidente |
| Experiment | a duração do teste | atribuir variantes de um A/B |
| Ops / operational | longa | ligar/desligar comportamento em produção (modo degradado, rate limits, circuit breakers) |
| Permission / entitlement | permanente | features por plano, por role, por cliente (não é bem "flag", é autorização) |
Confundir os tipos causa flag debt (Módulo 8): flags de release que nunca são removidas viram if mortos que ninguém entende.
2.3 Targeting
- Por porcentagem (rollout: 1% → 10% → 50% → 100%).
- Por atributo: país, plano, plataforma, versão do app, data de cadastro, um flag interno "beta".
- Por segmento: listas de usuários/contas (allowlist para o time, para um cliente piloto).
- Consistência: o mesmo usuário deve ver a mesma coisa entre sessões e dispositivos — a avaliação é determinística (hash do user id + o nome da flag → um número em [0,1)).
2.4 Cliente vs servidor
- Servidor: a flag é avaliada no backend; ótimo para lógica crítica, não expõe features não lançadas, mas exige que o backend saiba os atributos.
- Cliente (web/mobile): um SDK avalia localmente com regras baixadas; rápido, funciona offline, mas o bundle "sabe" das flags e há latência de sincronização.
- Edge: avaliar num middleware/CDN (ex.: Next.js middleware) para não ter flash de conteúdo.
- Evite o flicker: se a flag muda a UI, avalie antes do primeiro render (servidor/edge) ou reserve o espaço.
2.5 Ferramentas
- Plataformas: LaunchDarkly, Statsig, Eppo, Split, Flagsmith, Unleash (open source), GrowthBook (open source), PostHog (flags + analytics + experimentos).
- Caseiro: uma tabela + um endpoint + um SDK fino — viável para começar; você reimplementa targeting, consistência, e a análise de experimento (a parte difícil).
Perguntas: "O que um feature flag resolve?" (separa deploy de release — libera/desliga sem novo deploy; rollout gradual; kill switch), "Tipos de flag?" (release, experiment, ops, permission — com vidas diferentes), "Por que a avaliação precisa ser determinística?" (o mesmo usuário vê a mesma coisa entre sessões/dispositivos — hash do id + flag), "Cliente ou servidor?" (crítico/não-exposto no servidor; rápido/offline no cliente; edge para evitar flicker).
✏️ Exercício 2 — Rollout de um checkout novo
Você vai lançar um novo fluxo de checkout. Descreva o plano de rollout com feature flags: os estágios, o targeting, os guardrails para pausar, e o que acontece com a flag no fim.
Gabarito (uma boa resposta): Estágio 0: deploy com o código do novo checkout atrás de uma flag desligada; allowlist só para o time (dogfooding). Estágio 1: 1% dos usuários (aleatório, determinístico por user id), monitorando de perto conversão, erros, latência, tickets de suporte. Estágio 2: 5% → 25% → 50%, cada salto após ~1–2 dias sem regressão nos guardrails. Possivelmente já rodando como experiment (controle = checkout antigo) para medir o efeito na conversão, não só "não quebrou". Estágio 3: 100%. Guardrails para pausar/reverter (kill switch): taxa de erro do checkout acima de X, queda de conversão além do esperado, pico de tickets, latência p95 acima do limite. Fim: quando 100% estável por N dias, remover a flag e o código do caminho antigo (não deixar o if apodrecer — flag debt).
Anatomia de um A/B test
Objetivo: hipótese, métrica primária, guardrails, unidade de randomização, assignment determinístico, e a diferença entre exposição e atribuição.
3.1 A hipótese
Escreva antes: "Porque [insight], acreditamos que [mudança] vai [efeito] em [métrica primária] para [segmento], sem prejudicar [guardrails]." Se você não consegue completar essa frase, o experimento não está pronto.
3.2 A métrica primária — uma só
- Uma única métrica que decide o experimento. Se você tem "5 métricas primárias", tem zero — vai escolher a que deu bem depois (Módulo 9).
- Deve ser sensível (muda com a intervenção no prazo do teste), alinhada ao objetivo real, e não-gaming (não dá para melhorá-la de um jeito ruim).
3.3 Guardrails
- Métricas que não podem piorar: latência, taxa de erro, receita, retenção, cancelamentos, reclamações, acessibilidade.
- Um tratamento que ganha na primária mas quebra um guardrail não lança.
3.4 Unidade de randomização
- Usuário (o mais comum): consistente entre sessões; a análise precisa considerar que ações do mesmo usuário são correlacionadas.
- Sessão: mais poder, mas o usuário pode ver as duas versões — só quando a mudança é "dentro da sessão" e sem memória.
- Conta / organização: para B2B, onde vários usuários compartilham um contexto — reduz muito o tamanho efetivo de amostra.
- Cluster (região, mercado): quando há interferência entre unidades (Módulo 7).
3.5 Assignment determinístico
bucket = hash(unit_id + "|" + experiment_key) mod 10000 / 10000 // em [0,1)
if bucket < 0.5 → controle
else → tratamento
- Determinístico (sempre o mesmo grupo), independente entre experimentos (o
experiment_keyno hash), e uniforme (um bom hash). - Reservar uma fração para não-expostos / futuros experimentos, se a plataforma usa "layers".
3.6 Exposição vs atribuição
- Atribuição: o usuário foi designado a um grupo.
- Exposição / trigger: o usuário de fato encontrou o ponto do experimento (viu a tela, chegou no fluxo). Analisar só os expostos aumenta o poder e evita diluir o efeito com quem nunca chegou lá — mas registre a exposição corretamente (é uma fonte comum de bug e de SRM — Módulo 5).
Perguntas: "O que faz um A/B test bem formado?" (hipótese escrita, uma métrica primária, guardrails, unidade de randomização consistente, assignment determinístico e uniforme), "Por que só uma métrica primária?" (várias = escolher a que deu bem depois — p-hacking), "Randomizar por usuário ou sessão?" (usuário para consistência; sessão dá mais poder mas o usuário pode ver as duas), "Diferença entre exposição e atribuição?".
✏️ Exercício 3 — Formalize o experimento
O time quer "adicionar um selo de 'mais vendido' nos produtos populares para aumentar as vendas". Formalize: a hipótese, a métrica primária, 3 guardrails, a unidade de randomização, e o que conta como "exposição".
Gabarito (uma boa resposta): Hipótese: "Porque prova social reduz a incerteza na decisão, acreditamos que exibir um selo 'mais vendido' nos produtos do top 10% de vendas vai aumentar a taxa de conversão de visita→compra para visitantes da listagem, sem aumentar devoluções nem prejudicar a receita por pedido." Métrica primária: taxa de conversão (pedidos / usuários expostos) — ou receita por usuário exposto, se o mix de produtos pode mudar. Guardrails: taxa de devolução/reembolso; receita total por usuário (o selo pode canibalizar produtos de maior margem); latência da página; reclamações/tickets sobre "propaganda enganosa". Unidade: usuário (consistência — a pessoa não deve ver o selo aparecer e sumir). Exposição: o usuário viu uma listagem ou página de produto onde havia pelo menos um produto elegível ao selo (senão o tratamento não teve chance de agir); registrar esse evento.
Estatística sem dor
Objetivo: variação amostral, o que o p-valor é e não é, poder, tamanho de amostra e MDE, frequentista vs bayesiano, e por que as plataformas usam CUPED e sequential.
4.1 O problema
Você mede uma diferença de 2% na conversão entre os grupos. Isso é o efeito real ou ruído (variação amostral — os dois grupos diferem um pouco por acaso)? A estatística responde "quão provável seria ver uma diferença desse tamanho se não houvesse efeito nenhum".
4.2 P-valor — o que não é
- O p-valor é: a probabilidade de observar uma diferença pelo menos tão grande quanto a sua, assumindo que a hipótese nula é verdadeira (não há efeito).
- Não é: a probabilidade de a hipótese nula ser verdadeira; não é a probabilidade de você estar errado; não é o tamanho nem a importância do efeito.
p < 0.05(o limiar convencional) = "se não houvesse efeito, veríamos algo assim < 5% das vezes" → declaramos "significativo". É uma convenção, não uma lei da natureza.
4.3 Intervalo de confiança
- Mais útil que o p-valor: "o efeito está entre +0.3% e +3.7% com 95% de confiança". Mostra a magnitude e a incerteza. Se o intervalo cruza o zero, é "não significativo" — mas o intervalo diz quanto você ainda não sabe.
4.4 Poder, tamanho de amostra e MDE
- Poder: a probabilidade de detectar um efeito que existe. Convenção: 80%. Baixo poder = você "não vê" efeitos reais e conclui "flat" errado.
- MDE (minimum detectable effect): o menor efeito que o seu experimento consegue detectar com o poder desejado. Depende do tamanho de amostra, da variância da métrica, e do
α. - Tamanho de amostra: calcule antes. Uma calculadora (Evan Miller, a da sua plataforma) pega a métrica base, o MDE que te interessa, α e poder, e dá quantos usuários por grupo — e daí quantos dias, dado o tráfego.
- Se o número de dias for absurdo (meses), o efeito que você quer detectar é pequeno demais para o seu tráfego — repense (efeito maior, métrica menos ruidosa, CUPED, ou não faça o teste).
4.5 Frequentista, bayesiano, sequential
- Frequentista (o clássico): p-valor + intervalo de confiança, com o tamanho de amostra fixado antes.
- Bayesiano: "probabilidade de o tratamento ser melhor" e "perda esperada se eu escolher errado" — mais intuitivo para decidir, exige priors.
- Sequential testing (o que muitas plataformas usam): permite olhar continuamente sem inflar o erro (ao contrário do frequentista clássico, onde "espiar" é trapaça — Módulo 5). Sequência ou "always valid p-values".
- CUPED e variance reduction (Módulo 7): usar dados pré-experimento do usuário para reduzir a variância da métrica → menos amostra para o mesmo poder.
4.6 Erros
- Tipo I (falso positivo): declarar efeito quando não há. Controlado por α.
- Tipo II (falso negativo): não detectar um efeito real. Controlado por poder.
- Comparações múltiplas (várias métricas, vários segmentos, várias variantes) multiplicam o risco de Tipo I — corrija (Bonferroni, FDR) ou pré-registre.
Perguntas: "O que é um p-valor?" (probabilidade de ver uma diferença tão grande assumindo nenhum efeito — não a probabilidade de a nula ser verdadeira nem o tamanho do efeito), "O que é MDE e poder?" (menor efeito detectável; probabilidade de detectar um efeito real — alvo 80%), "Como você calcula o tamanho de amostra?" (métrica base + MDE de interesse + α + poder → n por grupo → dias dado o tráfego), "Por que sequential testing?" (permite olhar continuamente sem inflar o erro).
✏️ Exercício 4 — Dá para rodar?
Sua conversão base é 4%. Você quer detectar uma melhora relativa de 5% (ou seja, de 4% para 4.2%). Você tem 10.000 usuários expostos por dia. Sem fazer a conta exata, raciocine: o experimento é viável? O que você poderia mudar se não for?
Gabarito (uma boa resposta): um efeito relativo de 5% sobre uma base de 4% (absoluto de 0.2 ponto) numa métrica binária ruidosa exige uma amostra grande — tipicamente na casa das centenas de milhares por grupo (a conta depende da variância, mas a ordem de grandeza é essa). Com 10k/dia (5k por grupo), isso seriam muitas semanas a meses — provavelmente inviável (o produto muda no meio, sazonalidade, custo de oportunidade). Opções: (a) mirar um efeito maior (só vale a pena testar mudanças com potencial de ≥ 5–10% relativo se o tráfego é modesto); (b) usar uma métrica menos ruidosa ou mais próxima (cliques no CTA em vez de conversão final); (c) CUPED / variance reduction se a plataforma oferece; (d) rodar como rollout monitorado (não A/B) e aceitar que não vai medir esse efeito pequeno; (e) agrupar várias melhorias num só experimento maior. Não rode um teste sem poder e depois chame o "flat" de "não funcionou".
Rodar o experimento certo
Objetivo: duração, o pecado do "peeking", pré-registro, SRM, segmentação pós-hoc, e o que fazer com um resultado "flat".
5.1 Duração
- Rode por ciclos completos (múltiplos de 7 dias) — comportamento varia por dia da semana.
- Pelo menos 1–2 semanas mesmo que o tamanho de amostra seja atingido antes — para capturar novelty effect (o efeito inicial de "algo mudou", que decai) e primacy (usuários habituados resistem ao novo).
- Não rode demais tempo sem motivo — flags acumulam, o produto evolve por baixo, e o custo de oportunidade cresce.
5.2 Não pare cedo (peeking)
- No teste frequentista clássico, olhar o resultado repetidamente e parar quando "fica significativo" infla o falso positivo dramaticamente (de 5% para 20–30%+). É o erro mais comum e mais caro.
- Soluções: fixar a duração antes e só olhar no fim; ou usar sequential testing / always-valid p-values (a plataforma faz a correção) — aí você pode olhar continuamente.
5.3 Pré-registro
- Antes de ligar: registrar a hipótese, a métrica primária, os guardrails, os segmentos que você vai analisar, a duração/tamanho de amostra, e o critério de decisão.
- Isso impede o HARKing (Hypothesizing After the Results are Known) — inventar a hipótese depois de ver o que deu bem.
5.4 SRM — Sample Ratio Mismatch
- Você configurou 50/50 e observou 52/48 (com N grande, isso é altamente improvável por acaso). SRM é um alarme de bug: assignment enviesado, um bug que faz um grupo crashar/desistir mais (e sumir dos dados), logging que perde eventos de um lado, um bot filtrado desigualmente.
- Um teste de qui-quadrado no ratio de amostra é a primeira checagem de todo experimento. Com SRM, não confie no resultado — ache o bug.
5.5 Segmentação pós-hoc
- "Não deu no geral, mas deu para usuários de iOS no Brasil que se cadastraram em março" — cuidado: com muitos cortes, algum vai parecer significativo por acaso (comparações múltiplas).
- Segmentos pré-registrados e com hipótese: ok, com correção. Segmentos garimpados depois: tratar como geradores de hipótese para um próximo teste, não como conclusão.
5.6 O resultado "flat"
- A maioria dos experimentos dá inconclusivo — o intervalo de confiança inclui zero. Isso é informação: a mudança não teve o efeito grande que você esperava.
- Perguntas: o experimento tinha poder para o efeito que interessava? A exposição foi registrada certo (talvez pouca gente chegou no ponto)? Houve SRM? O tratamento foi implementado como planejado (bug de execução)?
- Decisão típica com "flat": não lançar (não pague a complexidade por um efeito que não se mede), a menos que haja um motivo estratégico e os guardrails estejam ok. Um "flat" que não piora nada e simplifica o código pode valer lançar.
Parar o teste quando "ficou verde" (peeking no frequentista). Trocar a métrica primária depois de ver os dados. Garimpar segmentos até achar um significativo. Ignorar o SRM. Rodar menos de uma semana. Não pré-registrar. Rodar 20 métricas e reportar as 2 que deram. Concluir "funciona" de um efeito minúsculo em cima do MDE (winner's curse — Módulo 9). Deixar a flag para sempre.
Perguntas: "Por que não parar um teste quando fica significativo?" (peeking infla o falso positivo de 5% para 20–30%+; use duração fixa ou sequential), "O que é SRM e por que importa?" (o split observado difere do configurado além do acaso — alarme de bug; não confie no resultado), "O que você faz com um resultado 'flat'?" (checar poder/exposição/SRM/execução; geralmente não lançar, a menos que simplifique sem piorar), "O que é pré-registro e por quê?".
✏️ Exercício 5 — Diagnostique o experimento
Um teste rodou 4 dias. O time diz: "a métrica primária ficou flat, mas achamos que para usuários mobile deu +8% significativo, então vamos lançar só para mobile". Além disso, o split foi 50/50 configurado mas os dados mostram 55% no controle. Aponte todos os problemas.
Gabarito (uma boa resposta): (1) 4 dias — menos de um ciclo semanal; comportamento de fim de semana não capturado; provavelmente sem poder. (2) SRM: 50/50 configurado, 55/45 observado — com N razoável isso é improvável por acaso; há um bug (assignment, logging, um crash desigual). Enquanto não achar a causa, nenhum número do experimento é confiável — nem o "flat" nem o "mobile +8%". (3) Segmentação pós-hoc: "achamos que mobile deu +8%" é garimpo — se não foi pré-registrado com hipótese, é um resultado de comparação múltipla, provavelmente espúrio; no máximo vira hipótese para um teste dedicado a mobile. (4) HARKing: mudar a decisão para "lançar só mobile" depois de ver os dados. O certo: pausar, achar e corrigir o bug do SRM, re-rodar por 1–2 semanas completas com poder adequado, e a métrica primária pré-registrada decide; se houver hipótese real sobre mobile, um experimento separado.
Métricas
Objetivo: a hierarquia de métricas, curto prazo como proxy de longo prazo, o OEC, evitar gaming, e as métricas de contra-peso.
6.1 A hierarquia
- North Star: a métrica que captura o valor entregue ao usuário e ao negócio (ex.: "noites reservadas", "mensagens enviadas entre amigos", "tarefas concluídas"). Muda devagar; nenhum experimento único a move de forma detectável.
- Drivers / input metrics: as alavancas que empurram a North Star (ativação, frequência, retenção, amplitude de uso).
- Métricas de feature: específicas do que você está testando (cliques no novo botão, conclusão do novo fluxo).
- Guardrails: o que não pode piorar (Módulo 3).
- Um experimento tem uma primária (geralmente um driver ou uma métrica de feature bem escolhida), guardrails, e algumas secundárias exploratórias.
6.2 Curto prazo como proxy de longo prazo
- Você mede em 2 semanas, mas quer o efeito em 1 ano. O risco: mudanças que ganham no curto prazo (mais notificações, mais fricção removida do checkout) podem perder no longo (irritação, arrependimento, churn).
- Mitigações: holdouts de longo prazo (Módulo 7), métricas de curto prazo validadas como preditoras do longo (a empresa estuda historicamente quais proxies funcionam), e guardrails de retenção/satisfação.
6.3 OEC — Overall Evaluation Criterion
- Quando uma métrica só não basta, um OEC combina algumas numa fórmula que representa o que a empresa realmente quer (ex.: uma combinação de engajamento e receita com pesos). Difícil de acertar, mas força o debate sobre trade-offs antes do experimento.
6.4 Gaming e contra-peso
- Toda métrica pode ser "gamada" de um jeito ruim: aumentar "sessões" tornando o app confuso; aumentar "cliques" com iscas; aumentar "tempo no app" com scroll infinito viciante.
- Métricas de contra-peso: para cada métrica que você quer subir, uma que flagra o abuso (aumentei cliques mas a taxa de "voltar imediatamente" subiu → cliquei em iscas; aumentei tempo de sessão mas a satisfação caiu).
- "Otimizar a métrica" não é "servir o usuário" — a métrica é uma aproximação (Módulo 9).
Perguntas: "Descreva uma hierarquia de métricas de produto" (North Star → drivers → métricas de feature → guardrails; o experimento tem uma primária + guardrails + secundárias), "Qual o risco de medir em 2 semanas o que você quer em 1 ano?" (mudanças que ganham no curto podem perder no longo — mitigar com holdouts e proxies validados), "O que é uma métrica de contra-peso?" (flagra o abuso da métrica que você quer subir), "O que é um OEC?".
✏️ Exercício 6 — Métricas de um experimento de notificações
O time quer testar enviar mais notificações push para trazer usuários de volta. Defina: a métrica primária, 2 guardrails, 2 métricas de contra-peso, e por que medir só "sessões abertas" seria perigoso.
Gabarito (uma boa resposta): Primária: usuários ativos retornantes (voltaram e fizeram algo de valor — não só abriram) na janela do experimento; ou retenção de N dias. Guardrails: taxa de opt-out de notificações / desinstalação do app; reclamações; retenção de longo prazo (via holdout). Contra-peso: (1) proporção de sessões que terminam em < 10s sem ação (o usuário abriu por reflexo e saiu irritado); (2) taxa de "desligar todas as notificações" e NPS/satisfação. Por que "sessões abertas" é perigoso: é trivialmente "gamável" — bombardear de push aumenta aberturas no curto prazo mesmo que os usuários fiquem irritados, desativem as notificações e, no fim, retornem menos ou saiam. A métrica sobe e o produto piora. Por isso a primária tem que ser "retorno com valor" e os contra-pesos e o holdout de longo prazo têm que estar no desenho.
Além do A/B simples
Objetivo: interferência em redes/marketplaces, holdouts de longo prazo, experimentos em ML, variance reduction (CUPED), sequential testing e bandits.
7.1 Interferência entre unidades
- O A/B assume que o tratamento de um usuário não afeta o resultado de outro (SUTVA). Em marketplaces (o preço/disponibilidade que um comprador vê depende de outros), redes sociais (você vê o post do seu amigo), e logística (motoristas compartilham a mesma frota), isso não vale — randomizar por usuário mistura os grupos e enviesa o efeito.
- Soluções: cluster randomization (randomizar por cidade/mercado/comunidade — menos poder, mas válido), switchback (todo o sistema alterna tratamento/controle em janelas de tempo), e desenhos de "ego-network" para grafos sociais.
7.2 Holdouts de longo prazo
- Um grupo (ex.: 5%) fica fora de um conjunto de features por meses/trimestres. Compara-se com o resto para medir o efeito acumulado — que costuma ser menor que a soma dos ganhos individuais reportados (interações, novelty que decai, otimização de proxy).
- Também detecta degradação lenta que nenhum experimento curto pega.
7.3 Experimentos em ML
- Rankers, modelos de recomendação, modelos de IA em produto: a avaliação offline (num dataset) dá um sinal, mas o que decide é a avaliação online (A/B) — o modelo muda o comportamento do usuário, que muda os dados futuros (feedback loop).
- Cuidados: o modelo "campeão" precisa de um holdout para não se auto-confirmar; medir métricas de negócio, não só a loss; ver LLMOps & Avaliação de Sistemas de IA e Design de Produtos com IA.
7.4 Variance reduction (CUPED)
- CUPED (Controlled-experiment Using Pre-Existing Data): ajusta a métrica de cada usuário pelo seu comportamento antes do experimento (que é ruído conhecido, não efeito do tratamento) → reduz a variância, às vezes pela metade → menos amostra / menos tempo para o mesmo poder.
- Também: escolher métricas menos ruidosas, "capar" outliers, estratificar.
7.5 Sequential e bandits
- Sequential testing: monitorar continuamente com garantias válidas (Módulo 4) — decidir mais cedo quando o efeito é grande, sem inflar o erro.
- Multi-armed bandits: em vez de esperar o fim para escolher a melhor variante, o algoritmo desloca o tráfego para as variantes que vão bem durante o teste. Bom para: muitas variantes, decisões de curto prazo (manchetes, criativos de anúncio), quando o custo de servir a variante ruim é alto. Ruim para: quando você quer uma estimativa limpa do efeito de cada variante (o bandit enviesa isso).
Perguntas: "Por que A/B por usuário falha num marketplace?" (interferência — o tratamento de um afeta o resultado de outro; usar cluster ou switchback), "O que é um holdout de longo prazo e o que ele revela?" (grupo sem um conjunto de features por meses — mede o efeito acumulado, que é menor que a soma dos ganhos, e pega degradação lenta), "O que é CUPED?" (usar dados pré-experimento para reduzir variância → menos amostra), "A/B ou bandit?" (bandit quando quer maximizar durante o teste e há muitas variantes; A/B quando quer a estimativa limpa do efeito).
✏️ Exercício 7 — Desenho de experimento num app de carona
Um app de caronas quer testar um novo algoritmo de precificação dinâmica. Explique por que um A/B por usuário é inválido, proponha o desenho correto, e o que você mediria.
Gabarito (uma boa resposta): Por que A/B por usuário é inválido: motoristas e passageiros compartilham o mesmo mercado — se metade dos passageiros vê o preço novo, isso muda a oferta de motoristas e a disponibilidade que a outra metade (controle) enfrenta. Os grupos se contaminam e o efeito medido é enviesado (e muda com a % de tratamento). Desenho correto: switchback — em cada cidade, alternar o algoritmo novo e o antigo em janelas de tempo (ex.: 30–60 min, com um "washout" no meio), ao longo de semanas, cobrindo todos os horários/dias; ou cluster randomization por cidade/região (cidades sorteadas para novo vs antigo) se houver cidades suficientes. Aleatorizar as janelas para não confundir com hora do dia. Medir: métricas de marketplace agregadas por janela/cidade — taxa de pedidos atendidos, tempo de espera, preço médio, receita, ganhos dos motoristas, cancelamentos; guardrails de satisfação de ambos os lados e de "surge" excessivo. Analisar com métodos que lidam com a autocorrelação temporal das janelas.
A plataforma de experimentação
Objetivo: o ciclo de vida de um experimento, o pipeline de dados e métricas, os dashboards, a governança, e a dívida de flags.
8.1 O ciclo de vida
- Criar: hipótese, métrica primária, guardrails, MDE/tamanho, segmentos — num registro (o "experiment doc").
- Targetear: a flag, o % de tráfego, os filtros de elegibilidade; um "layer" para não colidir com outros experimentos na mesma superfície.
- Expor: o código chama a avaliação e emite o evento de exposição.
- Coletar: os eventos de exposição + os eventos de métrica fluem para o warehouse.
- Analisar: o cálculo de métricas por grupo, com IC, SRM, correções.
- Decidir: lançar / não lançar / iterar — com base na primária e nos guardrails, documentado.
- Limpar: remover a flag e o código do braço perdedor.
8.2 O pipeline de dados
- Eventos (exposição, ações do usuário) → um data warehouse → um job que junta exposição com métricas e calcula os resultados por experimento (ver Engenharia de Dados, Análise de Dados com Python).
- Um metrics repo / semantic layer: as métricas definidas uma vez, versionadas, usadas por todos os experimentos e dashboards — para "conversão" significar a mesma coisa em todo lugar (ver Business Intelligence Corporativo).
- Qualidade dos dados: eventos duplicados, atrasados, perdidos, bots — tudo enviesa; o pipeline precisa de checagens.
8.3 Dashboards
- Por experimento: a primária com IC ao longo do tempo, os guardrails, o SRM, os segmentos pré-registrados, a exposição acumulada vs o alvo, e um "verdict" claro.
- Evitar o "mar de números" — destacar a decisão e a confiança (ver Design de Produtos com IA para comunicar incerteza).
8.4 Governança
- Review de design antes de ligar: alguém confere hipótese, métrica primária única, poder, guardrails, e se não colide com outro experimento.
- Conflitos: dois experimentos na mesma superfície podem interagir; "layers" mutuamente exclusivos ou análise de interação.
- Quem pode lançar sem experimento (mudanças triviais, correções); quem precisa.
- Um registro central de todos os experimentos rodando e seus resultados (memória institucional — para não re-testar o que já se sabe).
8.5 Flag debt
- Flags de release/experimento que não são removidas viram
ifs mortos, caminhos de código não testados, e configuração que ninguém entende. - Processos: data de expiração na flag, um relatório de "flags velhas", "limpar a flag" como parte da definição de pronto do experimento, lint que sinaliza flags antigas.
Perguntas: "Descreva o ciclo de vida de um experimento" (criar/registrar → targetear → expor → coletar → analisar → decidir → limpar a flag), "O que é um metrics repo / semantic layer e por que importa?" (métricas definidas uma vez, versionadas — "conversão" significa o mesmo em todo lugar), "Como você evita que dois experimentos se atrapalhem?" (review de design, layers mutuamente exclusivos, análise de interação), "O que é flag debt e como combater?".
✏️ Exercício 8 — Monte o processo
Uma empresa de 30 engenheiros está começando a fazer experimentos "de qualquer jeito" (cada time com sua flag, sem análise consistente). Proponha o processo mínimo: o que registrar, o pipeline, a análise, a governança e a limpeza.
Gabarito (uma boa resposta): Registrar: um template de "experiment doc" (hipótese na frase padrão, métrica primária única, guardrails, unidade de randomização, MDE + tamanho de amostra + duração planejada, segmentos pré-registrados, critério de decisão) — num lugar central, revisado antes de ligar. Pipeline: uma biblioteca única de feature flags/assignment (determinístico, com layers), um evento de exposição padronizado, os eventos indo para o warehouse, e um job (ou uma plataforma tipo GrowthBook/Statsig/Eppo) que calcula os resultados — não cada time no Excel. Definir as ~10 métricas centrais uma vez (metrics repo). Análise: sempre com IC, checagem de SRM automática, correção para métricas múltiplas, e — se querem "espiar" — sequential. Um dashboard por experimento com verdict claro. Governança: um "experiment review" leve (15 min) antes de ligar; um registro de todos os experimentos e resultados; regra de quem pode pular experimento (trivialidades). Limpeza: data de expiração nas flags, "remover a flag" na definição de pronto, relatório mensal de flags velhas. Começar simples e endurecer conforme o volume cresce.
Armadilhas e ética
Objetivo: p-hacking e HARKing, winner's curse, paradoxo de Simpson, aversão à mudança, a ética de degradar a experiência de um grupo, e quando A/B não é a ferramenta.
9.1 Armadilhas estatísticas
- P-hacking: rodar até dar significativo (peeking), testar muitas métricas/segmentos e reportar o que "deu", parar/continuar conforme conveniente. Combate: pré-registro, correção de múltiplos, sequential.
- HARKing: apresentar uma hipótese pós-hoc como se fosse pré-registrada.
- Winner's curse: entre os experimentos que "ganham", o efeito medido é inflado (você só declara vitória quando o ruído ajudou). O ganho real em produção costuma ser menor que o reportado — daí a importância de holdouts para calibrar.
- Paradoxo de Simpson: o tratamento ganha em cada segmento mas perde no agregado (ou vice-versa), por causa de mix desigual entre os grupos. Cheque a composição.
- Novelty / change aversion: usuários reagem ao "novo" (curiosidade) ou resistem à mudança — o efeito das primeiras semanas não é o efeito de regime.
9.2 O custo de oportunidade
- Cada experimento ocupa tráfego, tempo de engenharia e uma "vaga" na superfície. Testar mudanças triviais (a cor de um botão que não muda nada) desperdiça isso. Priorize experimentos com hipótese forte e potencial de efeito relevante.
9.3 Ética
- Dano ao grupo: um experimento expõe parte dos usuários a uma versão pior (ou o controle "perde" um bug fix por semanas). Isso é aceitável para mudanças pequenas e reversíveis; não é para coisas que afetam saúde, dinheiro, segurança ou grupos vulneráveis. O caso do experimento de "contágio emocional" do Facebook (2014) é o exemplo de linha cruzada.
- Consentimento e transparência: os ToS geralmente cobrem "melhoramos o produto continuamente", mas experimentos que manipulam emoção, exploram vieses, ou testam preços de forma discriminatória exigem cuidado ético e às vezes legal.
- Equidade: o experimento tem efeitos diferentes por grupo demográfico? Uma "otimização" pode piorar a experiência de um grupo minoritário e o agregado esconde isso — analise por grupo com essa lente.
- Acessibilidade: o tratamento não pode regredir a acessibilidade "porque converteu melhor". Guardrail de a11y (ver Acessibilidade Digital & WCAG).
- Dark patterns "otimizados": A/B testing pode "provar" que um padrão manipulador (confirmshaming, urgência falsa, cancelamento difícil) aumenta a métrica. Otimizar a métrica não é servir o usuário — a métrica é uma aproximação, e o julgamento humano precisa vetar o que é predatório mesmo que "funcione" (ver Design de Produtos com IA, Módulo 9).
9.4 Quando A/B não é a ferramenta
- Poucos usuários (sem poder).
- Decisões estratégicas ou de marca (o efeito é de longo prazo, holístico, e você não vai reverter pelo p-valor).
- Mudanças onde o certo é óbvio (consertar um bug, seguir a lei, acessibilidade) — apenas faça.
- Quando o custo de rodar (complexidade, dois caminhos de código, atraso) supera o valor da certeza — para muitas mudanças pequenas, um rollout monitorado basta.
- Pesquisa generativa (entender por que, descobrir necessidades) — isso é qualitativo, não A/B.
Perguntas: "O que é winner's curse?" (entre os experimentos que ganham, o efeito medido é inflado — o ganho real em produção é menor; calibrar com holdouts), "O que é o paradoxo de Simpson num experimento?" (ganha em cada segmento mas perde no agregado por mix desigual — checar composição), "Quais os limites éticos de um A/B?" (não expor a versão pior em coisas de saúde/dinheiro/segurança/grupos vulneráveis; consentimento; equidade por grupo; a11y como guardrail; vetar dark patterns mesmo que "convertam"), "Quando A/B não serve?".
✏️ Exercício 9 — Vetar ou lançar
Um experimento mostra que tornar o botão "cancelar assinatura" mais difícil de achar (3 cliques a mais, um pop-up "tem certeza?" com opções de retenção) reduz o churn em 6% (significativo) e não mexe nos outros guardrails. O time quer lançar. O que você argumenta?
Gabarito (uma boa resposta): o experimento "funcionou" pela métrica, mas isso é um dark pattern ("roach motel" / cancelamento difícil): reduzir churn impedindo as pessoas de cancelar não é entregar valor — é frustração e, em várias jurisdições, ilegal (regras de "cancelar deve ser tão fácil quanto assinar" — ex.: "click to cancel"). Argumentos: (1) a métrica de churn é uma aproximação de "as pessoas querem ficar" — aqui ela subiu sem que ninguém queira ficar; falta uma métrica de contra-peso (reclamações, chargebacks, avaliações negativas, menções em redes, e o churn de longo prazo quando a pessoa consegue cancelar e nunca volta nem recomenda). (2) Risco legal e de reputação. (3) Ética: manipular para prender o usuário. Recomendação: não lançar a fricção. O que é legítimo testar: uma tela de cancelamento que oferece alternativas de forma honesta e opcional (pausar, mudar de plano) sem esconder o botão nem obrigar cliques extras — e medir se retém com o usuário ainda podendo sair em 1 clique.
Mercado de trabalho: roadmap, entrevistas e portfólio
Objetivo: converter o conteúdo dos módulos em contratação — onde a habilidade é usada, um plano de estudo, um banco de perguntas e projetos que geram entrevista.
10.1 Onde essa habilidade pesa
- Product analyst / data analyst (product): desenhar experimentos, analisar, traduzir em decisão.
- Data scientist (experimentation / causal inference): a estatística, os desenhos avançados, a metodologia.
- Experimentation PM / Growth PM: priorizar, escrever hipóteses, tomar as decisões.
- Growth engineer / experimentation platform engineer: a infra de flags, assignment, pipeline e análise.
- É uma competência transversal cobrada de PMs, designers e engenheiros de produto em qualquer empresa que meça.
10.2 Roadmap de estudo (4–6 semanas)
| Semanas | Foco | Prática |
|---|---|---|
| 1 | Cultura, flags, anatomia (Módulos 1–3) | Implementar feature flags num app pessoal com targeting % e por atributo; escrever 3 hipóteses no formato padrão |
| 2 | Estatística (Módulo 4) | Usar uma calculadora de sample size para 5 cenários; simular em Python (ver Análise de Dados) o efeito de "peeking" no falso positivo |
| 3 | Rodar certo + métricas (Módulos 5–6) | Pré-registrar um experimento fictício completo; desenhar a hierarquia de métricas de um produto que você conhece |
| 4 | Desenhos avançados + plataforma (Módulos 7–8) | Desenhar um experimento de marketplace (switchback); esboçar o pipeline eventos→métricas |
| 5 | Armadilhas e ética (Módulo 9) | Analisar honestamente um experimento "flat"; escrever um veto ético a um "vencedor" que é dark pattern |
| 6 | Portfólio | Publicar um estudo de caso fim-a-fim e a análise em Python |
10.3 Banco de perguntas (com a resposta que aprova)
Júnior/pleno — "Por que A/B em vez de analisar quem usou a feature?"
Porque comparar quem usou vs quem não usou tem viés de seleção — quem usa a feature já é diferente. Só a randomização faz os grupos serem iguais em tudo menos no tratamento, permitindo atribuir a diferença de métrica à causa. Análise observacional gera hipóteses, não conclusões causais.
Pleno — "O que é um p-valor (e o que não é)?"
É a probabilidade de observar uma diferença pelo menos tão grande quanto a sua, assumindo que não há efeito. Não é a probabilidade de a hipótese nula ser verdadeira, nem a chance de você estar errado, nem o tamanho/importância do efeito. Prefira reportar o intervalo de confiança, que mostra magnitude e incerteza.
Pleno — "O que é MDE e como você calcula o tamanho de amostra?"
MDE é o menor efeito que o experimento consegue detectar com o poder desejado (ex.: 80%). O tamanho de amostra vem de: a taxa base da métrica, a variância, o α (0.05), o poder (0.8), e o MDE de interesse — uma calculadora dá o n por grupo, e daí os dias dado o tráfego. Se o resultado for meses, o efeito é pequeno demais para o seu tráfego.
Pleno — "Por que não parar um teste quando fica significativo?"
No frequentista clássico, o tamanho de amostra é fixado antes; olhar repetidamente e parar no verde ("peeking") infla o falso positivo de 5% para 20–30%+. Ou você fixa a duração e só olha no fim, ou usa sequential testing / always-valid p-values, onde a plataforma corrige e você pode olhar continuamente.
Pleno/sénior — "O que é SRM e o que você faz ao detectar?"
Sample Ratio Mismatch: o split observado (ex.: 53/47) difere do configurado (50/50) além do que o acaso explica — é um alarme de bug (assignment enviesado, logging perdendo eventos de um lado, um crash desigual, bots). Ao detectar, não confie no resultado: ache e corrija a causa, e re-rode. É a primeira checagem de todo experimento.
Sénior — "Como você testa uma mudança num marketplace?"
Não por usuário — há interferência (o que um comprador vê depende de outros). Cluster randomization (por cidade/mercado) ou switchback (o sistema todo alterna tratamento/controle em janelas de tempo, ao longo de semanas, cobrindo horários e dias). Medir métricas agregadas por janela/cluster e analisar considerando a autocorrelação.
Sénior — "Um experimento ganhou +3% na primária. Você lança?"
Depende: os guardrails ficaram ok? o teste rodou pelo menos uma semana completa, sem peeking, com a métrica primária pré-registrada, sem SRM? O intervalo de confiança está longe do zero ou o +3% está em cima do MDE (winner's curse — o efeito real pode ser bem menor)? Há risco de novelty (medir de novo depois)? Se tudo passa, lança e — idealmente — confirma o ganho num holdout de longo prazo.
Armadilha — "O A/B provou que funciona"
Um A/B bem feito mostra que aquela mudança causou aquele efeito na métrica primária, no prazo medido, na população testada — se não houve peeking, SRM, troca de métrica, garimpo de segmento, e o poder era adequado. Não "prova" que serve o usuário (a métrica é aproximação), nem o efeito de longo prazo, nem que replica em outro contexto.
10.4 Projetos de portfólio que geram entrevista
- Experimento fim-a-fim (âncora): um caso (real ou simulado) com o experiment doc pré-registrado (hipótese, métrica primária, guardrails, sample size/MDE), a implementação com feature flags, e a análise honesta (IC, SRM, decisão) — incluindo o que fazer se der "flat".
- Feature flags num app: targeting por %, atributo e segmento, avaliação determinística, e um rollout gradual com kill switch documentado.
- Estudo de sample size / poder: uma análise (Python) de quanto tráfego é preciso para vários MDEs numa métrica, e uma simulação do custo do "peeking".
- Análise de um experimento "flat": demonstrar a checagem de poder, exposição, SRM e execução, e a recomendação — a habilidade que separa quem entende de quem só sabe rodar.
- Desenho de experimento em rede/marketplace: a justificativa da interferência e o desenho switchback/cluster, com as métricas e a análise.
10.5 Fontes para continuar
- A referência: Trustworthy Online Controlled Experiments (Kohavi, Tang & Xu) — a "bíblia" do assunto; os artigos e palestras de Ronny Kohavi.
- Estatística prática: as calculadoras de Evan Miller; os posts sobre CUPED, sequential testing e SRM dos blogs de engenharia (Microsoft ExP, Booking, Netflix, Airbnb, Spotify, DoorDash para switchback).
- Plataformas / conceitos: a documentação e o blog de Statsig, Eppo, GrowthBook, LaunchDarkly; PostHog.
- Cultura: Experimentation Works (Stefan Thomke); o material de experimentação de produto do Reforge e da Amplitude.
- Nesta trilha: Marketing Digital & Análise de Resultados, Análise de Dados com Python, Engenharia de Dados, Business Intelligence Corporativo, LLMOps & Avaliação de Sistemas de IA, Design de Produtos com IA, Observabilidade & SRE, Acessibilidade Digital & WCAG, Arquitetura de Software & System Design.
Cinco ideias sustentam a experimentação: (1) a intuição erra e só a randomização separa causa de correlação — mas isso exige tráfego, disciplina e instrumentação; (2) feature flags separam deploy de release (rollout gradual, kill switch, atribuição de variantes); (3) um experimento bem formado tem uma hipótese, uma métrica primária, guardrails, unidade de randomização consistente, e tamanho de amostra calculado antes; (4) os pecados que invalidam tudo são peeking, trocar a métrica, garimpar segmentos e ignorar o SRM — pré-registre; (5) otimizar a métrica não é servir o usuário — o winner's curse infla os ganhos, o longo prazo pode divergir do curto, e o julgamento humano precisa vetar dark patterns "vencedores".