Posts

Ano
Tópico
performanceobservabilidademedicao
9 min de leitura

A Cauda É Uma Requisição Travada

O ADR modelou a cauda do fan-out e produção discordou nas duas direções. O maior fan-out foi 1.023 destinatários e não 308, e os dois mais lentos não foram os maiores: um punhado de requisições travadas arrastou um fan-out de 3 segundos para 18. Por que o timeout ficou como estava, e o que um veredito limpo de sombra não te diz.

arquiteturaprocessodesign-de-sistemas
8 min de leitura

Um Registro de Decisão Que Discute Consigo Mesmo

Seis correções datadas ficam inline neste ADR, acima do raciocínio que elas derrubam, incluindo uma intitulada 'este ADR exagerou o que nós possuímos'. Sobre por que um registro editado para parecer certo vale menos que um que mostra a conta, e o estágio planejado que seria código morto.

arquiteturaawsbackend
5 min de leitura

Removendo um Gargalo: Uma Ordem de Leitura

Oito posts sobre um incidente de 48 horas em notificações push causado por uma cota que a AWS não levanta, e a migração que a removeu da arquitetura em vez de andar devagar embaixo dela. O que cada um cobre, e a ordem que faz eles fazerem sentido.

awsmigracaooperacoes
12 min de leitura

A Metade do Cutover Que Ninguém Agenda

O cutover parou de publicar no SNS e nunca tocou no provisionamento, então o serviço passou um dia criando um parque inteiro de tópicos para notificações que o SNS já não carregava. Parar a criação derrubou o throttling em ~500x, num penhasco. Sobre derivar a supressão do predicado que já governa a entrega, e uma chave de dedup que apontava para algo a ponto de deixar de existir.

testesobservabilidademigracao
9 min de leitura

O Que uma Sombra Mede

Rodar um fan-out novo ao lado do antigo e comparar parece um teste simétrico. Os dois lados leem tabelas diferentes escritas em momentos diferentes, então a divergência é a medição e não ruído. Sobre um veredito assimétrico, por que um instrumento que nunca roda não valida nada, e fazer cada ausência explicar a si mesma.

arquiteturaawsdesign-de-sistemas
9 min de leitura

Remova o Gargalo, Não Ande Devagar Embaixo Dele

Quatro opções para uma arquitetura de push que bateu numa cota que a AWS não levanta. Por que um broker não substitui o SNS, por que Kafka é a resposta errada a 1,2 mensagens por segundo, e por que mover custo de inscrever para publicar estava certo aqui: um usuário que se inscreve um segundo antes do gol agora recebe aquele gol.

arquiteturaprocessodesign-de-sistemas
5 min de leitura

A Mitigação Que Especificamos e Jogamos Fora

Um orçamento de taxa com prioridade foi especificado, levado até o checkpoint de aprovação e então deliberadamente abandonado. Três das quatro funções que ele protegeria são apagadas pela correção real, então seria código morto no dia em que entrasse. Sobre quando uma mitigação temporária se paga e quando não.

awsarquiteturaincidente
8 min de leitura

O Teto Que Você Não Pode Levantar

Notificações push pararam de chegar aos usuários por 48 horas porque todo o crescimento do design passava pela única API da AWS com uma cota rígida e não ajustável. Sobre uma espiral de throttling que não se recupera sozinha, uma execução que registrou sucesso enquanto 50.000 inscrições falhavam, e 25.297 peças de estado de roteamento na nuvem para 4.976 dispositivos.

goawsperformance
9 min de leitura

Concorrência Não É Throughput

Um comentário afirmava que 50 workers paralelos deixavam folga sob uma cota de 100 chamadas por segundo. Cinquenta chamadas concorrentes a 30ms cada dão cerca de 1.600 por segundo. Sobre a diferença entre uma contagem e uma taxa, por que um limiter que dorme por chamada não limita nada, e onde cobrar o orçamento para que os retries dentro do seu SDK também sejam contados.

