Power Insights

Marcos Gallo

3 · abertura

Todo dado operacional é uma sequência que não termina.

Construo os sistemas que extraem decisão dessa sequência. Este site é sobre como eu penso esses problemas — não sobre o que eu vendo.

π não acaba e não se repete. Extrair sentido de uma sequência assim é, literalmente, o trabalho.

1 · ofício

O que eu construo

Sistemas internos para operações que trabalham em campo. Nada disso é produto de prateleira: cada um nasceu de um problema que já existia e era resolvido na mão, todo dia, por alguém.

  • Painéis que abrem de manhã

    O número precisa estar pronto antes da primeira reunião do dia, calculado por uma regra só, igual para todo mundo. Isso é menos sobre gráfico e mais sobre pipeline confiável rodando de madrugada.

  • Cruzamentos entre sistemas que não se falam

    Dois sistemas com cadastros independentes, sem chave em comum, cada um com sua versão do mesmo nome. O trabalho é achar a ponte — e admitir o que ela não alcança.

  • Coleta que ninguém precisa lembrar de fazer

    Quando a origem não tem API, a coleta vira engenharia: contornar política de segurança do navegador, manter sessão, validar formato na entrada e falhar alto quando a origem muda.

4 · método

Como eu penso um problema de dados

Estas são regras que custaram alguma coisa para aprender. Todas vieram de sistema em produção, não de leitura.

  1. 4.1

    Três bugs podem parecer um só

    Uma consulta filtrada por permissão levava 4,5 segundos para ler mil e quinhentas linhas, estourava o tempo do cliente e o usuário via "sem dados". Eram três causas empilhadas: a função de permissão sendo chamada uma vez por linha porque o planejador não conseguia embutir a função; o cache de plano descartando o filtro depois de algumas execuções, o que fazia usuário restrito enxergar tudo; e a policy da tabela reavaliando a mesma função, anulando o ganho. Cada uma explicava o sintoma sozinha. Só a medição separou as três.

    4,5 s → 21 ms

  2. 4.2

    O dado que mente sem dar erro

    Um horário gravado sem fuso explícito é lido como UTC. O painel passou a mostrar entrada às cinco da manhã. Nenhum teste quebrou, nenhum log acendeu, nenhum alerta disparou — o bug só apareceu porque alguém da operação olhou e disse que ninguém entra às cinco. Desde então, data e hora entram no sistema com fuso explícito ou não entram.

  3. 4.3

    Empurre o trabalho para onde o dado está

    Cruzar duas tabelas no navegador significa baixar as duas. Fazer o mesmo cruzamento no banco significa trazer só o resultado. A diferença aparece no dia em que a tabela cresce: sessenta e sete mil linhas processadas no servidor viram sessenta linhas na resposta, e megabytes de tráfego viram kilobytes.

    67 mil linhas → 60 linhas

  4. 4.4

    Código detecta, modelo redige

    Toda a lógica que produz número é determinística e vive no código: tendência, distância da meta, quem puxou o resultado para baixo. O modelo de linguagem recebe isso pronto e só transforma em texto. Ele nunca calcula. É o que impede o relatório de inventar um número plausível — e o que mantém cada afirmação rastreável até a consulta que a gerou.

  5. 4.5

    Diga o que o dado não alcança

    Ao cruzar dois cadastros sem chave comum, a maior parte casa pelo código e uma boa fatia do resto casa pelo nome. Sobra uma porcentagem que não casa de jeito nenhum, porque o nome diverge entre os dois sistemas. Esse número fica visível no resultado. Um relatório que afirma cobrir tudo é menos útil que um que declara a própria margem.

    76% recuperados · 24% fora

  6. 4.6

    Confiabilidade acima de sutileza

    Troquei um modelo mais capaz por um mais simples porque o mais capaz devolvia estrutura instável quando a entrada crescia. Cinco tentativas de contornar não resolveram. Um sistema que roda sozinho todo dia não pode depender do resultado bom na média — precisa do resultado válido sempre.

  7. 4.7

    A aba aberta ontem ainda está rodando o código de ontem

    Alguém deixou o sistema aberto, voltou no dia seguinte e enviou um arquivo. O navegador executou a versão antiga do código, que escreveu no banco sem uma validação que já existia havia semanas. Atualizar o service worker automaticamente não resolve esse caso: a aba já aberta continua com o código velho até recarregar. Passou a existir um aviso explícito de nova versão.

1 · sistemas

Três sistemas, três problemas diferentes

Estão em produção e são usados todo dia. Descritos pelo problema técnico, porque é a parte que interessa.

  • 01

    Indicadores de operação

    problema
    Cada número vinha de uma planilha diferente, com cadência de atualização diferente, e cada área calculava do seu jeito.
    desafio técnico
    A armadilha não era o cálculo — era a data. Usar "a atualização mais recente do mês" como filtro único traz campos vazios para tudo que subiu antes, e campo vazio vira zero, e zero vira média despencando. Cada indicador precisa carregar a própria data de referência.
  • 02

    Auditoria de jornada

    problema
    Conferir jornada contra atendimento era feito por amostragem manual, o que na prática significa não conferir.
    desafio técnico
    Os dois sistemas não compartilham chave. Um deles nem sempre preenche o identificador do profissional em certos tipos de registro. Foi preciso importar o cadastro mestre como ponte, cair para o nome quando o código falta, e medir quanto sobra fora.
  • 03

    Coleta automatizada

    problema
    A origem não tem API e exige uma sessão autenticada no navegador. Extrair um mês inteiro à mão seriam mais de mil e quinhentos downloads.
    desafio técnico
    A política de segurança da origem bloqueia script externo e chamada de rede para fora. A saída foi rodar dentro da própria aba, abrir uma segunda janela antes de qualquer espera para não ser barrado pelo bloqueador de pop-up, e passar os dados por mensagem entre janelas — que não passa por aquela política.

5 · ferramenta

Com o que eu trabalho

Agrupado por frequência de uso, não por autoavaliação. O que está em cima aparece todo dia; o que está embaixo entra quando o problema pede.

Todo dia

  • TypeScript
  • React
  • PostgreSQL
  • Supabase
  • Tailwind

Com frequência

  • Vite
  • Next.js
  • Deno (Edge Functions)
  • Vercel
  • PL/pgSQL

Quando o problema pede

  • Puppeteer
  • SheetJS
  • Web Push
  • PWA / Service Worker
  • APIs de modelo de linguagem

A lista é curta de propósito. Ferramenta que entrou uma vez e não voltou não é stack, é anedota.

9 · contato

Contato

Se algo aqui ressoou com um problema seu, escreve. Respondo melhor a pergunta específica que a apresentação.