¿Hay alguna metodología de pm que funcione bien en proyectos grandes?

Históricamente, mi equipo ha tenido un promedio de 40 personas durante varios años, a menudo más que eso. Tenemos un producto bastante complejo que atraviesa varios dominios problemáticos. Cambiamos de cascada a scrum y, mirando hacia atrás, debo decir que ninguno funcionó (bien). Como me dijo un PM, nuestro proyecto estaba "siempre en amarillo o rojo" (es decir, en estado de alto riesgo o seriamente retrasado).

Watefall "funcionó" porque una vez que terminamos oficialmente con el desarrollo y pasamos a las pruebas, no muchas de las características hechas oficialmente funcionaron realmente y se realizó un desarrollo efectivo durante (largas) pruebas y se corrigió tediosamente. Se podría decir que fue una especie de cascada oficial combinada con una especie de proceso iterativo subyacente.

Cambiamos a ágil/scrum (en una forma muy básica). De la sartén al fuego: ahora tenemos problemas terribles para obtener un producto lógicamente consistente. No es extraño dado que tenemos 5 sub-equipos principales (no todos ellos en una ubicación geográfica) y la ley de Conway opera. Además, el estrés repetido al final de la iteración durante varios años tiende a desgastar/agotar a las personas (sin embargo, ese es mi sentimiento subjetivo, no tengo datos sólidos para probarlo). También ha sido terrible mantener a las personas el tiempo suficiente en un lugar/subsistema del producto para que pudieran convertirse en expertos y altamente productivos en su lugar: tengo la impresión de que en este cambio constante evolucionamos hacia ser aprendices de todos los oficios y maestros de nada. En retrospectiva, no puedo decir que scrum nos haya dado ninguna ventaja definitiva (tenemos "scrum de scrums" por supuesto y no puedo detectar que haya hecho alguna diferencia). Ciertamente, la falta de un gran diseño inicial de mi punto de vista es una falla grave: el trabajo se desincroniza, se divide mal y debe rehacerse o modificarse más tarde.

Es como un punto muerto clásico del proceso de CS, simplemente se movió al nivel conceptual/de diseño: el desarrollador/subequipo A espera a que el desarrollador/subequipo B complete el diseño X en el que confía para poder completar su diseño Y, mientras que el desarrollador/subequipo B espera A para hacer su diseño Y para que él/ella pudiera hacer X.

Scrum no dice nada sobre las tareas de infraestructura aparte de "meterlo en alguna historia de usuario" (y así la infraestructura sufre). Otros 3 equipos de subtemas más pequeños (equipo de proveedor de contenido interno, externo que usa productos de los dos anteriores) para un área en particular aún no pueden ponerse de acuerdo sobre la representación y el formato de datos comunes. El seguimiento del estado real de un millón de tareas es una pesadilla. El consenso en el equipo es que scrum no nos ha brindado beneficios al tiempo que impone costos adicionales. Ciertamente no nos ha hecho prestar más atención a lo que realmente necesitan los clientes/usuarios finales.

No puedo creer que esté diciendo esto, pero para nosotros, la cascada funcionó (ligeramente) mejor que el scrum (o para ser más precisos: "no fue tan malo, aunque solo un poco menos").

Afortunadamente, algunos subsistemas son bastante ortogonales, de lo contrario no haríamos nada. Sin embargo, esto es pura casualidad: un poco más de dependencias internas entre los subsistemas (re integridad conceptual, rendimiento, etc.) y estaríamos fritos. Ser salvado por pura suerte no es prueba de una organización efectiva o sabiduría.

Desde mi punto de vista, es así: si un proyecto es pequeño (algo asimilable por una persona en su totalidad o casi) o consta de un montón de conceptos y características casi independientes, cualquier metodología funcionará. Si un proyecto es grande (una persona ni siquiera puede asimilar un subsistema completo + hay muchas dependencias internas entre los subsistemas en conceptos, diseño, lógica comercial y algoritmos), ninguna metodología funciona.

La única solución que personalmente veo sería así:

  1. haga el gran análisis inicial (recopilación de requisitos) y el gran diseño estilo cascada (principios, suposiciones, lógica comercial).
  2. trátelo como borrador para modificar, punto de partida inicial para modificar sobre la marcha.
  3. desarrolle este "gran diseño" de forma iterativa, utilizando scrum o kanban.
  4. Haga que los analistas y diseñadores reevalúen constantemente el panorama general: si el producto se mantiene consistente y sincroniza el diseño y el código.

