Creo que hay tres factores que entran en juego aquí.
Falta de masa crítica
Primero, un patrón es básicamente poco más que darle un nombre a un código que implementa una "parte" particular de funcionalidad. La única forma en que ese nombre proporciona mucho valor real es si puede depender de que todos sepan lo que significa el nombre, por lo que al usar el nombre, entienden inmediatamente mucho sobre el código.
Sin embargo, los patrones
nunca establecieron la masa crítica que necesitaban para lograrlo. Más bien al contrario, AAMOF. En los 20 (o así) años transcurridos desde que salió el libro de GoF, estoy bastante seguro de que no he visto tantas como una docena de conversaciones en las que todos los involucrados realmente sabían suficientes patrones de diseño para mejorar su comunicación.
Para decirlo de forma un poco más extraña: los patrones de diseño fallaron específicamente porque fallaron.
Demasiados patrones
Creo que el segundo factor importante es que, en todo caso, inicialmente nombraron demasiados patrones. En un buen número de casos, las diferencias entre los patrones son lo suficientemente sutiles como para que sea casi imposible decir con certeza real si una clase en particular se ajusta a un patrón u otro (o tal vez ambos, o tal vez ninguno).
La intención era poder hablar sobre el código en un nivel superior. Sería capaz de etiquetar una gran parte del código como la implementación de un patrón particular. Simplemente al usar ese nombre predefinido, todos los que escuchan suelen saber todo lo que les importa sobre ese código, por lo que podría pasar a la siguiente cosa.
La realidad tiende a ser casi la opuesta. Digamos que estás en una reunión y diles que esta clase en particular es una fachada. La mitad de las personas en la reunión nunca lo supieron o hace mucho que han olvidado lo que eso significa. Uno de ellos le pide que le recuerde la diferencia exacta entre una fachada y, por ejemplo, un proxy. Ah, y el par de personas que realmente saben patrones pasan el resto de la reunión debatiendo si esto realmente debería considerarse una Fachada o "solo" un Adaptador (con ese único individuo insistiendo en que le parece un Proxy).
Teniendo en cuenta que su intención era solo decir: "este código no es muy interesante; sigamos adelante", tratar de usar el nombre de un patrón solo agrega distracción, no valor.
Falta de interés
La mayoría de los patrones de diseño no tratan realmente con las partes interesantes del código. Se ocupan de cosas como: "¿Cómo creo estos objetos?" Y "¿Cómo consigo que este objeto hable con ese objeto?" Memorizar nombres de patrones para estos (así como los argumentos antes mencionados sobre los detalles) es simplemente poner mucha energía en las cosas que a la mayoría de los programadores no les importa mucho.
Para decirlo de forma ligeramente diferente: los patrones se ocupan de las cosas que son iguales entre muchos programas, pero lo que realmente hace que un programa sea interesante es la forma en que es diferente de otros programas.
Resumen
Los patrones de diseño fallaron porque:
- No lograron alcanzar una masa crítica.
- La diferenciación entre los patrones fue insuficiente para garantizar la claridad.
- En su mayoría trataban con partes del código que casi nadie realmente se preocupaba de todos modos.