Estou desenvolvendo software há muitos anos. Décadas. Aprendi muito ao longo do caminho e ouso pensar que colecionei alguma sabedoria sobre o desenvolvimento de software que vale a pena compartilhar com outras pessoas. Em algum momento, você pensa: “Sim, eu tenho um controle sobre essa coisa”.

E de vez em quando, você tem alguma revelação que é o culminar do que aprendeu ao longo do caminho. Nunca esquecerei o momento em que entendi a injeção de dependência. De curso Você gostaria de passar em uma abstração, em vez de criar uma implementação!

Eu tive uma revelação semelhante esta semana. Tenho certeza de que há muitos desenvolvedores de Sager entre vocês que já descobriram isso, mas me impressionou de repente que um bom design de software é sobre manter suas opções em aberto o maior tempo possível – que você deve adiar qualquer decisões para o muito último minuto.

Agora, isso parece contra-intuitivo. Sempre nos disseram para planejar tudo com antecedência. Que não devemos iniciar o projeto sem pensar em todos os detalhes que podem ser pensados. Que precisamos descobrir agora para que não haja surpresas.

Eu posso apenas imaginar a conversa:

Diretor de Engenharia: “Como está o planejamento no novo projeto?”
Líder de desenvolvimento: “Ótimo, estamos prontos para começar”.
Diretor de Engenharia: “Que banco de dados você escolheu?”
Líder de desenvolvimento: “ainda não decidi”.
Diretor de engenharia: “Autenticação?”
Líder de desenvolvimento: “Ainda não”.
Diretor de engenharia: “Espere … o quê?!”