Si eso no funciona, tengo que decir que para mí mi proyecto es como un "nudo gordiano del infierno" que es básicamente irresoluble (bueno) desde mi punto de vista.

Esta información de fondo súper larga me lleva a mi pregunta: ¿existen metodologías de PM que funcionen bien en proyectos grandes ?


Más detalles:

  1. Entiendo que el mapa no es el camino. Seguro. Pero no puedo imaginar llegar a Alaska desde SA sin el mapa. :-) Como dicen en matemáticas, la metodología para mí es una condición necesaria, no suficiente.

  2. Cuestiones:

    • Plazos: ajustados.
    • Presupuesto: gravemente insuficiente.
    • Cambios de alcance: constante.
    • Requisitos: a menudo cambiantes, muchas lagunas.
    • Estructura del equipo: situación de puertas giratorias, la gente se movía sin pensar.
    • Otros problemas: muchos códigos heredados (realmente malos), ninguna apreciación de la situación a largo plazo y los costos/beneficios por parte de mgmt.
    • Ah, y: no (aplicación) arquitecto SW.
  3. Sé que la gente rechazará mi visión diciendo que "pide piloto automático/panacea", pero tiendo a pensar que A. Whitehall tiene algo de razón cuando dijo que el progreso se mide por una serie de cosas que podemos hacer sin pensar. Una metodología perfecta encajaría en cualquier equipo: solo tenga las agallas para seguir el procedimiento. Si "otros factores", los factores desconocidos, son necesarios para que el proyecto tenga éxito, ¿cuáles son esos?

Estoy empezando a pensar que todo esto es inútil. He hecho algunos cálculos de ejemplo aproximados: Imagine: n funciones, m clases (suponiendo programación OO), k características de software (confiabilidad, rendimiento en varios contextos, seguridad, costo de implementación, tasas de defectos, tiempo necesario para realizar el desarrollo, pruebas costo, tiempo de prueba, etc), o personas. Complejidad potencial: cada característica se puede dividir en p clases (p menor que m, con la suma de todas las p para todas las características == m), afecta como máximo k características y puede requerir el trabajo o la intervención de cualquier subconjunto de o personas.

Entonces, la complejidad del peor de los casos (número de combinaciones) es n*m*k*o. con 20 características, 500 clases, 10 aspectos y 40 personas que es 4000000 (4 mil). Suponiendo un generoso tiempo de lanzamiento de 18 meses, es decir 222222 (222 mil) combinaciones por mes. Supongamos que cortamos 500 (o "m") clases en 50 colecciones manejables con cada colección modificable/refactorizable internamente sin afectar a otra colección. Eso sigue siendo más de 22 mil combinaciones por mes.

No es humanamente posible rastrear tantos impactos potenciales de característica/clase/persona en k (características del software) y seleccionar las mejores combinaciones (planificar con anticipación). Alguna herramienta de inteligencia artificial dura al estilo de la ciencia ficción tendría que hacerlo. De lo contrario, solo estamos lanzando un "avemaría": tal vez funcione lo suficientemente bien en suficientes casos como para que el proyecto no se retrase. O tal vez no lo hará.

Información general para darle una mejor idea del sistema en cuestión. Esto tiene que ser una especie de "anonimizado" por razones de confidencialidad.


Flujo de datos

Afortunadamente, este es bastante simple: agentes <-> servidor, con un servidor que consta de los siguientes subsistemas principales:

  • agente de comunicación
  • inventario
  • agregación de datos
  • la generación del informe

(por supuesto, hay muchos subsistemas compatibles, desde la consola de configuración del servidor hasta la interfaz de usuario web y la API REST, pero no los incluyo aquí)


Implementación

Tecnologías: C, Java, SQL. Los entornos varían de cientos a decenas de miles de agentes (el entorno más grande: alrededor de 100 000 agentes).

Tamaño del código: varios miles de archivos Java organizados en aproximadamente 500 paquetes. Aproximadamente 900 KLOC en total hasta ahora (sin contar al agente). Así que no es tan grande, pero es complejo en el sentido de que involucra muchos dominios de problemas.

La agregación es la parte más compleja e intensiva en recursos de la aplicación. Usamos SQL simple para el rendimiento, pero incluso entonces la agregación no puede finalizar en 24 horas para entornos grandes (justo cuando debería comenzar la siguiente ronda de agregación, es decir, al día siguiente). Un error de cálculo puede ser algo serio, ya que fácilmente puede costarle a un cliente decenas de millones de dólares.

