Agile se describe a menudo como "solo haga lo que necesita hacer ahora, y puede refactorizar más adelante si se necesitan más cosas".
Esto es bastante engañoso. Se puede leer como "abordar algo rápidamente ahora, y luego averiguar cómo actualizarlo para hacer más cosas en el futuro". Lo cual conducirá a un mundo de dolor y deuda técnica.
Para cualquier sistema que necesite un diseño. Para sistemas pequeños/simples, este diseño puede estar en su cabeza, pero aún debe pensar antes de comenzar sobre qué hará el sistema y cuál es la mejor manera de hacerlo.
En mi humilde opinión, la forma correcta de incluir el diseño en un enfoque ágil es diseñar lo suficiente ahora que sabe lo que se espera que haga el sistema en última instancia, y los trazos generales que describen cómo lo hará. Propóngale un diseño lo suficientemente flexible para que no quemes ningún puente. Pero no pierda el tiempo escribiendo una especificación formal detallada para cada tuerca y tornillo. Diseñe hasta un nivel en el que sepa dónde y cómo se integrará un subsistema, pero puede tratarse como una "caja negra" que en sí misma puede diseñarse solo cuando necesita implementarlo.
El desarrollo ágil no debe excluir una arquitectura formal; simplemente significa que solo debe diseñar lo suficiente de la arquitectura formal para que todos los bits encajen bien cuando haya terminado, y desarrolle los detalles más pequeños de ese diseño solo cuando y como se necesiten. A veces eso significa que todavía necesita un diseño bastante detallado por adelantado.
además de la respuesta de calidad anterior: Haga que su diseño sea una definición de los requisitos ya que el usuario los vería. Esto le ayuda a visualizar el modelo de dominio mientras se enfoca en el usuario y eventualmente en la interfaz de usuario (que debería ser primordial en cualquier proyecto de software). –