Pular para o conteúdo principal
Escritos · № 03

Notas longas sobre software, sistemas distribuídos e a arte de construir.

Um post, toda segunda-feira. Busque ou navegue pelo arquivo abaixo.

Todos os Posts
26 posts · Engineering
Engineering01

Database per service agora é de graça. Isso não é motivo para usar

Um free tier que dobra muda as entradas de uma decisão, não a decisão. Na primeira semana, previ que o Bullpen dividiria preços e histórico em dois serviços com dois bancos de dados. Depois o Neon fez database per service parecer de graça, e eu precisei decidir se isso mudava alguma coisa. Este é o histórico de decisões: cinco decisões de dados e deploy, cada uma com suas condições, as opções que pesei, por que uma venceu e o que me faria voltar atrás.

19 de out.
Engineering02

Arquitetura como código tem três funções: descrever, governar, lembrar

Na primeira semana do Bullpen, o modelo de arquitetura planejado ainda citava um provedor de ações que eu tinha recusado, e uma mudança no rodapé e um teste o seguiram. Nada falhou. Uso esse incidente e outros dois para defender que arquitetura como código tem três funções: descrever o sistema, governá-lo e lembrar por que ele tem a forma que tem. Depois sigo a primeira mudança real após as correções, o analytics de produto, pelas três: um registro de decisão antes que o modelo pudesse citá-lo, arquitetura construída e planejada que discordavam, e uma regra que compõe as duas em vez de editar qualquer uma delas.

11 de out.
Engineering03

Quando usar microsserviços em 2026: escalar, por si só, já não é o motivo

No dia em que o Dow registrou uma alta recorde para a época, os clientes da Robinhood não conseguiram operar da abertura ao fechamento. Separar a parte quente para que ela escale sozinha era a resposta antiga; hoje uma plataforma serverless faz isso por função. Abro esta série com o Bullpen, uma liga de paper trading sobre dados de mercado ao vivo, e defendo quando usar microsserviços em 2026: só por um motivo que eu consiga nomear, com um teste, uma medição ou uma fatura por trás.

4 de out.
Engineering04

Stamp vs Control Coupling: Onde Mora a Decisão de Escrita?

Control coupling e stamp coupling ficam lado a lado na taxonomia de Constantine, classificados piores que data coupling e pouco mais. Quando reli isso com um refactor real de applyDiscount em Kotlin à minha frente, o ranking não era a parte interessante. A pergunta que ele não responde é onde a decisão de escrita de fato mora.

7 de set.
Engineering05

Sua Fila Não Vai Esvaziar: A Aritmética da Recuperação de Backlog

Uma frota de consumidores aparentemente saudável pode ficar sentada sobre um backlog de 3 milhões de mensagens que nunca diminui. Estas são minhas anotações sobre a aritmética por trás disso: excedente = capacidade − chegada, drenagem = backlog ÷ excedente, e por que uma frota dimensionada para o regime estacionário tem capacidade de recuperação zero. Construí um pequeno simulador em TypeScript para observar a amplificação de retries estacionar uma frota corretamente dimensionada em uma falha metaestável, e deduzi quando descartar (shedding) supera drenar.

19 de ago.
Engineering06

Backpressure é um contrato que todo chamador precisa honrar, não uma configuração

Uma fila limitada em um serviço não faz nada se o chamador acima dele continuar empurrando. Estas são minhas notas sobre backpressure como um contrato ponta a ponta: o que o chamado deve, o que todo chamador deve de volta, e por que o incidente de amplificação de retries do Azure OpenAI é a cara de uma cláusula quebrada em hiperescala.

12 de ago.
Engineering07

O Bug Que Não Compilou: Portando um Erro de Reordenação para o Hydro

Plantei um bug de ordem de chegada em uma agregação fan-in escrita à mão em Rust, reproduzi uma subcontagem de 51% com um shuffle com semente e então portei a mesma lógica para o Hydro 0.17-alpha. O merge não ordenado se recusou a compilar meu fold não comutativo — estas são minhas anotações sobre o que essa garantia é, o que o manual_proof! apenas atesta e quando vale a pena pagar os custos de emenda.

5 de ago.
Engineering08

Arquitetura como Código com Structurizr DSL: Um Workspace C4 que Tanto o Revisor Quanto o Agente Conseguem Ler

Comitei um workspace Structurizr DSL ao lado de um serviço de billing em Kotlin/Spring e plugei o ArchUnit no Gradle, de modo que o CI quebra no instante em que o código diverge do desenho C4. Aqui está o workspace.dsl, o teste que o sustenta e o que mudou quando um agente de código passou a ler os dois arquivos em vez de adivinhar a partir dos pacotes.

2 de ago.
Engineering09

Engenharia Antes da Inferência: A Pergunta Que a Zero Token Architecture Está Realmente Fazendo

Ultimamente eu venho ouvindo uma frase que teria sido absurda três anos atrás: "não consigo fazer agora — fiquei sem tokens". Estas são minhas anotações depois de investigar a Zero Token Architecture — a ideia que Kelsey Hightower levou de um post descartável a uma keynote na PlatformCon — e o princípio que quero construir em cima dela: toda chamada de IA é uma decisão de arquitetura, e os custos que mais importam nunca foram os tokens.

26 de jul.
Engineering10

Quando o SQL Basta para Streaming: O Que a Manutenção Incremental de Visões Garante — e O Que Ela Recusa

A promessa de 2026 é que um job de stream escrito à mão se resume a um único CREATE MATERIALIZED VIEW, então construí um no RisingWave e passei meu tempo de estudo tentando quebrá-lo. Estas são minhas anotações sobre a consistência que a visão realmente entrega conforme os eventos chegam, por que cada join nela é uma conta de memória permanente, e as queries que se recusam a ser incrementais — com um consumidor Node acompanhando o changefeed da visão sobre o protocolo puro do Postgres.

19 de jul.