Empirismo e Racionalismo no desenvolvimento de software
O que Hume, Descartes e outros filósofos podem nos ensinar sobre desenvolvimento de software
Mas de onde saiu esse post?
Antes de mais nada, um esclarecimento: não, eu não estou sob efeito de entorpecentes. Mas recentemente comecei a estudar filosofia e tomei gosto pela coisa. E enquanto eu estudava minha cabeça não parava de conectar conceitos e questionamentos filosóficos com técnicas e comportamentos que estamos habituados a ver no mundo do desenvolvimento de software. Fiz logo uma lista sobre possíveis posts que gostaria de escrever, então esse aqui definitivamente não será o último post sobre filosofia e desenvolvimento.
Ou seja… esse post viajado não será o último post nessa linha. :)
Descartes era uns 50% ágil

Descartes era um racionalista, o que significa que ele acreditava que a melhor forma de encontrar a verdade era através do pensamento. Algo que poderia nos fazer pensar nele como um gerente de projetos tradicional, sentado em sua mesa pensando em cada detalhe do plano que devemos seguir para desenvolver nosso produto.
Mas pensar nele dessa forma não seria justo, porque afinal em seu método cartesiano podemos encontrar idéias muito similares àquilo que praticamos no desenvolvimento ágil de software:
Quebrar problemas grandes em problemas menores
Ordenar os problemas e resolver os mais simples primeiro
Dá até pra imaginar ele escrevendo testes unitários e quebrando itens do Product Backlog, né? Mas tem um problema: Descartes acreditava que poderíamos alcançar idéias “claras, objetivas e imutáveis”, e que poderíamos usá-las como blocos de LEGO para construir outras idéias maiores.
É como se ele fosse a favor de escrever testes unitários em um primeiro momento para dar clareza e objetividade, mas deixasse de enxergar valor em manter esses testes no repositório depois que as funções fossem implementadas porque aquela idéia já foi validada e consolidada.
Ou seja: Descartes buscava uma verdade imutável, mas o processo para chegar até essas verdades era iterativo.
Mas se Descartes estava parcialmente certo sobre método, onde ele se perdeu? É aí que entra David Hume com uma ideia revolucionária: e se a experiência for mais importante que o raciocínio puro?
Hume teria sido um ótimo Scrum Master
David Hume teve a vantagem de nascer uns 120 anos depois de Descartes e com isso ter mais material para estudar e explorar. Ele argumentava que o conhecimento real só pode ser obtido através da experiência, e que apenas sentar e refletir ou estudar não nos geraria nenhum novo fato, e sim meras especulações.
Mas mesmo sendo um fã inveterado de experimentos ele sabia reconhecer suas limitações:
Embora a experiência seja nosso único guia no raciocínio sobre questões de fato, deve-se reconhecer que este guia não é totalmente infalível e que, em alguns casos, pode conduzir-nos a erros - David Hume
Através desse pensamento ele levantou alguns problemas (e refletiu sobre outros que já haviam sido previamente levantados por outros filósofos) que são facilmente reconhecíveis no mundo do desenvolvimento de software:
O problema da indução: A experiência passada não garante a repetição de resultados futuros. Popularmente conhecido como: se funciona na minha máquina, funciona no servidor.
O problema da causalidade: Só porque um evento A ocorreu seguido de um evento B não significa que um causou o outro. Popularmente conhecido como: para replicar o bug que o cliente encontrou basta seguir estes passos aqui.
A falibilidade do experimento: um experimento sempre pode falhar ou nos levar a conclusões erradas. Popularmente conhecido como: se cobrirmos 100% do código com testes nunca mais vamos ter bugs.
É como diria Sílvio Santos e seu auditório: Eu só acredito… VENDO!
Essa máxima é o que deveria reger equipes Scrum por todo o mundo, já que o framework tem o Empirismo como parte de seu alicerce. Se David Hume fosse um Scrum Master e visse equipes que fazem Sprint Reviews com apresentações de slides ou Dailies que são basicamente um Status Report ele definitivamente não ficaria parado assistindo.
Se Hume fosse Scrum Master hoje, ele provavelmente:
Insistiria em demonstrações de software funcionando
Priorizaria métricas reais sobre estimativas teóricas
Questionaria qualquer "verdade absoluta" sobre processos
Legal… mas dá pra concluir alguma coisa útil sobre isso tudo?
Bem, primeiramente eu não sou especialista em filosofia e tomei o máximo de cuidado pra não cometer nenhum crime ao mencionar esses filósofos e seus pensamentos. Estou confortável com o meu entendimento sobre o tema, e acredito que este tipo de entendimento mais profundo sobre o porquê das coisas sempre nos leva a questionar comportamentos mecânicos e estar mais conscientes sobre aquilo que praticamos no dia a dia.
Acho que escrever me faz absorver melhor os temas que estudo, e mesmo que ninguém leia acaba tendo valor pra mim.
Por exemplo, podemos concluir que o contexto importa. Descartes provavelmente escreveria testes unitários para validar a lógica de construção do nosso produto, enquanto Hume pensaria em testes de aceitação para avaliar o comportamento do cliente ao usar o produto. Ambas as abordagens têm um valor que pode ser maior ou menor de acordo com o contexto em que são aplicadas.
Se Descartes e Hume decidissem fazer pair programming hoje, provavelmente criariam o DevOps.
Descartes contribuiria com:
Infraestrutura como código (afinal, precisa ser clara e objetiva)
Pipeline de CI/CD (ordem e método em ação)
Testes automatizados (validando verdades fundamentais)
Já Hume insistiria em:
Monitoramento constante (porque a experiência importa e falhas acontecem)
Feature flags (para validar hipóteses em produção)
Cultura de blameless postmortem (aprender com os erros e tratá-los como parte natural do processo)
Além disso, se entendermos cada prática cotidiana como um experimento que pode falhar podemos começar se atingimos resultados satisfatórios em cada um destes experimentos:
Por que fazemos reuniões diárias?
Por que fazemos Sprint Reviews?
Como posso mensurar o valor que uma determinada prática traz para meu time?
E dessa forma começamos a fazer nosso trabalho com mais consciência, levando sempre em consideração a intenção de cada passo.
Se interessou? Bom, aí vão minhas recomendações:
Eu comecei a aprender mais filosofia através do Estoicismo, e o Diário Estoico de Ryan Holiday é um livro que estou relendo pela terceira vez e portanto não canso de recomendá-lo. Se o estoicismo de agradar, toda a obra de Seneca pode ser interessante para você, e eu recomendo começar com "Sobre a tranquilidade da alma”.
Outros livros que ajudam a tornar as palavras rebuscadas dos filósofos um pouco mais palatáveis e que gostei bastante foram:
Ser livre com Sartre (meu favorito desta série!)
Viver apaixonadamente com Kierkegaard
Afirmar-se com Nietzsche
Desapegar-se com Schopenhauer
Estes livros não foram escritos pelos filósofos, mas por professores de filosofia que traduzem os pensamentos para os dias atuais através de metáforas e perguntas para você começar a se questionar.
Ah! Se você não for muito de livros, dá uma olhada no canal do Ludo Viajante no Youtube. Esse vídeo aqui pode ser um bom começo: