Eu esperava um trade-off bem claro: exibir popunders com menos frequência para preservar a experiência do usuário ou exibi-los mais vezes para aumentar a receita até o engajamento começar a cair. Em produção, a relação foi bem menos simples.
Depois de aumentar a frequência em uma das minhas aplicações web em produção, eu esperava uma ruptura evidente nos dados de engajamento. Em vez disso, a métrica agregada continuou se movendo mais ou menos dentro da faixa diária habitual. Alguns dias foram melhores, outros piores, mas não observei uma queda clara e sustentada começando com a nova política.
No fim, mantive esta configuração:
Atraso inicial: 45 segundos
Cooldown mínimo após um popunder bem-sucedido: 4 minutos
Também mantive uma janela de frequência que permitia no máximo um evento bem-sucedido durante o mesmo período de quatro minutos:
const policy = {
initialDelaySeconds: 45,
cooldownSeconds: 240,
windowSeconds: 240,
maxEventsPerWindow: 1,
};
É pseudocódigo ilustrativo, deliberadamente independente de provedor de anúncios, SDK, aplicação ou deployment específicos. A implementação importa menos que a política que ela representa.
Na prática existem duas decisões de frequência
No começo eu tratava o problema como uma única pergunta: quantos minutos deveriam separar dois popunders? Essa era a abstração errada. Existem pelo menos duas decisões: o atraso antes da primeira oportunidade publicitária e o intervalo mínimo antes das oportunidades seguintes.
Esses dois momentos não são equivalentes. Um visitante novo ainda não decidiu se o produto é útil; um usuário já engajado, sim. Por isso passei a considerar que a primeira interrupção merece mais proteção que as seguintes.
Por que parei de monetizar os primeiros segundos de forma tão agressiva
Um atraso inicial menor deixa mais visitantes elegíveis mais cedo e, portanto, cria mais eventos publicitários em potencial. Mecanicamente, isso é verdade. O problema é que esse raciocínio ignora quando a monetização acontece.
Se a publicidade surge quase imediatamente após a chegada, ela passa a fazer parte da primeira avaliação do site. Se o usuário primeiro recebe algum tempo ininterrupto para entender e usar o produto, o mesmo mecanismo publicitário aparece em outro contexto.
Eu usava um atraso menor e depois passei para 45 segundos. Isso ainda é relativamente cedo e não foi pensado como uma configuração conservadora. A ideia era apenas separar o início da visita da primeira oportunidade de monetização. Passei a enxergar esses 45 segundos como tempo para o produto demonstrar valor, e não como inventário publicitário perdido.
Quarenta e cinco segundos são um limiar, não um horário marcado
O fim do atraso estabelece elegibilidade; não significa que um anúncio apareça automaticamente às 00:45. O evento real ainda depende de uma interação elegível do usuário. Alguém pode se tornar elegível às 00:45 e gerar o primeiro popunder apenas às 01:03, depois da próxima ação válida.
O mesmo vale para o cooldown. Quatro minutos significam que outro evento não pode voltar a ser elegível antes de quatro minutos após o evento anterior bem-sucedido. Não significa que um anúncio apareça automaticamente a cada quatro minutos. Os intervalos configurados são mínimos; o espaçamento real pode ser maior.
O intervalo de repetição importou mais que o atraso inicial
Quando fiquei satisfeito com o primeiro atraso, a cadência de repetição virou a variável mais importante. Um cooldown longo reduz a pressão publicitária, mas também pode fazer com que muitos usuários engajados nunca gerem uma segunda oportunidade.
Eu queria duas condições ao mesmo tempo: quem continuasse usando a aplicação deveria ter uma chance realista de gerar outro evento de monetização, mas ainda deveriam existir blocos significativos de uso ininterrupto entre esses eventos.
Mantive quatro minutos. Com atraso inicial de 45 segundos, os primeiros pontos teóricos de elegibilidade são aproximadamente 00:45, 04:45, 08:45 e 12:45. Os eventos reais podem ocorrer mais tarde porque ainda dependem de uma interação válida.
Por que quatro minutos eram diferentes de simplesmente maximizar impressões
Reduzir o cooldown cria mais oportunidades teóricas. Se a única métrica for oportunidades publicitárias por usuário, um intervalo menor é obviamente melhor. Mas o produto só tem valor publicitário enquanto continuar tendo valor para o usuário.
monetização adicional
-
dano comportamental
=
valor líquido
Quatro minutos davam ao usuário um bloco significativo de uso normal do produto no qual outro popunder era impossível. Para mim, essa garantia importava mais que a frase “um a cada quatro minutos”.
Depois de um evento de monetização, o usuário ganha vários minutos durante os quais outro evento é impossível.
Eu esperava uma queda visível no engajamento
Antes do deployment, minha hipótese principal era que uma frequência maior de anúncios produziria uma queda clara de antes para depois no analytics. Se isso tivesse acontecido, eu teria um motivo forte para suavizar a política.
Em vez disso, o engajamento agregado continuou flutuando de forma semelhante ao período anterior. Não apareceu um novo patamar claramente mais baixo nem uma sequência persistente de números piores após a mudança. O failure mode que eu esperava ser grande o suficiente para aparecer não ficou evidente.
O que eu realmente posso afirmar
Não posso dizer que os anúncios não tiveram nenhum efeito, que os usuários não se incomodaram, que a retenção permaneceu exatamente igual ou que essa configuração seja globalmente ótima. Uma média agregada não prova nada disso.
A afirmação mais forte apoiada pela minha observação é mais limitada:
Após aumentar a frequência, não observei uma queda clara e sustentada no engajamento agregado além da variação normal que já existia antes.
Isso ainda permite efeitos menores, diferenças entre grupos de usuários e comportamentos que uma única média pode esconder. Testei se a configuração era aceitável o bastante para ser mantida, não se encontrei um optimum universal.
Uma média estável pode esconder comportamentos muito diferentes
Uma média agregada quase inalterada pode representar realidades bem diferentes. Quase todos podem se comportar da mesma forma; alguns usuários podem sair mais cedo enquanto outros ficam mais tempo; um grupo pequeno pode reagir negativamente sem mover muito a média; ou um efeito negativo real pode simplesmente ser menor que a variação diária comum.
Por isso trato uma média estável como um sinal útil de alerta, não como prova de impacto zero.
Engajamento não é a mesma coisa que duração literal da visita
Também evitei tratar uma métrica de engagement do analytics como a duração média exata de uma sessão. Active engagement depende da definição do sistema de medição e não é necessariamente igual ao tempo com uma aba aberta. Usuários mudam o foco, voltam mais tarde ou navegam de maneiras que tornam enganoso um modelo simples de “tempo no site”.
Por isso não derivei o intervalo de publicidade de uma fórmula como “o engajamento médio é X, então o próximo popunder precisa acontecer antes de X”. Usei a métrica de forma direcional: depois da mudança, o produto parecia materialmente mais fraco? No nível agregado que eu observava, a resposta foi não.
Cooldown e janela de frequência estão relacionados, mas não são idênticos
A implementação tinha um cooldown de 240 segundos e uma janela de 240 segundos com máximo de um evento bem-sucedido. São em grande parte redundantes, mas expressam restrições ligeiramente diferentes.
O cooldown diz que outro evento não deve ser permitido até que tempo suficiente tenha passado desde o anterior. A janela diz que não deve haver mais de um evento bem-sucedido durante o período definido. Mantive ambos para que o invariant principal permanecesse óbvio mesmo se a integração interpretasse um dos mecanismos de forma diferente.
Dois popunders bem-sucedidos nunca devem ocorrer com menos de quatro minutos de diferença.
Um evento por janela não significa um evento por visita
Um valor como maxEventsPerWindow = 1 não significa necessariamente um anúncio durante toda a permanência do visitante. Seu escopo é a janela configurada; quando ela termina, outra pode começar. O 1 também não representa uma única ação do usuário, mas um evento de monetização bem-sucedido durante aquele período.
Hoje, ao revisar lógica de frequência, faço três perguntas: o que o contador conta, o que o reinicia e quanto dura a janela de reinício? Sem essas respostas, um valor cru como 1 diz muito pouco.
Separei a política da implementação específica do provedor
O comportamento reutilizável pode ser descrito sem expor scripts, identificadores ou nomes de parâmetros de um fornecedor específico:
function isEligible(state, now) {
if (!state.hasShownFirstEvent) {
return now - state.arrivalTime >= 45_000;
}
return now - state.lastEventTime >= 240_000;
}
Isso é pseudocódigo explicativo, não código-fonte de produção. Providers, SDKs e arquiteturas de deployment mudam; a política é mais durável: proteger o começo da visita, permitir monetização depois que o uso real começa, impor um hard cooldown e repetir apenas depois dele.
Build bem-sucedido e comportamento correto são coisas diferentes
Typechecker, linter e production build podem validar várias propriedades técnicas, mas nenhum prova que a linha do tempo publicitária funciona corretamente em um navegador. Essa funcionalidade também precisa de validação comportamental.
1. Abra um estado limpo do navegador.
2. Interaja antes do fim do atraso inicial: nenhum popunder deve ocorrer.
3. Espere passar o atraso inicial.
4. Faça uma interação elegível: o primeiro popunder pode ocorrer.
5. Continue interagindo antes do fim do cooldown: não deve ocorrer um segundo popunder.
6. Espere o cooldown terminar.
7. Interaja novamente: outro popunder pode ocorrer.
Um build bem-sucedido e um teste comportamental bem-sucedido respondem perguntas diferentes. Ambos importam.
A experiência publicitária combinada importa mais que qualquer placement isolado
Dois sistemas de publicidade independentes podem parecer razoáveis quando avaliados separadamente e agressivos quando combinados. Dois formatos com limites de quatro minutos podem se intercalar e fazer o usuário enfrentar interrupções por volta de 00:45, 02:45, 04:45 e 06:45.
Isso me levou a uma regra melhor:
Frequency caps devem ser avaliados por experiência do usuário, não por script publicitário.
O usuário sente a soma das interrupções, não o arquivo de configuração que produziu cada uma. Uma auditoria de produção deveria perguntar quantos eventos publicitários disruptivos uma pessoa pode realmente encontrar em determinado período.
O número bruto de impressões é o alvo errado de otimização
Criar mais oportunidades reduzindo o cooldown é fácil. A pergunta difícil é quanto de monetização adicional pode ser obtido sem reduzir o valor econômico total do usuário.
Uma configuração com menos anúncios por visita ainda pode gerar mais receita ao longo do tempo se preservar melhor o uso recorrente. Por isso me importo mais com receita por usuário ao longo do tempo do que com impressões por visita. A segunda métrica é fácil de maximizar; a primeira é o verdadeiro problema de negócio.
Um teste mais forte iria além de um único gráfico agregado
Minha observação em produção foi suficiente para mostrar que o resultado catastrófico que eu temia não ocorreu de forma evidente. Não foi suficiente para estabelecer todos os efeitos posteriores.
Um experimento mais forte compararia receita de monetização por usuário único, receita por visita, eventos publicitários por usuário, active engagement, interações significativas dentro do produto, taxa de usuários retornando, retenção ao longo do tempo e valor de usuário em prazo mais longo.
Os dois lados precisam ser medidos. Se eu olhar apenas para o output publicitário, quase inevitavelmente concluirei que mais publicidade é melhor. Se olhar apenas para engagement, posso ignorar ganhos de receita relevantes com custo comportamental mínimo.
Por que mantive a política simples
Não encontrei motivo para adicionar cada vez mais exceções. A lógica final permaneceu fácil de explicar: espere 45 segundos, permita monetização na próxima interação elegível, imponha quatro minutos de hard cooldown e depois permita monetização novamente na interação elegível seguinte.
Um pequeno número de invariants fortes é mais fácil de entender, testar e depurar que uma política cheia de exceções obscuras.
A assimetria é intencional
A política trata usuários novos e usuários engajados de forma diferente. Um visitante novo recebe mais proteção; quem continua interagindo cria mais oportunidades de monetização ao longo do tempo.
Assim, a pressão publicitária cresce com o engajamento demonstrado em vez de começar imediatamente na intensidade máxima. Essa mudança conceitual foi um dos resultados mais úteis do experimento.
O que eu não concluiria deste caso
Eu não diria que 45 segundos é universalmente correto, que quatro minutos é o intervalo ideal, que popunders mais frequentes nunca prejudicam o engajamento ou que uma média estável significa usuários não afetados. Também não generalizaria um único workload de produção para todos os produtos web.
Produtos diferentes têm usuários, expectativas, fontes de aquisição, padrões de uso e economias diferentes. O resultado é útil justamente por ser específico, não por provar uma regra universal.
A parte que mudou minha opinião
Antes do experimento, eu esperava uma relação quase mecânica entre pressão publicitária e engajamento: aumente bastante uma e a outra deveria cair visivelmente. O comportamento em produção foi menos organizado.
Aumentei a frequência até um nível que eu considerava relativamente alto. Os usuários continuaram interagindo e o engajamento agregado ficou dentro de sua faixa diária habitual. Isso não significa que o custo tenha sido zero. Significa que ele não foi grande o suficiente para criar, na métrica observada, o sinal óbvio que eu esperava.
A diferença entre “nenhum efeito” e “nenhum efeito óbvio nesta medição” é importante. Sistemas em produção raramente oferecem as histórias causais limpas que gostaríamos de ter.
Minha regra agora
Não pergunto mais com que frequência posso tecnicamente mostrar outro popunder. Pergunto quanto tempo de experiência ininterrupta um usuário novo deveria receber antes de a monetização começar, quanto uso ininterrupto um usuário engajado deveria ter antes de outro evento ser possível e se a publicidade adicional aumenta o valor total do usuário ou apenas o contador de impressões.
Para esta aplicação, mantive:
45 segundos antes da primeira elegibilidade
pelo menos 4 minutos entre eventos bem-sucedidos
Os números específicos são apenas uma implementação. A regra que eu reutilizaria é mais ampla:
Proteja o início da jornada do usuário, monetize mais o engajamento demonstrado do que a curiosidade inicial e avalie o resultado pelo valor em nível de usuário, não pelo volume bruto de publicidade.