Serverless: matemática de custo em production
Tráfego esporádico economiza. Tráfego constante custa caro. Cold starts e lock-in têm preço mensurável.
Artigos técnicos e reflexões sobre engenharia de software & IA
Tráfego esporádico economiza. Tráfego constante custa caro. Cold starts e lock-in têm preço mensurável.
Reviewar screenshot de staging compartilhado não escala. Ambiente por PR com dados sintéticos transforma qualidade de review.
Backup sem restore testado é superstição. RPO/RTO definidos, estratégia 3-2-1 e simulação de desastre agendada.
Rede interna não é confiável por padrão. mTLS, JWT entre serviços e workload identity em ambientes reais.
K8s resolve problemas que times de 5 pessoas não têm. Custos ocultos, alternativas honestas e o ponto onde migrar vale.
Imagem de 1.2GB vira 80MB sem mudar aplicação. Build tools fora da imagem final cortam superfície de ataque junto.
.env commitado é o vazamento mais comum do mundo dev. Cofres, rotação e injeção segura de credenciais.
Lighthouse 100 não significa site acessível. Padrões ARIA corretos, foco gerenciado e testes com leitores de tela.
Google Docs estragou o padrão: usuários esperam edição simultânea sem conflito. Arquitetura de colaboração explicada.
Três produtos, três marcas, um design system. Tokens separam decisão de valor e tornam temas escaláveis.
Minificar JS dá 3% de LCP. Servir imagem correta dá 30%. Ranking das otimizações por impacto medido em produção.
Zustand, Jotai e signals reduzem o custo de re-render além do que a context API alcança. Critérios de escolha com benchmarks de render.
Server Components mudam regras de cache, estado e rendering. Os erros abaixo custaram dias de debug em projetos reais.
GraphQL elimina over-fetching e cria complexidade própria. Onde ganha de REST hoje e onde virou peso morto.
Logs dizem o que falhou. Traces mostram onde e por quê. Instrumentação OTel passo a passo com propagação de contexto.
Breaking change sem versionamento queima confiança. URI, header ou parâmetro? Contratos, deprecações e comunicação.
ALTER TABLE trava produção. Expand-contract separa mudança de esquema em fases compatíveis com versões convivendo.
Todo job roda duas vezes eventualmente. Idempotência, visibility timeout e padrões de retry que salvam o sistema.
Deploy e release são eventos separados. Flags desacoplam os dois e transformam rollback em toggle de configuração.
Coluna tenant_id, schema por tenant ou banco por tenant? Custos, riscos e quando migrar entre os três padrões.
Webhooks falham em silêncio: duplicados, fora de ordem, perdidos. Checklist completo para receber eventos sem perder nenhum.
A escolha de mensageria define custo e operabilidade. Comparação por throughput, ordenação e TCO.
Prompt pedindo JSON quebra em produção. Constrained decoding, validação em camadas e fallback.
O usuário espera resposta em chunks. SSE cobre a maioria dos casos com menos complexidade que WebSockets.
Agentes quebram em produção por falta de guardrails. Padrões de tool use, loops de agente e limites de autonomia.
A conta de LLM multiplica sem governança. Três alavancas cortam 70% sem perder qualidade.
Testes unitários não cobrem saídas probabilísticas. Golden datasets, juízes automatizados e gates de regressão.
Mesmo corpus de 1 milhão de documentos, mesmas consultas. Recall, latência p95 e custo operacional lado a lado.
Comece por prompting. RAG resolve conhecimento. Fine-tuning resolve comportamento. Custos reais de cada caminho.
Chunking ingênuo gera resultados irrelevantes. Pipeline completo: chunking semântico, embeddings, busca híbrida e reranking.
queryKey define identidade, staleTime define frescor, mutação define invalidação. TanStack Query assume o cache de servidor da sua aplicação React.
Generics, conditional types e mapped types resolvem problemas específicos de reuso de código e type safety.
Camadas de cascade eliminam a guerra de especificidade; container queries fazem o card medir o próprio container. Migração sem reescrever o CSS.
A maioria das APIs trata erros de forma inconsistente. Um padrão bem definido reduz bugs de integração e facilita debug.
Cachear leva dez linhas de código. Decidir o que entra, quando expira e quem apaga leva o resto do projeto. Estratégias com Redis, headers de CDN e cache warming, com código.
Cenário de rampa, threshold de p95 que falha o build e k6 no CI. Load testing transforma latência em número que o time defende e investiga com trace.
Cobertura de unit test não percorre o caminho do cliente. Playwright cobre login, checkout e estados de erro com fixtures, Page Objects e CI. Exemplos prontos para copiar.
State remoto com lock, módulos versionados e plan no PR. Pipeline Terraform que transforma console drift em diff revisável antes de cada merge.
Cinco squads no mesmo repositório travam merge e build. Micro-frontends liberam o time e cobram preço em runtime, deploy e debug. Critérios de adoção e custos reais.
Injection e broken access control lideram o OWASP Top 10. Teste com dois usuários, CSP, Argon2 e o checklist que fecha um risco real por vez no CI.
Um provedor externo cai e sua fila engorda. Circuit breaker, retry com jitter, bulkhead e timeout: os quatro padrões que cortam a cascata de falhas.
Token bucket, fixed window e sliding log resolvem problemas diferentes. Chave por IP, usuário ou API key, headers que o cliente lê e limite por rota. Código com Redis e express-rate-limit.
Authorization code com PKCE substituiu o fluxo implícito. Fluxo completo, validação de ID token e o padrão BFF para SPA sem token no localStorage.
Merge grava um commit com dois pais e preserva o histórico como aconteceu. Rebase repassa seus commits sobre a main e deixa a linha do tempo em linha reta. As regras de cada um e o fluxo de PR que combina os dois.
Um EXPLAIN ANALYZE honesto mostra a varredura de 2 milhões de linhas. Guia de B-tree, GIN para JSONB, índice parcial e coberto no PostgreSQL em produção.
Uma linha JSON por evento, campos fixos em toda a aplicação e request_id propagado até o último serviço. O schema de log, a implementação com pino e o limite entre log e métrica.
Access token de 15 minutos, refresh token em cookie HttpOnly, lista de revogação no Redis e validação de claim em cada request. O fluxo completo em Node, do login ao logout.
Os cinco princípios, o padrão de código que viola cada um e a versão que resolve. Onde aplicar SOLID no projeto e onde ele vira camada inútil.
O objetivo do review de um Staff Engineer é o desenvolvimento do time. Quatro anti-patterns que enfraquecem isso, o formato de comentário que transfere raciocínio e quando sair do teclado e conversar.
Cinco patterns que aparecem em produção, implementados em TypeScript: Repository, Strategy, Observer, Decorator e Builder. Mais o limite de quando nenhum deles vale a entrada.
Karpathy popularizou o termo em 2024: descrever a tarefa, aceitar o código e seguir em frente. O método entrega em protótipo. Em produção com usuário real, o custo do código que ninguém leu aparece em outage, dado exposto e plantão sem contexto.
Um workflow de 88 linhas que roda lint, typecheck, testes, build e deploy. Cada seção explica uma escolha de configuração e o problema que ela resolve.
Cada flag do strict mode captura uma categoria de bug de runtime. As quatro flags do strict, duas fora dele que valem o custo, e a migração de legado sem parar o time.
Monorepo resolve compartilhamento de código e refatoração atômica, e cobra setup de tooling e disciplina na fronteira de pacotes. Critérios de adoção, Turborepo contra Nx, e estrutura de pastas.
Cobertura conta linhas executadas, não bugs pegos pela suite. Comportamento na frente de implementação, os casos que importam, e três números que medem confiança.
Server Component não envia JavaScript para o cliente. Client Component precisa de state, effects e handler. Regras de composição, props que serializam e o cascata de await que custa segundo por request.
PR revisável em 20 minutos: título com tipo, descrição com o quê/por quê/como revisar, uma responsabilidade, formatação separada da lógica, evidência visual. Checklist antes de pedir revisão.
Cobertura de código novo, lint, análise estática e type safety como condição de merge. Três calibrações para quando o assistente de IA abre mais PR do que o time revisa.