Hay técnicas que hacen que un gran proyecto sea más manejable y es romper el proyecto en sus partes y dejar el resto para una elaboración progresiva. "Grande" es una percepción. Si quieres cambiar tu percepción, hazla más pequeña. Nuestra historia muestra que hemos completado con éxito proyectos imposibles, por ejemplo, casi todo lo que ha hecho la NASA y hay más.
Cada vez que escucho acerca de 'grandes proyectos', recuerdo TMMM , donde Brooks habló sobre sus proyectos OS/2 con más de 5000 personas. Me hace sentir tan... aficionado.
"Grande" no es semánticamente equivalente a "complejo". Scrum está diseñado para funcionar bien en sistemas emergentes complejos, pero implementar bien cualquier marco de gestión de proyectos es más un arte que una ciencia.
@David Espina, Code Gnome: Aquí es donde el lenguaje se rompe: el principal problema con nuestro proyecto no es que sea grande en KLOC/FP o "complejo". La arquitectura de flujo de datos es simple. El problema es que el proyecto se parece más a un "tazón de clips" que a un montón de funciones independientes: no puede tocar ninguna función o problema sin afectar la mayoría de los otros aspectos, subsistemas y problemas.
@DE: si puede descomponer su sistema ordenadamente en un montón de subsistemas altamente independientes, puede hacer incluso proyectos enormemente complejos. Con el debido respeto a Brooks y OS/2, el sistema operativo como tal es solo un sistema de este tipo: se descompone en administración de procesos, administrador de sistemas de archivos virtuales (Linux), controladores de sistemas de archivos, administrador de memoria virtual, pila de red, firewall, etc. Puede refactorizar la mayoría de ellos sin afectar a otro subsistema. Esta es la situación más lujosa que se me ocurre con respecto a las dependencias internas ("tazón de clips").
El sistema operativo OS/2 es uno de esos sistemas . Sí, lanzado en abril de 1987 . Sus notas fueron tomadas en papel. Ni siquiera tenían un bloc de notas. Uno de sus mayores desafíos fue mantener montones y montones de papel con 'documentación' actualizada.
Tengo alguna evidencia de que la descomposición/particionamiento del sistema puede resolver problemas de dependencia de una manera ordenada aunque poco intuitiva: mi empresa ha comprado otro producto que históricamente ha manejado la complejidad mucho mejor. Lo han hecho mediante un control extremadamente estricto del servidor de recopilación de datos: cada vez que agrega algo del agente que ejecuta sus propias tareas personalizadas, debe seguir el formato y las reglas de recopilación de datos. Y luego extraiga los datos que necesite en servidores de análisis/administración separados (uso, administración de parches, seguridad, configuración, etc.). Esto ha funcionado increíblemente bien para ellos.
@Tiago Cardoso: Eso sí lo entiendo. Debe haber sido extremadamente duro, pero creo que por razones distintas a las nuestras. En otros lugares, cuando Bill Gates rogó y chantajeó a los programadores para que crearan un único control de texto enriquecido para que la interfaz de usuario de Windows lo reutilizara, no tuvo que preocuparse por los problemas del sistema de archivos. En nuestro proyecto otra cosa es infernal: si tocas algo, casi todos los demás gritan "¡no!" porque afecta de alguna manera las entrañas de lo que están haciendo (por ejemplo, hace que la agregación de datos tome más tiempo hasta el punto de que sea inaceptable).
Me recuerda un viejo proyecto con el que trabajé, @mrkafk... era un proyecto de mantenimiento para una herramienta de VBA con más de cientos de miles (¡de verdad!) de código (espagueti). Está fuera de servicio ahora, afortunadamente.

Respuestas (4)

Siguiendo la respuesta de Tiago, el problema no es la metodología sino cómo se adapta la metodología a sus proyectos.

