POTHIEDU Não Decore a Resposta. Entenda o Caminho

Dont Mess With The Puppy

Dont Mess With The Puppy

Por que eu parava de mexer nas coisas pequenas

Trabalhando com deploy de modelos de produção, aprendi uma coisa muito simples: tem momentos em que o melhor que você pode fazer é não tocar em nada. Eu chamo isso de dont mess with the puppy. A regra não é sofisticada, mas quase todo mundo ignora na hora errada. Quando um pipeline está instável, quando a latência sobe de manhã cedo sem motivo, quando logs aparecem e somem, a tentação é abrir o código e consertar. Geralmente você estraga algo que estava funcionando de qualquer maneira. O conceito funciona assim. Você tem um sistema que está se comportando mal, mas não de forma catastrófica. Erros esporádicos, degradação gradual. A primeira coisa que eu faço é anotar tudo sem mudar nada. Nos primeiros 30 minutos, apenas colete dados. Tempo de resposta, taxa de erro, memória, disco. Depois eu espelho isso para um arquivo. Só aí eu começo a suspeitar. Se o problema apareceu ontem à noite e sumiu hoje de manhã, se não tem padrão, é provável que seja ruído. E aqui eu tenho um case específico que me custou dois dias inteiros: um cluster de inferência com degradação assintótica de memória que parecia um leak até eu perceber que era garbage collection do Python sendo executado em intervalos irregulares porque o scheduler do Kubernetes estava migrando pods para nós mais carregados. O que eu "personialmente" encontrei foi que a solução era simplesmente aumentar o memoryLimit em 200 MiB, mas todo mundo insistia em refatorar o código. Eu parei de mexer e deixei o sistema resolver sozinho. Depois de uma semana, a instabilidade sumiu. Não porque eu tivesse corrigido algo, mas porque o Scheduler tinha redistribuído os nós de forma mais equilibrada.

o que não funciona

A coisa mais perigosa com essa abordagem é quando ela NÃO serve. Se o sistema está completamente fora, se há erro agudo, se a latência é 10x maior que o normal, isso não é um problema de "não mexer". Isso é um problema real. O dont mess with the puppy só se aplica a cenários de degradação gradual, erros esporádicos, instabilidade que não tem padrão. Se você tem um traceback claro, um erro de compilação, se o deploy quebrou, isso não é puppy. É algo que precisa de atenção imediata. Eu já vi engenheiros ficarem duas horas debugando um problema que era simplesmente uma versão nova da biblioteca com um bug conhecido que foi corrigido na release seguinte. Eles passaram o dia inteiro refatorando código quando a solução era atualizar três linhas no requirements.txt. Eu parei de interferir nessa situação e deixei o sistema atualizar sozinho.

pitfalls que começam sempre

Aqui vão duas insights contra-intuitivas que iniciantes geralmente perdem. Primeiro: não assuma que o problema é o código quando não tem padrão. Estatísticas são suas amigas. Tempo de resposta, taxa de erro, memória, disco. Se não tem padrão, é provável que seja ruído. Segundo: não confunda instabilidade com fragilidade. Um sistema instável pode estar funcionando perfeitamente bem se você deixar o Scheduler redistribuir os nós de forma mais equilibrada. Eu parei de interferir nessa situação e deixei o sistema resolver sozinho. O terceiro insight: não use essa abordagem como desculpa para não fazer seu trabalho. Se o sistema está completamente fora, se há erro agudo, se a latência é 10x maior que o normal, isso não é puppy. Isso é algo que precisa de atenção imediata. A regra "dont mess with the puppy" só se aplica a cenários de degradação gradual, erros esporádicos, instabilidade que não tem padrão. Eu parei de interferir nessa situação e deixei o sistema resolver sozinho.

Don't Mess With The Puppy! No toques al cachorro! Don’t touch the dog ...
Don't Mess With The Puppy! No toques al cachorro! Don’t touch the dog ...

alternativas quando falhar

Se essa abordagem falhar, se o sistema está completamente fora, se há erro agudo, se a latência é 10x maior que o normal, isso não é puppy. Isso é algo que precisa de atenção imediata. Recomendo um rollback para a última versão conhecida, ou um hotfix se o tempo de resposta for aceitável. Eu parei de interferir nessa situação e deixei o sistema resolver sozinho.