Ok, me he encontrado con esto muchas veces, pero este es el peor de los casos, un poco exagerado.
Un cliente dice "oye, ¿puedes hacernos este pequeño módulo para hacer esta pequeña tarea"?
Yo: "Claro que no hay problema".
Por lo tanto, en función de los presupuestos y las limitaciones, etc., me salteo parte de la arquitectura y me sumerjo y hago que no sude.
Luego piden otro módulo. Y otro. Y algunas mejoras. Y todo esto sucede muy lentamente, fíjate, durante años. Y antes de que te des cuenta, tienes esta aplicación monstruosa que está terriblemente diseñada.
¿Qué haces cuando te piden que hagas algo pequeño? No sabe si seguirá creciendo ... si el cliente seguirá pidiendo adiciones (y tampoco lo hacen).
No puedes sobre-diseñar la cosa, porque después de todo es solo una pequeña aplicación, y se irán a otro lado si dices (en eso sé toda la voz) "Bueno, por si acaso, vamos a diseñar esta cosa en capas con la parte superior -o-the-line seguridad y separación de preocupaciones. De hecho, vamos con una herramienta de inyección de dependencia que realmente hará que esto sea fantástico, bla, bla, bla ".
Dirán "sí, claro" e irán a otra persona.
El presupuesto, el tiempo y la percepción son tan importantes como la arquitectura de la aplicación misma.
¿Cómo debe abordarse esto?
Supongo que la pregunta realmente se reduce a "Cuando no tienes toda la información para el resultado final de lo que parece ser una pequeña aplicación, cómo evitar (o mitigar) la toma de decisiones arquitectónicas y de diseño desde el principio será completamente ¿Inapropiado después?