Esta semana en el trabajo volví a agilizarme . Después de haber pasado por la metodología estándar de desarrollo ágil, TDD, propiedad compartida, ad hoc de nunca planear nada más que unas pocas historias de usuario en un pedazo de tarjeta, masticando verbalmente el cud sobre las tecnicidades de una integración de terceros ad nauseam sin hacer nada real pensando o con la debida diligencia y acoplando arquitectónicamente todo el código de producción a la primera prueba que viene a la cabeza de cualquiera en los últimos meses, llegamos al final de un ciclo de lanzamiento y miramos que la principal característica externamente visible que hemos estado desarrollando es demasiado lenta para uso, con errores, volviéndose laberínticamente complejo y completamente inflexible.
Durante este proceso, se realizaron "picos", pero nunca se documentaron y nunca se produjo un solo diseño arquitectónico (no hubo FS, entonces qué demonios eh, si no sabe lo que está desarrollando, ¿cómo puede planificarlo o investigarlo? ?) - el proyecto pasó de par en par, cada uno de los cuales solo se centró en una sola historia de usuario a la vez y el resultado fue inevitable.
Para resolver esto, salí del radar, fui (la temida) cascada, planifiqué, codifiqué y básicamente no cambié el par e intenté todo lo que pude para trabajar solo, centrándome en una arquitectura sólida y especificaciones en lugar de pruebas unitarias que vendrá más tarde una vez que todo esté inmovilizado. El código ahora es mucho mejor y en realidad es totalmente utilizable, flexible y rápido. Ciertas personas parecen haberse resentido realmente por hacer esto y se han esforzado por sabotear mis esfuerzos (posiblemente inconscientemente) porque va en contra del proceso sagrado de ágil.
Entonces, ¿cómo usted, como desarrollador, explica al equipo que no es "poco ágil" planificar su trabajo y cómo encaja la planificación en el proceso ágil? (No estoy hablando del IPM; estoy hablando de sentarme con un problema y dibujar un diseño de extremo a extremo que diga cómo se debe resolver un problema con suficiente detalle para que cualquiera que trabaje en el problema sepa qué arquitectura y patrones que deberían usar y dónde el nuevo código debería integrarse en el código existente)