TL;DR: Boas práticas não deveriam mostrar apenas sua implementação, mas também em que contextos elas deram certo e, tão importante quanto, onde elas não são recomendadas.

É bastante interessante que todas nossas boas práticas de desenvolvimento de software sejam empíricas. Afinal, é pondo a mão na massa que você consegue experimentar diferentes abordagens e ver os prós e contras de cada uma delas. Grady Booch, no seu texto sobre RUP [1], diz que uma “boa prática é uma abordagem que se mostrou válida na indústria e que, quando combinadas, atacam as raízes de problemas em desenvolvimento de software; elas são boas práticas, não tanto porque elas conseguem quantificar seu valor, mas sim porque elas são comumente usadas na indústria em projetos de sucesso”.

Exemplo de nossas boas práticas nossas são “escreva métodos com poucas linhas”, “evite ifs aninhados”, “não tenha longas hierarquias de classes”, e assim por diante. O curioso é que, de vez em quando, queremos (ou eu quero, hehe?!) provar que uma boa prática é realmente a melhor. TDD é melhor. Agil é melhor.

Durante algumas viagens mentais, comparo um programador com um médico cirurgião. O médico sabe tudo do corpo humano, assim como o programador sabe tudo de código. Mas cada corpo é diferente do outro, assim como cada software é diferente do outro. Ele também deve ter suas boas práticas, como “segurar o aparelho X com a mão esquerda e Y com a mão direita é melhor”, ou mesmo “fazer o corte 2 cm abaixo da barriga pode dar mais espaço para manobra”.

Minha pergunta é: será que eles também ficam nessa maluquice de descobrir qual a melhor prática, ou simplesmente preferem conhecer várias delas, e usar sua experiência para escolher a melhor para aquele caso?

Talvez sempre que você bolarmos uma boa prática, devêssemos pensar não só em detalhar as técnicas para sua implementação, mas também deixar claro quais os contextos que elas deram certo, e quais os seus possíveis contras. Faça você o exercício: quando que TDD pode ser ruim? Quando que ágil pode ser?

PS: Apesar de ter alguns médicos na família, não entendo nada. Prova disso é que não soube dar exemplos de ferramentas usadas em cirurgias, e também não sei ao menos se o “fazer o corte 2cm abaixo”, faz sentido.

[1] Booch, Grady. “Software development best practices.” The Rational Unified Process: an introduction (1998): 3-16.