Padrões de design são ferramentas. Como as ferramentas, há duas maneiras de usá-las: a maneira correta e a maneira incorreta. Por exemplo, se eu lhe der uma chave de fenda e um prego, e pedir para você juntar dois pedaços de madeira, você deve me pedir um martelo. Martelos são usados para unhas, enquanto chaves de fenda são usadas para parafusos.
Muitas vezes, um padrão de design é anunciado como o One True Way, que muitas vezes só é verdadeiro quando surgem problemas específicos. Os desenvolvedores juniores costumam ser como crianças quando encontram algo novo para brincar; eles querem aplicar esse padrão de design a tudo . E não há nada inerentemente errado com isso, contanto que eles eventualmente aprendam que o Padrão A se aplica ao Problema B, e o Padrão C se aplica ao Problema D. Assim como você não usa uma chave de fenda para conduzir as unhas, você não usa um determinado padrão apenas porque existe; você usa o padrão porque é a melhor ferramenta (conhecida) para o trabalho.
O outro lado dos padrões são anti-padrões. Coisas que provaram ser sempre ruins, geralmente em termos de tempo de execução ou memória. No entanto, os padrões e os antipadrões não servem para o desenvolvedor que não entende por que eles existem. Os desenvolvedores gostam de pensar que o que estão fazendo é novo e inventivo, mas na maioria das vezes não são. É provável que tenha sido pensado antes. Pessoas antes deles criaram os padrões por causa da experiência.
Naturalmente, os desenvolvedores juniores costumam encontrar novas maneiras de fazer coisas antigas e, às vezes, essas maneiras são melhores. No entanto, muitas vezes acaba sendo um caso do efeito Dunning-Kruger; o desenvolvedor sabe o suficiente para criar um programa funcional, mas não entende suas próprias limitações. A única maneira de superar isso parece ser através da experiência, tanto positiva quanto negativa. Eles ignoram os padrões porque acreditam que são superiores, mas não sabem que, na realidade, 10.000 desenvolvedores já usaram um design específico e o descartaram porque era realmente ruim.
O Agile favorece "fazer as coisas de maneira responsiva" no que diz respeito a se ajustar rapidamente às necessidades crescentes dos clientes. Não favorece padrões de design nem os despreza. Se um padrão é o método mais rápido e mais confiável, o desenvolvedor deve usá-lo. Se um padrão em particular custaria mais tempo do que simplesmente "fazê-lo", usar algo que não é um padrão provavelmente está bem (supondo, é claro, que o desempenho não seja severamente degradado, etc.). Se nenhum padrão conhecido puder ser encontrado, é preferível projetar o seu próprio design ao invés de dizer ao cliente "não". Os clientes, especialmente os clientes pagantes, geralmente estão certos.
Qualquer um que afirme que os padrões são O Caminho, ou afirma que os padrões são O Maldito da Existência, estão errados. Padrões são ferramentas, destinadas a serem aplicadas a situações específicas, e têm diferentes graus de sucesso com base nas circunstâncias. Esta é uma verdade, uma que não depende se você escolheu MVC ou não, se você usa objetos de transferência de dados, ou não, etc. O que importa é implementar código em um período de tempo razoavelmente curto, que funciona razoavelmente bem para os usuários, e é razoavelmente livre de erros lógicos.
Normalmente, os padrões permitirão uma forma coerente de design e funcionarão melhor do que ignorar todos os padrões em favor de escrever 100% de ideias originais, mas você não pode evitar todos os padrões. Por exemplo, se y = x + 5, você realmente escreverá y = x + (5 * 3 + 15/3) / 4, apenas para evitar o padrão de escrita x + 5? Não, você não é. Você vai escrever y = x + 5 e passar para o próximo problema.
As pessoas usam padrões todos os dias e está tudo bem . O que mais importa é ter um código que seja logicamente funcional, que falhe raramente e seja amigável ao usuário. Nada mais importa mais que isso.