Basado en mi experiencia trabajando en proyectos de biodefensa para el gobierno de los EE. UU., a medida que aumenta la complejidad de un proyecto, también lo hace su necesidad de planificación inicial y supervisión exhaustiva del proyecto. Independientemente de su uso de cascada o ágil o lo que sea:

  • Tómese su tiempo mientras hace su planificación inicial. Asegúrese de involucrar a las partes interesadas necesarias. Tenga una conversación abierta y honesta sobre las capacidades y suposiciones. Cree un cronograma, un presupuesto y un alcance que sean realistas.
  • Tómese el tiempo para revisar el plan a intervalos regulares. Cuando se haya alcanzado un hito clave, no lo elimine simplemente de la lista. Sienta al equipo y celebra el éxito y revisa el trabajo que se avecina. Averigüe cómo han cambiado las suposiciones subyacentes y si ha surgido algún problema que pueda afectar el plan original.
  • Establecer un sólido sistema de control de cambios. Si alguien quiere un cambio que esté bien, solo tiene que seguir el proceso aprobado. No tolere cambios ad hoc del equipo. Esto conducirá a un aumento del alcance e invalidará su plan.
  • Establecer estructuras de gobierno adecuadas. Usted, como PM, debe trabajar con un patrocinador/campeón del proyecto para ejecutar el proyecto. Ambos deben informar a un comité/junta de proyecto que represente los intereses de proveedores, clientes y negocios. Asegurarse de que todos tengan algo que decir ayudará a guiar el proyecto hacia una conclusión positiva.
  • Comunicar el progreso de manera oportuna y efectiva. Configure informes periódicos con las partes interesadas clave para que pueda señalar problemas y gestionar las expectativas de forma proactiva. Estos pueden ser escritos, a través de teleconferencias o como sea más apropiado.
@Doug B: Estoy tentado a marcar su respuesta como "aceptada", pero quiero esperar (tal vez en vano) con la esperanza de que aparezca una respuesta aún mejor. En cuanto a mi proyecto, tengo que decir que cuando cambiamos a ágil/Scrum se volvió mucho, mucho peor en todos los departamentos que enumeraste. En el pasado, BDUF impuso algún tipo de consistencia, control de cambios y planificación. Ahora no tenemos casi ninguno de esos. Entonces, al hacer un delta entre esos, creo que clavó una buena parte de las causas raíz detrás de nuestros problemas. Parece un problema de responsabilidad con el que la metodología está solo indirectamente relacionada.
@Doug B: Cuanto más lo pienso, más me gustan tus ángulos de mirar el problema. En retrospectiva, creo que lo que más nos golpeó destructivamente son los fracasos en "Tómese su tiempo mientras hace su planificación inicial" y "Establezca un sistema de control de cambios sólido". Además, tengo la impresión de que cuando tienes equipos Scrum trabajando en subsistemas en lugar de funciones relacionadas con el negocio de principio a fin, las demostraciones son casi inútiles para las partes interesadas externas. Ni siquiera tratan de entenderlo porque no les producen beneficios directos. Así que "comunicar el progreso" tiene que hacerse de otra forma.
Las demostraciones de @mrkafk se pueden extraer de las funciones de integración de scrum-of-scrums en lugar de subproyectos individuales si se adaptan mejor a su entorno.

Preguntar si hay una metodología que funcione bien para un proyecto grande suena como preguntar si una ruta de mapa puede llevar a alguien desde América del Sur hasta Alaska.

¿Hay alguna (metodología o mapa)? Sí. ¿Lo hará (trabajar o viajar) por sí mismo? Definitivamente no.

Una metodología es una guía. Pero, como el mapa, son solo sugerencias de cómo llegar a algo o algún lugar, no el destino en sí.

Mencionaste Waterfall x Agile. Hay una muy buena discusión sobre este tema AQUÍ , y creo que la respuesta de Pawel es increíble (¡como siempre!). En su caso, como un gran proyecto, parece que una metodología más formal encajaría mejor (es decir, Waterfall), pero no hay una regla estricta que diga eso.

En resumen: el problema no es el mapa . El problema no es la metodología . Habiendo dicho eso, la pregunta subyacente aquí es:

¿Cuál es el problema número uno de su proyecto? O, ¿por qué tus proyectos siempre están entre ámbar/rojo?

  • ¿Plazos?
  • ¿Costos?
  • ¿Cambios de alcance?
  • ¿Requisitos poco claros?
  • ¿Estructura de equipo?
  • ¿Algún otro problema?

Deberá determinar la causa raíz de los problemas de su proyecto y luego podrá evaluar cuál es la mejor metodología para adaptarse a su proyecto. No al revés.

Problema clásico de X/Y

En los comentarios, el OP elaboró ​​​​sobre el entorno de su proyecto. Él dijo:

[E]l principal problema con nuestro proyecto no es que sea grande en KLOC/FP o "complejo"... El problema es que el proyecto se parece más a un "tazón de clips" que a un montón de características independientes: no puede tocar ninguna característica o problema sin afectar la mayoría de los otros aspectos, subsistemas y problemas.

Tal como lo entiendo, el problema es que las tareas, los hitos, las características y los objetivos del proyecto son tan interdependientes que cualquier cambio o desviación requiere una refactorización de todo el plan y/o cronograma del proyecto.

