De fato. Não existe bala de prata, e tentar prever o futuro inteiro da aplicação quase sempre leva a overengineering.
Mas vale pensar também pela ótica dos testes: cada if novo que você adiciona duplica a quantidade de caminhos que precisam ser cobertos. A complexidade ciclomatica cresce rápido, e logo aquele método “simples” vira um Frankenstein cheio de exceções e casos especiais.
Quando você separa o comportamento em classes isoladas (via Strategy, por exemplo), cada cenário pode ser testado de forma independente, sem precisar montar todo o estado global do mundo pra testar um único fluxo.
No fim, o bom senso de quando aplicar o quê vem mesmo com a experiência. A gente erra forçando padrão onde não precisa, e também erra mantendo tudo junto por medo de complicar.
O ponto é: não dá pra nivelar por baixo.
Buscar simplicidade não pode virar desculpa pra empilhar if até ninguém mais querer mexer no código.
1