arquiteturamigracaobackend
6 min de leitura

A Extração de Assinaturas: Uma Ordem de Leitura

Dezessete posts sobre extrair a metade de assinaturas e pagamentos de um monolito Django para um serviço em Go — medida antes de ser desenhada, faseada para que cada passo pudesse ser desfeito, e provada contra 243.325 compras reais antes de responder a um único usuário. O que cada um acrescenta, e a ordem que faz eles fazerem sentido.

testesprocessoverificacao
9 min de leitura

Os Testes que Guardam o Processo Envelhecem Mais Rápido

Gateamos cada fase desta extração numa verificação mecânica: cada critério de aceitação precisa de um teste que passa, e o veredito é um exit code. Ela pegou defeitos reais. Também produziu três lições inteiramente sobre ela mesma — porque um teste cujo sujeito é a forma do seu código é invalidado por refatoração por design, e toda falha falsa é um convite para enfraquecê-lo.

observabilidademedicaodebugging
12 min de leitura

Medindo Produção e Acreditando na Coisa Errada

Portar um serviço significa que toda decisão de escopo se apoia num fato sobre produção. Uma query de log deu match em 0 de 292.932.577 registros e se leu como resposta definitiva — o formato que ela buscava era 100% do tráfego vivo. Uma amostra de 500 linhas reportou 96% e o corpus completo reportou 80%. Sobre a diferença entre 'nenhum existe' e 'minha query não consegue vê-los', e o controle positivo que separa os dois.

operacoesdeployconfiguracao
14 min de leitura

O Repositório Não É o Sistema em Execução

Três vezes num projeto, código que estava correto, revisado, merjado e deployado não fez absolutamente nada — porque o valor de que ele precisava nunca atravessou uma das nove fronteiras entre onde é declarado e onde é lido. Sobre um sintoma que quatro bugs independentes produziram, um erro de permissão que chegou disfarçado de ausência, e quatro endpoints que passaram em todos os testes e responderam 404.

sistemas-distribuidosmodelagem-de-dominioconfiabilidade
13 min de leitura

Quem Recebe PRO: Entitlement Através de Quatro Sistemas

Conceder um tier pago parece definir um booleano. É um predicado sobre estados de assinatura com os quais ninguém concorda, aplicado a quatro sistemas sem transação entre eles. Sobre ordenar escritas pelo que cada falha parcial deixa para trás, recusar compensação, uma decisão de produto que concedeu acesso a precisamente ninguém, e um enum a que se fazem duas perguntas que parecem uma.

migracaoarquiteturago
12 min de leitura

Fidelidade Vence Arrumação: Portando um Serviço de Pagamentos

Quando você extrai um serviço e as duas cópias escrevem no mesmo banco, a condição de sucesso deixa de ser 'funciona' e passa a ser 'concorda'. Sobre um comentário que teria nos feito recusar assinantes pagantes, duas esquisitices que portei de propósito, e o único lugar onde divergimos deliberadamente — mais a mudança de auth que parecia otimização e era decisão de segurança.

automacaobashgoogle-sheets
7 min de leitura

Derivando Minha Planilha de Horas do Que Eu Realmente Fiz

Três fontes — o board, os registros de execução do meu próprio fluxo, e o git — combinadas em uma linha por dia trabalhado. Obter os dados foi fácil; a versão ingênua produziu 58 atividades para uma única terça-feira. Sobre por que cada filtro precisou justificar sua existência, e as quatro formas em que trabalho duplicado chega vestido de outra coisa.

agentes-iaworkflowexperiencia-do-desenvolvedor
8 min de leitura

Um Dia Deixando um Agente Conduzir Meu Fluxo de Trabalho

Especificações barradas por uma auditoria mecânica, progresso espelhado no board do time, uma planilha de horas preenchida a partir do que realmente aconteceu. Um relato honesto de um dia construindo e depurando esse arranjo — incluindo os três work items que criei sem querer num board de produção, e a única falha que apareceu em absolutamente todos os componentes.

azure-devopsbashapi
7 min de leitura

Azure DevOps Boards com Nada Além de curl e jq

Um cliente completo de Boards — buscar, criar, transicionar, linkar, reparentar, WIQL — em um único script bash sem SDK. A maior parte do post são as quatro falhas que o moldaram: um problema de permissão que chega como HTTP 500, pais que se marcam como seu trabalho, uma flag que órfã cartões em silêncio, e dois tokens de tamanho idêntico onde um estava revogado.

frontenddebuggingjavascript
6 min de leitura

Sua Detecção de Mudança Nunca Dispara Se o Payload Carrega um Relógio

Uma guarda comparava payloads JSON inteiros para evitar re-renders desnecessários. O payload incluía um timestamp gerado, então ela nunca coincidiu uma única vez — a interface se reconstruía a cada 2,5 segundos e te jogava de volta ao topo de qualquer documento que você estivesse lendo. Sobre campos voláteis, e por que condicionar um evento a 'mudou?' pode perder esse evento permanentemente.

debuggingopsunix
6 min de leitura

Um Health Check Que Passa Não Significa Que É o Seu Build

O rebuild funcionou, o restart falhou em silêncio, e o endpoint de health continuou respondendo — do binário antigo. Relatei uma mudança como no ar quando não estava. Sobre verificar que o processo que você iniciou é o que está servindo, e por que a invocação do lsof que todo mundo copia está errada de duas formas independentes.

bashshelljq
7 min de leitura

Oito Formas do Shell Comer Meus Dados em Silêncio

Cada uma delas produziu nenhum erro, nenhum aviso, e um resultado errado de aparência plausível. Coletadas de um único dia escrevendo cola em bash, jq e git: heredocs que roubam o stdin, tab como espaço em branco do IFS, bytes NUL desaparecendo em substituição de comando, o ponto do jq mudando de contexto depois de um pipe, e quatro outras.

ferramentasexperiencia-do-desenvolvedorsincronizacao
7 min de leitura

Quando o Estado É Indexado por Caminho Absoluto, Sincronizar Arquivos Não Basta

Uma ferramenta que indexa estado por projeto usando o diretório de trabalho absoluto. Copie os arquivos para uma segunda máquina com um home diferente e você não funde o histórico — você acumula cópias paralelas dele. Um repositório tinha três. Sobre identificadores derivados de fatos do ambiente, e por que fazer os ambientes concordarem vence traduzir para sempre.

agentes-iaworkflowautomacao
8 min de leitura

Instruções São Ignoradas. Comandos Não.

Três vezes em um único dia, um passo claramente documentado no meu fluxo de trabalho foi ignorado. A correção nunca foi escrever melhor — foi embutir o passo no comando que já rodava naquele momento. Sobre por que procedimento escrito se degrada, por que 'igual a antes' é um cheiro de documentação, e o que significa tornar um passo impossível de esquecer.

agentes-iatestesci
7 min de leitura

Faça o Portão Ser Mecânico: Códigos de Saída em Vez de Adjetivos

Se a definição de pronto é uma frase, ela vai ser negociada. Sobre tornar critérios de aceite executáveis, deixar um código de saída de processo ser o veredito, recusar registrar uma lição sem evidência por trás — e a lacuna que encontrei entre dez critérios que tinham testes e zero que haviam passado.

arquiteturatomada-de-decisaodocumentacao
6 min de leitura

Um Spike de Migração Deveria Produzir uma Lista de Perdas, Não uma Recomendação

O resultado de uma avaliação não deveria ser um veredito em que alguém tem que confiar — deveria ser um documento com o qual a pessoa possa discordar. Sobre ranquear lacunas por impacto em vez de tabelar features, estabelecer o tier mínimo por capacidade contra o catálogo que você de fato atende, e tornar o custo do "sim" explícito.