Voltar para o Blog
Construindo em Público4 / 10
Construindo em PúblicoParte 4 de 10

Health score: transformar dezenas de sinais numa nota que o CSM confia

4 min de leitura
Compartilhar
Construindo em Público

Um health score é fácil de construir e difícil de fazer valer alguma coisa. Você pega vinte e tantos sinais de uma rede de postos — uso da plataforma, frequência de contato, situação financeira, engajamento no WhatsApp, tickets de suporte, tempo de contrato — joga numa fórmula, e sai um número. A parte difícil nunca foi a matemática. Foi fazer o CSM olhar aquele número e confiar nele o suficiente para agir. Este é o post sobre a parte difícil.

A matemática é a parte fácil

Combinar dezenas de sinais numa nota única é um problema conhecido. Você normaliza cada sinal, dá um peso, agrega. Dá para fazer num fim de tarde. A IA inclusive ajuda a esboçar a estrutura rápido: quais dimensões agrupam quais sinais, como ponderar, como lidar com sinal faltante.

O problema é que um número sozinho não convence ninguém. Se a tela mostra "Rede X: saúde 42" e o CSM acabou de falar com o dono da rede, que estava eufórico com os resultados, uma de duas coisas acontece: ou ele desconfia do score, ou ele desconfia do próprio faro. Nas duas, você perdeu. Um score que contradiz a realidade sem explicar por quê não é um dado, é um ruído com aparência de autoridade.

Por isso a decisão de design mais importante não foi a fórmula. Foi que o score precisa se explicar. Ao lado da nota, o CSM vê o que puxou ela para baixo: "sem contato há semanas", "faturamento em atraso", "queda no uso". A nota é o resumo; a explicação é o que a torna acionável. O CSM não precisa acreditar no número por fé — ele vê a conta.

Por que uma nota errada e confiante é pior do que nenhuma

Essa é a lição que orientou o resto. Um score ausente é um problema óbvio: o CSM sabe que não sabe, e vai atrás. Um score errado com cara de certo é um problema silencioso: ele age com base numa mentira sem perceber que é mentira.

Os jeitos de estar confiantemente errado que mais nos preocuparam:

  • Cache velho. O score foi calculado, guardado, e o mundo mudou. A rede que aparece "saudável" na tela quebrou faz duas semanas; o número só não foi atualizado.
  • Sinal faltante tratado como sinal bom. Se "sem tickets de suporte" e "não temos dado de tickets" caem no mesmo balde, uma rede sobre a qual você não sabe nada parece uma rede saudável. É o pior tipo de falso positivo.
  • Peso que não corresponde à realidade do negócio. Um sinal tecnicamente disponível mas que, na prática, quase nunca é preenchido pode dominar a nota sem nunca ter sido a intenção.

A postura que a gente adotou: na dúvida, o score se declara incerto em vez de fingir certeza. É melhor mostrar "dados insuficientes para esta rede" do que emitir um 80 que ninguém deveria levar a sério.

Cadência de recálculo e a briga contra o cache velho

Score é dado vivo. Ele decai. E a maior fonte de desconfiança que a gente enfrentou não foi fórmula ruim — foi cache defasado.

O recálculo roda como um job agendado no Trigger.dev, recomputando a saúde das redes em lote, em ciclo. Simples no conceito, cheio de armadilha na prática:

  • N+1 mata o cron. Recalcular rede por rede, uma query de cada vez, sobre milhares de redes, faz o job estourar o tempo. A saída foi paralelizar e buscar em lote em vez de serial. Um cron que timeouta é um cache que nunca atualiza — o pior dos mundos, porque parece que está funcionando.
  • Trigger por linha desativado num reprocesso em massa já nos deixou com um cache silenciosamente velho: a maioria das notas parada, e ninguém sabendo. A correção foi repensar como o valor mais recente é materializado e atualizado a cada carga, em vez de depender de um gatilho frágil.
  • A cadência é um tradeoff explícito. Recalcular de menos deixa o score velho; de mais desperdiça recurso e pode brigar com o pooler do banco. A frequência certa é a mais espaçada que ainda mantém a nota crível para quem age sobre ela.

O que isso ensina sobre construir com dados

Health score é um caso concreto de uma verdade mais geral: a qualidade de um número não está na fórmula, está na confiança que ele merece. E confiança se constrói com explicabilidade, com honestidade sobre incerteza, e com o dado estando fresco quando alguém olha.

Se você é o tipo de builder que se incomoda com um dashboard bonito sobre dado podre, que prefere mostrar "não sei" a chutar com confiança, e que entende que o cron das duas da manhã é tão parte do produto quanto a tela — esse é o tipo de problema que você vai encontrar aqui o tempo todo. A nota é a ponta visível. O que a sustenta é o trabalho invisível de merecer a confiança de quem depende dela.

Curtiu como a gente pensa?

É assim que trabalhamos todo dia.

Se esse jeito de pensar é o seu, vem construir com a gente — dá uma olhada nas vagas abertas.

Ver vagas