Intentaré ilustrar algunos aspectos que no se han abordado en otras respuestas y que, en mi opinión, son importantes.
El problema básico es este: algunos desarrolladores están motivados principalmente por la alegría de tomar un trabajo difícil, pensar en un diseño, pensar en problemas potenciales y luego resolver el problema pieza por pieza, con una interacción mínima con los demás. durante un período prolongado de tiempo. Generalmente, completan el trabajo con un alto nivel de calidad y de manera oportuna; su trabajo es mantenible y se ajusta a la arquitectura en general.
A este tipo de desarrolladores les puede resultar difícil adaptarse a un entorno ágil y su actitud a menudo se descarta como "falta de voluntad para cambiar", posiblemente relacionada con el ego o con ser anticuada.
Lo que a menudo se ignora es que para resolver problemas complejos se necesita manejar mucha información, y que esto puede requerir mucho análisis, pensar, intentar, dibujar una solución, desecharla e intentar otra.
Un problema tan complejo puede requerir desde unas pocas horas hasta unas pocas semanas de trabajo enfocado hasta que tenga una solución completa.
Un enfoque es que un desarrollador toma la especificación del problema, va a su habitación y regresa dos / tres semanas después con una solución. En cualquier momento (cuando sea necesario), el desarrollador puede iniciar alguna interacción con otros miembros del equipo o con las partes interesadas (haciendo preguntas sobre problemas específicos) pero la mayoría
El desarrollador al que se le asigna la tarea realiza el trabajo.
¿Qué sucede en un escenario ágil? El equipo divide el problema en partes pequeñas (historias de usuario) después de un análisis rápido (preparación). La esperanza es que las historias de los usuarios sean independientes entre sí, pero a menudo este no es el caso: para dividir un problema complejo en partes realmente independientes, necesitará un conocimiento que normalmente obtiene después de trabajar en él durante varios días.
En otras palabras, si puede dividir un problema complejo en partes pequeñas e independientes, significa que básicamente ya lo resolvió y que solo le queda trabajo de diligencia. Para un problema que requiere, digamos, tres semanas de trabajo, este será probablemente el caso durante la segunda semana, no después de un par de horas de preparación al comienzo del sprint.
Entonces, una vez que se ha planeado un sprint, el equipo trabaja en diferentes partes de un problema que probablemente tienen dependencias entre sí. Esto genera una gran cantidad de sobrecarga de comunicación al tratar de integrar diferentes soluciones que pueden ser igualmente buenas, pero son diferentes entre sí. Básicamente, el trabajo de prueba y error se distribuye entre todos los miembros del equipo involucrados, con una sobrecarga de comunicación adicional (que aumenta de forma cuadrática).
Creo que algunos de estos problemas se ilustran muy bien en este artículo de Paul Graham, en particular el punto 7.
Por supuesto, compartir el trabajo entre los miembros del equipo reduce el riesgo relacionado con que un miembro del equipo abandone el proyecto. Por otro lado, el conocimiento sobre el código se puede comunicar de otras maneras, por ejemplo, utilizando revisiones de código o dando presentaciones técnicas a los colegas. En este sentido, no creo que haya una bala de plata válida para todas las situaciones: la propiedad del código compartido y la programación de pares no son la única opción.
Además, la "entrega de la funcionalidad de trabajo en intervalos más cortos" da como resultado una interrupción del flujo de trabajo. Esto puede estar bien si la parte de la funcionalidad es "agregar un botón de cancelación en la página de inicio de sesión" que se puede completar al final de un sprint, pero cuando está trabajando en una tarea compleja, no desea tales interrupciones: es como Intente conducir un automóvil 100 km lo más rápido que pueda y pare cada 5 minutos para comprobar qué tan lejos ha llegado. Esto solo va a frenarte.
Por supuesto, tener puntos de control frecuentes tiene la intención de hacer que un proyecto sea más predecible, pero en algunos casos la interrupción puede ser muy frustrante: uno apenas puede ganar velocidad y ya es hora de detenerse y presentar algo.
Entonces, no creo que la actitud descrita en la pregunta esté relacionada solo con el ego o la resistencia al cambio. También puede ser que algunos desarrolladores consideren que el enfoque de resolución de problemas descrito anteriormente es más efectivo porque les permite comprender mejor los problemas que están resolviendo y el código que están escribiendo. Forzar a estos desarrolladores a trabajar de una manera diferente puede resultar en reducir su productividad.
Además, no creo que tener algunos miembros del equipo trabajando de manera aislada en problemas específicos y difíciles esté en contra de los valores ágiles. Después de todo, los equipos deben organizarse por sí mismos y utilizar el proceso que hayan encontrado más efectivo a lo largo de los años.
Sólo mis 2 centavos.