Artigos sobre engineering
25 artigos de Felipe Guedes sobre engineering: System Design, arquitetura, engenharia full stack, auditoria e IA em produção.
- Entregar é um hábitoNinguém decide não entregar. Decide fazer mais uma coisa antes. Como construir o hábito que acaba com isso.
- Testando sistemas não determinísticosVocê não pode fazer assert em uma string exata de um modelo. Pode fazer assert em propriedades, distribuições e invariantes, e deve.
- A IA escreve o código. O sistema continua sendo seu.O modelo digita mais rápido que você. Mas não responde pelo que acontece às 3 da manhã. Essa parte ainda é sua.
- Onde as regras de negócio deveriam morar, e onde elas acabamA regra é escrita uma vez na especificação e cinco vezes no código. Como ela se espalha, e como trazê-la de volta para casa.
- As fronteiras são o produtoFuncionalidades vêm e vão. As fronteiras que você traça entre elas são o que você ainda vai estar pagando daqui a cinco anos.
- CI que te diz a verdadeBuild verde que mente é pior do que build nenhum. O que é preciso para o CI virar um sinal em que dá para agir.
- Idempotência é uma decisão de negócioChamar duas vezes e ter o mesmo resultado parece técnico. Definir o que é "o mesmo" é onde o negócio assina.
- Formulários são sistemas distribuídosUm formulário são duas máquinas, uma rede não confiável e um usuário que clica duas vezes. Desenhe como o sistema distribuído que ele é.
- Code review é revisão de riscoA maioria das revisões confere se o código está bonito. A pergunta que importa é o que quebra, para quem, e como você desfaz.
- Projetando APIs que podem ser usadas errado sem estragoClientes fazem retry, duplicam, mandam dado velho e chamam fora de ordem. Projete para que o uso errado comum seja inofensivo.
- Software que começa pela evidênciaToda afirmação que um sistema faz deveria saber dizer por quê. Como construo software em que a evidência vem antes da conclusão.
- Upload de arquivos, feito certo da primeira vezNunca deixe um arquivo passar pelo seu servidor. Assine, envie direto, verifique depois e trate todo nome de arquivo como hostil.
- Registros de decisão de arquitetura que alguém realmente lêA maioria dos ADRs é escrita uma vez e nunca mais aberta. Aqui está o formato e a disciplina que os fazem sobreviver.
- A primeira coisa que confiro em qualquer códigoAntes da arquitetura, antes dos testes, antes do README: encontro cada lugar em que os dados são escritos e conto.
- O prompt não é a especificaçãoO prompt diz ao modelo o que fazer hoje. A spec diz a todo mundo o que significa estar certo. Os times vivem confundindo os dois.
- Máquinas de estado para tudo que importaSopa de flags esconde contradições. Estados explícitos, tabela de transições e log de transições deixam bugs e relatórios óbvios.
- Validação não é uma faseTimes de software aprenderam que testar no final não funciona. Ferramentas de ciência precisam da mesma lição: valide cada etapa.
- Contratos antes do códigoEscreva a interface, o schema e os casos de falha antes da primeira linha de implementação. É a revisão de design mais barata que existe.
- A mentira do ambiente de stagingStaging prova que o código roda. Quase nunca prova que roda em produção, e fingir o contrário sai caro.
- Feature flags como arquiteturaUma flag é um branch do seu sistema que vive em produção. Trate como tal, ou ela vira o bug que ninguém consegue reproduzir.
- Reprodutibilidade é um problema de engenharia'Rodou no meu laptop' não é resultado científico. As ferramentas para resolver isso já existem, e são chatas.
- Versionar uma API é uma relação, não um númeroA versão na URL é a parte menos importante. O que importa é quem depende de você e o que você deve a essas pessoas.
- Exactly-once é uma promessa que ninguém cumpreEntregar e processar são promessas diferentes. At-least-once mais consumidor idempotente é a garantia que você realmente tem.
- O pull request que parece bemDiff pequeno, testes verdes, descrição clara, aprovação rápida. A anatomia da mudança que derrubou a produção mesmo assim.
- Structured outputs são contratosUm schema transforma o modelo de gerador de texto em componente integrável. Trate com a seriedade de uma API.