Creo que esta pregunta es el quid de la pregunta del ciclo de vida ágil frente a la cascada.
Si lo está haciendo ágilmente, una premisa básica es que el código junto con la estrecha interacción del desarrollador es mejor y más rápido que la especificación detallada. El equipo prioriza el lanzamiento de nuevas funciones y alta calidad sobre otras cosas, como los mecanismos formales de comunicación, como las especificaciones detalladas de diseño. Pero hay un intercambio aquí: debe tener canales de comunicación entre los miembros del equipo que les permitan preguntar sobre los matices y la intención detallada del diseño cuando lo necesiten.
Si está haciendo una cascada, está asumiendo que el trabajo de completar el código bajo el diseño detallado y luego probarlo es significativo. Y desea brindar a los interesados una visión temprana de cómo procederá este trabajo y cómo será cuando esté terminado. Eso puede estar examinando el diseño con el cliente para asegurarse de que haya explorado las características que tienen sentido. También puede ser examinarlo con expertos en otros ámbitos, como revisiones de seguridad, revisiones de seguridad y revisiones de miembros del equipo que deben integrarse con su código. La suposición es que estas revisiones ahorrarán tiempo a largo plazo porque le evitarán investigar una gran cantidad de tiempo en el desarrollo de algo incorrecto.
Últimamente, he visto una gran fusión entre diseños detallados y herramientas de comentarios de código, por ejemplo, JavaDoc. Como los diseños más detallados son huellas del código y explicaciones breves de lo que hará, esto es más o menos lo mismo que esperarías de los comentarios del código. Por lo tanto, tener una herramienta que transformará los comentarios de código en una especificación de diseño detallada es excelente, una forma mucho mejor de mantenerlo actualizado que hacerlo a mano.
Creo que la evaluación inexacta de cuán detallado debe ser el diseño para el proyecto es un factor importante en el crecimiento de los costos. La peor parte es que estás condenado si lo haces y maldito si no lo haces:
- Si su diseño es demasiado detallado para el tamaño del equipo, la complejidad del trabajo y los requisitos de las puertas que debe atravesar (revisiones de seguridad, revisiones de seguridad, etc.), entonces ha perdido un tiempo y dinero valioso en un artefacto que nunca usarás.
- Si su diseño no es lo suficientemente detallado, desperdiciará dinero ya que los miembros del equipo hacen suposiciones incorrectas que conducen a problemas de integración, y corre el riesgo de volver a trabajar cuando una auditoría final de seguridad o seguridad descubre problemas que podrían haberse solucionado de manera temprana y económica si hubieran sido aspectos claros del diseño antes de la implementación.
No creo que sea una carcasa en blanco y negro: puede haber muchas veces en que algunos componentes son "lo suficientemente buenos" si están diseñados a un alto nivel, mientras que otros necesitan un trabajo riguroso y detallado. Y los entornos cambiantes de equipo o proyecto pueden dictar nuevas necesidades de diseño a medida que el proyecto evoluciona.