Entonces, este es un problema X/Y porque:

  1. X: El problema subyacente es arquitectónico o conceptual, posiblemente ambos. Tal vez el trabajo no se haya descompuesto lo suficiente o los subproyectos no se hayan diseñado para ser lo suficientemente independientes. De cualquier manera, el problema parece ser un enredo entre tareas.
  2. Y: El OP ha determinado que una metodología diferente resolverá el problema subyacente y, por lo tanto, pregunta "¿Existen metodologías de PM que funcionen bien en proyectos grandes?"

Resolver para X en su lugar

Según mi comprensión de la causa raíz, recomendaría refactorizar el plan del proyecto en lugar de rediseñar el proceso de gestión del proyecto. Específicamente:

  1. Realizar una revisión de los supuestos arquitectónicos del proyecto. Vea si la arquitectura se puede refactorizar para que tenga un acoplamiento más flexible.
  2. Revise la estructura de desglose del trabajo y vea si las tareas se pueden descomponer lo suficiente para evitar dependencias entre hitos.
  3. Considere refactorizar el plan del proyecto en subproyectos que sean menos codependientes. Esto no es trivial si el proyecto ya ha sido diseñado como un "tazón de clips", pero ciertamente vale la pena al menos un experimento mental para ver si se puede hacer.
  4. Invite a su equipo técnico a analizar formas de reducir las dependencias técnicas o de procesos.

También podría considerar tratar las fuertes dependencias entre tareas como riesgo del proyecto. Documente el riesgo de manera adecuada, informe los riesgos a la alta gerencia y permítales aceptar el riesgo o autorizar las medidas necesarias de mitigación de riesgos.

Por último, si todo lo demás falla, establezca un punto de referencia para cuando el proyecto esté tan fuera de la tolerancia que se deba recomendar su finalización. Si bien el rol del gerente de proyecto no suele ser el de autorizar la desconexión, ciertamente está dentro de su alcance identificar los límites de riesgo y gastos de capital que la organización está dispuesta a tolerar. Una vez que se conoce esa información, puede administrar esa métrica y recomendar una terminación anticipada oportuna (si la falla es inevitable) para ahorrar dinero a la empresa.

Lo sospechaba y tienes toda la razón en el problema X/Y. (es decir: estamos teniendo este problema, además de la responsabilidad y la rendición de cuentas y la estructura de la organización y la falta de problemas de gestión de requisitos dentro del equipo). Ya sufrí ramificaciones de problemas graves y partición del trabajo en mi equipo de scrum anterior, así que lo reconocí al instante. Pero hay tantos problemas que abordar simultáneamente que ni siquiera pude articularlos a todos en una sola publicación.
+1 por considerar las dependencias entre tareas como riesgo del proyecto .

Waterfall se utiliza con éxito en los proyectos más grandes del mundo, por ejemplo, 500 personas durante 6 años a un costo de $ 21 mil millones. Estos son en su mayoría proyectos de infraestructura (puentes, túneles y ferrocarriles), proyectos aeroespaciales y de defensa (aviones y sistemas de armas) y proyectos de energía (oleoductos, plataformas de perforación)

No es la metodología la que falla, sino la implementación y las "vibras" del entorno del proyecto. Para ver un ejemplo de "vibraciones" en el entorno del proyecto, acabo de regresar de un taller que estudió el desarrollo de 3.300 millones de dólares del avión de combate FA-18 Hornet. Uno de los factores críticos de éxito mencionados en el proyecto fue crear una atmósfera de confianza y un flujo de datos precisos en el proyecto.

Necesita mirar la organización, el liderazgo y el entorno del proyecto. Esto no es un problema de metodología.

gracias, buenos consejos, pero eso no aborda el problema de "cómo" con el que tengo problemas: organización - ¿cómo? es decir, ¿cómo modelar las estructuras? Liderazgo: no lo suficientemente activo, supongo. Todavía tengo que recordar una sola visita del propietario del subsistema (equivalente al "propietario del producto" en scrum básico, creo) en cualquiera de las reuniones de scrum en 2 equipos en los que participé. Ambiente del proyecto: bastante bueno en realidad, la gente sigue siendo optimista, amigable y dispuestos a ayudarse unos a otros. Simplemente parece que no podemos poner nuestro acto juntos en un "todo" parsimonioso.
El "cómo" no es algo que se pueda responder en un sitio como este. No es una receta, una lista de verificación o una solución rápida. Es un proceso que comienza con una comprensión más profunda de la organización. Necesita un agente de cambio o catalizador empoderado.