Esta semana en el trabajo obtuve agiled una vez más. Haber pasado por el estándar ágil, TDD, propiedad compartida, metodología de desarrollo ad hoc de nunca planear nada más allá de unas cuantas historias de usuarios en un pedazo de tarjeta, masticar verbalmente la atención sobre las tecnicallities de una integración de terceros ad nauseam sin hacer nada real Pensando o debido a la debida diligencia y combinando arquitectónicamente todo el código de producción con la primera prueba que se nos viene a la cabeza durante los últimos meses, llegamos al final de un ciclo de publicación y he aquí la principal característica visible desde el exterior que hemos estado desarrollando es demasiado lenta para uso, buggy, se vuelve laberínticamente complejo y completamente inflexible.
Durante este proceso se hicieron "picos", pero nunca se documentaron y no se produjo un solo diseño arquitectónico (no hubo FS, así que, ¿qué demonios? si no sabes lo que estás desarrollando, cómo puedes planificar) ¿O investigarlo?): el proyecto pasó de un par a otro, cada uno de los cuales solo se enfocó en una historia de un solo 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é tanto como pude trabajar solo, centrándome en una arquitectura y especificaciones sólidas en lugar de Pruebas unitarias que vendrán más tarde una vez que todo esté fijado. El código ahora es mucho mejor y en realidad es totalmente utilizable, flexible y rápido. Parece que ciertas personas realmente se han resentido de que yo haya hecho esto y se han esforzado por sabotear mis esfuerzos (posiblemente de manera inconsciente) porque va en contra del proceso sagrado de ágil.
Entonces, ¿cómo usted, como desarrollador, le explica al equipo que no es "ágil" para planificar su trabajo y cómo encaja la planificación en el proceso ágil? (No estoy hablando del MIP; me refiero a sentarme con un problema y dibujar un diseño de extremo a extremo que dice cómo se debe resolver un problema con suficiente detalle para que cualquiera que trabaje en el problema sepa qué arquitectura y patrones que deben usar y dónde se debe integrar el nuevo código en el código existente)