Como otros han señalado, hacerlo bien la primera vez es, por supuesto, más barato. Pero también señalaría que cualquier construcción de programación cae en algún lugar del espectro del patrón anti patrón. O estás implementando algo de manera ordenada o no; El código infestado de 'goto' sigue un patrón, es algo que se reconoció desde el principio como potencialmente dañino. Pero tenga en cuenta que todo el código se reduce a saltos y ramificaciones en algún momento del ciclo de compilación. No hay nada inherentemente malo en saltar: simplemente termina haciendo que los proyectos más grandes sean más difíciles de entender.
Es fácil dejarse engañar por patrones que parecen triviales para casos de uso simples. Tan pronto como comience a necesitar más flexibilidad, la mayoría de los patrones frágiles se degenerarán en patrones anti. Por lo tanto, mi regla es solo escribir código que pueda entender y tener una posibilidad razonable de depuración. Si decido aplicar un patrón inteligente a ciegas, tengo que ser al menos tan inteligente como el código del patrón para depurarlo. Entonces, la clave es asegurarse de que está aislando y utilizando patrones que se aplican específicamente a su problema directamente, que está abordando el problema en el nivel adecuado de abstracción y que puede comprender y depurar cada línea de su código.
Una clave aquí es lograr el equilibrio correcto entre los requisitos a corto y largo plazo. Tenga en cuenta que escribir un buen código rápidamente es algo que a partir de patrones bien entendidos ciertamente puede ayudar: el código de espagueti puede parecer más rápido, especialmente al principio. Pero verá rápidamente las limitaciones de los anti patrones en cualquier proyecto más grande, donde la descomposición, la modularidad, etc., se vuelven increíblemente importantes.