Como eu trabalho
Regra em dado, não em código
Sempre que a regra é do negócio e muda na velocidade do negócio, ela sai do código e vira configuração. Fiz isso em pagamento, no motor de paradas da fábrica e num motor de ETL, três domínios sem relação nenhuma entre si. O custo é que a configuração vira parte crítica do sistema e precisa de cuidado próprio; o retorno é que o negócio deixa de esperar a fila de desenvolvimento.
Generalizar depois do terceiro caso
Abstração criada por antecipação quase sempre está errada. Só o terceiro uso mostra o que é essencial e o que era acidente do primeiro. Foi assim com as bibliotecas compartilhadas que outros times instalam, e com os 5 pacotes que eu publiquei: nenhum deles nasceu na primeira vez que o problema apareceu.
Estado derivado, nunca atribuído
Quando um agregado tem estado que depende das suas partes, esse estado é calculado, não escrito.
Quem escreve status = concluido cria a chance de o status mentir. Custa uma função de recálculo e
elimina uma categoria inteira de bug de suporte.
Idempotência em tudo que vem de fora
Integração externa reenvia, callback chega fora de ordem, robô reprocessa fila. Toda operação que recebe chamada de terceiro precisa responder a mesma coisa se for chamada duas vezes.
Um tradutor por plataforma, não um barramento genérico
Barramento único parece economia e vira gargalo: todo time espera a fila de um time, e a incompatibilidade de uma plataforma contamina o modelo comum. Um tradutor dedicado é mais código e menos acoplamento.
Offline como requisito, não como recurso
Num escritório, queda de rede é incidente. No chão de fábrica é terça-feira.
Quando estruturei a plataforma de monitoramento industrial, tratei operação sem rede como premissa desde o primeiro dia, e isso mudou a arquitetura inteira do cliente. Se tivesse ficado para a segunda fase, teria custado reescrita, porque “funcionar offline” não é camada que se instala sobre uma aplicação que assume conexão.
A política de conflito que ficou é última escrita vence, pelo relógio do aparelho, e ela tem uma fraqueza que eu aceito de olhos abertos: confia num relógio que não é meu. Aqui o risco é pequeno, mas em outro contexto seria a escolha errada. Ver Monitoramento industrial.
Dizer o que eu não sei
Perfil sem limite declarado obriga quem lê a descobrir os limites sozinho, e a primeira descoberta contamina tudo que veio antes. Prefiro que o limite esteja escrito antes de alguém precisar perguntar.
Em mais detalhe
Três dessas ideias têm nota própria, porque cada uma virou prática com regra e não só com intenção: Projetar antes de implementar é onde eu decido antes de escrever, Como eu depuro é o que eu faço quando algo já está errado em produção, e Revisão de código e padrão é como o padrão da casa deixa de depender de quem revisou.