Si vis pacem para bellum

Archivos en la categoría J2EE

02 - Revisión de Siniestros 1.0 - Tiempo (2/2)

No he sido capaz de cambiar nuestro modelo productivo a un modelo basado en el compromiso, basado en la calidad y las buenas prácticas recopiladas en décadas en la industria informática que como he mencionado al principio del artículo es el camino más corto y menos costoso. Las previsiones de carga de trabajo para el siguiente trimestre fueron obvidadas en mis dos primeras y únicas entregas, así como el road map para llegar a este modelo de compromiso.

Todas las técnicas y mecanismos utilizados para gestionar los tiempos (principalmente el MS Project con la vista del Diagrama de Gantt), al igual que los documentos que describían el alcance, resultaban inútiles ya que los documentos generados quedaban obsoletos incluso antes de terminarlos.

02 - Revisión de Siniestros 1.0 - Tiempo (1/2)

La Gestión de los Tiempos del proyecto ha sido algo impuesto sobre todo por el cliente y el mercado, en la que nosotros como proveedores hemos tenido muy poco peso a la hora de decidir más allá de limitarnos a decir que es imposible realizar tal entrega en esta fecha en estas circunstancias.

Antes de este proyecto creía que la Gestión de los Tiempos era fundamental dentro de la gestión de un proyecto, y sin embargo ahora pienso que este aspecto es más bien secundario y que hay que dedicarle menos esfuerzo. El énfasis hay que ponerlo en trabajar bien centrándonos en otras actividades : una correcta gestión del alcance, de los riesgos y de la calidad es el camino más corto en tiempos y en costes, y el que cumplamos con el plan previsto dependerá de una buena estimación y un mínimo de control.

Si anteriormente comentaba que uno de los grandes problemas que hemos sufrido ha sido la indecisión y mutabilidad del alcance, otro de los grandes problemas con los que nos hemos encontrado ha sido la constante imposición de tiempos nada realistas y cambiantes, lo cual no podía dar como resultado nada más que retrasos y un producto de baja calidad : mala calidad de código, constantes rediseños y juegos de pruebas inútiles y confusos.

Como ejemplo, los que hayáis leído esta sección estaréis pensando en Mutua Madrileña, pero con Barclays es más grave: se planificó una carga de trabajo de más de 100 jornadas de las que disponíamos para completarlas en 1 mes y medio y arrancar el proyecto mañana, lo cual suponía aumentar el número de personas en el equipo en una semana, que vengan aprendidas y con experiencia y formarlas en un producto tan complejo durante la entrevista. Condiciones innegociables con el cliente, una situación ideal para nosotros como proveedores.

Ya hablaré en otra entrega de la inexistente Gestión de Riesgos (paradójico en una empresa de seguros). Identificar los riesgos es parte del trabajo que he realizado, así como informar al resto de los stakesholders del proyecto. Sin embargo eran constantemente ignorados y nunca incluidos en la planificación, lo cual evidentemente provocaba aún más retrasos al materializarse alguno de ellos. Más prisas y menos calidad aún.

Además cada parte ha intentado resolver este problema por su parte en lugar de en común, lo cual no ha hecho nada más que empeorar la situación. Se debieron establecer fechas más realistas.

  • Por un lado el cliente nos daba fechas cada vez más ajustadas para reservarse un par de semanas de colchón con sus responsables.
  • Por otro lado no disponíamos de los recursos necesarios para cumplir con las fechas comprometidas con el cliente porque mi empresa daba por hecho que habría retrasos y no quería asumir ese sobrecoste.

Me resulta incomprensible realizar planificaciones y aceptarlas sabiendo que no se van a cumplir. Yo soy más de la escuela de hacer una planificación realista y poner los medios para que se cumplan, o no hacer planificación y centrarse sólo en trabajar y estará listo cuando terminemos.

Ni que decir tiene que la situación empeoró hasta llegar al límite de no me quedó más remedio que

  • Desligar jornadas de trabajo a facturar y jornadas de trabajo necesarias para completar las tareas. Hasta ahora el coste del proyecto venía determinado por las jornadas de trabajo completadas, y yo intenté desligar este concepto para que se tuviesen que buscar otras formas de facturación.
  • Eficiencia. He intentado que cada miembro del equipo fuera lo más eficiente posible en lugar de que trabajasen más, y al menos he conseguido que durante una temporada yo fuese el miembro más ineficiente del equipo ya que no he podido saltarme todas las reuniones improductivas que me hubiese gustado, ni toda la documentación inútil (porque quedaba obsoleta antes de terminarla).
  • Más despacio y mejor. Ya lo dice el refranero, vísteme despacio que tengo prisa, y los siglos de sabiduría popular nos ayudaron. Paramos el desarrollo planificado para intercalar tareas despreciadas como rediseño, diseño de pruebas, limpieza de código, formación… Además las fechas que manejábamos internamente eran lo más realistas posibles para completarlas con un mínimo de calidad, intentado que toda la presión y culpa se quedasen únicamente en un punto : yo mismo.
  • Planificar a más corto : planificación ágil mediante iteraciones. En todo momento hay cientos de jornadas de trabajo pendiente (pero no aprobado por el cliente), en parte hacer bien lo que teníamos que haber hecho desde el principio (como una arquitectura para el cliente, testeo, automatización de pruebas, refactorización…) y otras mejoras que se han ido detectando con el tiempo por los usuarios. He perdido jornadas enteras en planificar y replanificar ese trabajo sabiendo que era tiempo totalmente perdido, así que he tenido que imponer sacarlo todo de la planificación y mandarlo al backlog para preocuparnos únicamente de las iteraciones. No obstante, ni siquiera podemos completar una iteración de dos semanas sin que nos cuelen trabajo no planificado.

También he intentado sin éxito hacer ver la realidad tanto al cliente como a mi empresa de que en estas circunstancias es imposible comprometernos ni a unas fechas ni a una calidad mínima como para dar garantía del producto : trabajamos en un modelo "best-effort", hacemos lo que podemos pero sin compromisos.

La verdad es que está presión a la que me ví sometido ha estado a punto de poder conmigo. Con problemas tan graves como evitables, sin soluciones disponibles a pesar de su simplicidad y bajo coste, sin poder razonar, un camino en que cada día era peor que el anterior… No os lo recomiendo. Cada día me acordaba de la conversación con Chema en la cafetería del Ministerio, sobre si estaba bien pagada la responsabilidad y aguantar toda esta mierda.

Actualmente la situación es sostenible, hemos aprendido todos a sobrellevar esta situación de indefinición en el alcance y pagar las consecuencias con el mantenimiento de producción, en lugar de pagar el coste de hacer bien las cosas. Hace un año se decidió no gastar pesetas para ahorrar duros. Hoy no gastamos duros para ahorrar euros. Y mañana?

Éxitos

  • Retomar el control de los tiempos del proyecto : más despacio, mejor hecho, menos trabajo más eficiente.
  • Planificaciones flexibles más cortas
  • Mejorada la gestión del estrés tanto personal como del grupo.

Oportunidades de mejora para el futuro

  • Hacer explícito los retrasos provocados por el alcance indefinido, baja calidad, "best-effort", riesgos… Y mantenerlos en la planificación aunque el cliente se niegue.

Imprescindible para el futuro

  •  No aceptar compromisos cuando todo lo que puedes hacer es un "best-effort". Quizás uno de los problemas que tengamos es que las cosas no están saliendo tan mal como se están haciendo, gracias a heroicidades personales de los participantes (Gracias!).

01 - Revisión de Siniestros 1.0 - Alcance (2/2)

Inicio del alcance

A mi gusto fue un error ceder en la calidad desde el momento cero del proyecto, debimos incluirla explícitamente en el alcance del proyecto. En su momento realcé su importancia pero lo dejé como una elección del cliente : si quiere tener un producto no muy bueno, es su dinero. Sin embargo también nosotros nos podríamos haber ahorrado disgustos y duros.

Debimos hacer más énfasis en las métricas para valorar el éxito, trabajo completado y desviaciones, ya que únicamente valorar que el aplicativo esté en producción en una fecha es totalmente insuficiente. Este es el punto más fuerte de TDD (Test Driven Development) y por la que creo me gustaría empezar a implantarlo.

  • Entradas
    • Descripción del producto, sin sentido en esta etapa 1.0 ya que no se sabía qué se quería.
    • Plan estratégico, sin sentido ya que no había una estrategia definida en el cliente. 
    • Criterio de selección de proyectos
    • Información histórica, únicamente unos meses de experiencia en la fase de desarrollo en otro proyecto para este cliente.
  • Herramientas/Técnicas
    • Métodos de selección de proyectos
    • Juicio de expertos
  • Salidas
    • Carta de proyecto. La primera versión estaba bastante acotada en cuanto al alcance, pero las sucesivas replanificaciones y la repentina irrupción de Mutua Madrileña hizo que el cliente perdiese la visión del QUÉ quería y por tanto la indefinición del alcance fue en aumento.
      • Identificar Stakeholders.
      • Criterios de éxito. Puesta en producción del aplicativo en la fecha prevista para las diferentes fases.
    • Resticciones. En el alcance se identificaron una serie de restricciones que más adelante se incluyeron dentro del alcance en sucesivas fases pero con menos tiempo del identificado originalmente. En especial doloroso que el desarrollo del módulo de informes planificado en 20 días se llevó a cabo en 2. Ni que decir cabe de las incontables jornadas que se le han dedicado al manteniemiento, y aún hoy tengo incidencias al respecto ya que hace lo que se especificó que no es lo mismo que hoy se necesita.
    • Suposiciones. Retrasos en entregas por parte del cliente en el entorno, la indefinición y la imposición de fechas inamovibles que se desplazaban es el ambiente ideal para resaltar la importancia de este apartado.

Planificación del alcance

Difícil por los constantes cambios. De hecho con el proyecto ya en marcha se nos pidió otro entregable, un proyecto que gestionase el acceso y los usuarios para todas las aplicaciones del cliente.

En este punto debimos detallar un mecanismo para gestionar cambios en el alcance y sobre todo respetarlo. De poco nos hubiese servido ya que eran diarios y a pesar de la dedicación casi exclusiva de tres personas todo quedaba con un alto nivel de indefinición : fuimos a ciegas desde la venta hasta el desarrollo (no quiero hablar de las pruebas…)

  • Entradas
    •  Descripción del producto
    • Carta de proyecto
    • Restricciones
    • Suposiciones
  • Herramienta/Técnicas
    • Análisis dl producto
    • Análisis Coste/Beneficio
    • Identificación de alternativas
    • Juicio de Expertos
  • Salidas
    • Establecimiento del alcance.
      • Justificación del proyecto. Este proyecto debería de sustituir otra herramienta que está en producción con la que el cliente no estaba contento.
      • Productos del proyecto, el propio aplicativo de gestión de siniestros PPI y un single sign on para gestionar usuarios y acceso unificado para todos los aplicativos del cliente.

Definición del alcance

El WBS quedó a un nivel muy alto, e incluso así sufría demasiadas alteraciones, desplazando trabajo del cliente a nosotros y de nosotros al cliente constantemente.

  • Entradas
    • Establecimiento del alcance
    • Restricciones
    • Suposiciones
  • Herramientas / Técnicas
    • Plantillas WBS
    • Descomposición
  • Salidas
    • WBS (Work Breakdown Struture). Cuando se estaba redifiniendo por enésima vez sobrevino la bomba de Mutua Madrileña con lo cual se abandonó. En las sucesivas fases se definió pero a muy alto nivel pero los constantes cambios de requisitos volvían el documento obsoleto aún antes de arrancar el desarrollo.
    • RAM (Responsability Allocation Matrix) se definió asignándo responsables a funcionalidades y no a elementos del WBS.
    • Revisión del establecimiento del alcance

Verificación del alcance

El alcance era verificado por todos los stakeholders del proyecto e inmediatamente después redifinido por todos excepto por nosotros.

Establecer métricas para medir el éxito de una tarea nos hubiese ayudado en la aceptación del producto.

  • Entradas
    • Resultado de trabajo
    • Documentación del producto
    • WBS
    • Alcance
    • Plan de Proyecto
  • Herramientas / Técnicas
    • Inspección. Medir, examinar y probar para determinas si los resultados satisfacen los requisitos.
  • Salidas
    • Aceptación formal. Cada fase del proyecto contó con su correspondiente aceptación sobre la documentación

Control de cambios del alcance

Sin duda necesario, y utilizado en las primeras jornadas del proyecto. Poco después abandonado por una gestión ad-hoc porque asfixiaba a los recursos (los desarrolladores recibían órdenes cambiantes continuamente, imposible replanificar y rediseñar a tiempo para obtener otra aceptación…). Salvo excepciones críticas, una vez iniciado el desarrollo no se comunicaban a los desarrolladores cambios en los requisitos hasta su finalización.

Se consideraba irrelevante evaluar el impacto de los cambios en el alcance, ya que el coste de los cambios era continuamente infraestimado y su importancia despreciada, además de una permanente discusión de si era mejora o correción, ya que a pesar de aceptar y validar las entregas se intentaba que los errores siempre cayesen sobre nuestras espaldas. Como ejemplo, baste decir que un cambio bloqueante realmente impactante en la aplicación que afectaba desde la bbdd hasta la capa de presentación se estimó en 10 jornadas y se retrasó su acometida meses.

  • Entradas
    • WBS
    • Peticiones de cambio
    • Plan de Gestión de Alcance.
  • Herramientas / Técnicas
    • Sistema de Control de Cambios de Alcance
    • Medidas de actuación
  • Salidas
    • Cambios del Alcance
    • Acciones correctivas
    • Ajustes a las baselines

01 - Revisión de Siniestros 1.0 - Alcance (1/2)

En todo momento del ciclo de vida de este proyecto el alcance ha sido siempre la variable más indefinida y cambiante : ha habido fases en las que los documentos generados quedaban obsoletos aún antes de ser entregados para su aceptación por el cliente.

Durante este proyecto en todo momento se ha sacado fuera del proyecto un montón de requisitos, se han vuelto a meter, se han metido nuevos, se han modificado los existentes… Ha sido uno de los grandes problemas del proyecto, origen de innumerables conflictos con el cliente. Ya sabéis, que si esto estaba incluido para esta fecha, que si dije Diego o dije digo, indefinición en los requisitos incluso durante el desarrollo, no sabíamos qué testear, siempre salen pequeños detalles después de firmar que luego no resultaban tan pequeños, nos pedían que cerrásemos unas jornadas sin tener el alcance al 100%… 

Sin duda es un problema indeseable y evitable en gran medida, fuente de tensiones y tiempo totalmente improductivo. Pero tienes que trabajar con lo que hay, y este cliente (y no los participantes del cliente en el proyecto) tiene esta gran desventaja.

Dos han sido las principales causas :

  1. Desconocimiento del cliente de dónde quería llegar EXACTAMENTE. Por ejemplo, nuestra entrada de trabajo eran frases del estilo a "quiero declarar un siniestro", "quiero un informe de la actividad de la aplicación". Seguro que estarás pensando en que la comunicación no ha sido buena, ya llegaremos a eso en otra entrega.
  2. Lo ajustado del presupuesto nos obligó a dejar a un lado tareas tan importantes pero no esenciales como calidad o gestión. Sí, son actividades en las que gastas pesetas y ahorras duros, y así lo hemos transmitido reiteradamente al cliente. El presupuesto es ajustado también dentro del cliente, por lo que sus recursos propios están sobrecargados de trabajo.

En estas circunstacias se ha hecho inviable una correcta gestión del alcance, de forma natural hemos ido todos tendiendo al abandono de las buenas prácticas en este aspecto y a adecuarnos a las circunstancias.

Los primeros instantes de caos fueron provocados por estos vaivenes en los requisitos y en el alcance. Poco después nos vimos obligados a reaccionar para intentar retomar el control, optamos por la progresiva introducción de la filosofía ágil en algunas fases conviviendo con las metodologías tradicionales mientras queríamos alcanzar la certificación CMMI, hasta prácticamente el total abandono de las metodologías tradicionales en todas las actividades en favor de la agilidad y en ocasiones simplemente actuaciones ad-hoc.

Por supuesto las buenas prácticas nacen de la experiencia, y su abandono sin duda nos ha perjudicado a todos los implicados y en especial a mí, con broncas, prisas, decisiones precipitadas… También el ser más realistas que puristas nos ha salvado a todos varias veces ya que es imposible llegar a un compromiso y cumplir todos en estas circunstacias.

Un punto que no está en el curso que reviso es la garantía de los productos. Creo que es evidente que se debe de ofrecer garantía, y que esta debería de estar contemplada dentro del alcance del proyecto.

Pero ofrecer garantía en qué condiciones? Al igual que se deben de fijar las condiciones de aceptación del cliente, se deben definir estas condiciones en las que la garantía es válida, ya que si el cliente opta (como ha sido el caso) por el total abandono de las buenas prácticas y la calidad, nadando en un mar de dudas, el resultado no puede ser otro que convertir la fase de garantía en una fase de desarrollo gratuito.

Éxitos

  • Con todas las lagunas y buenas prácticas ignoradas, encontrar una adecuada gestión de los cambios del alcance ha sido crítico para sobrevivir en un cliente que nunca ha tenido un requisitos 100% claro antes de arrancar su desarrollo. Sí, ha sido rudimentaria y en ocasiones caótica, pero ha sido la adecuada a este proyecto.

Oportunidades de mejora para el futuro

  • Hacer explícita la calidad en el alcance, y en el caso del abandono de las buenas prácticas y de la calidad también hacer explícito el coste estimado por su abandono. Por ejemplo, si no se automatizan las pruebas gastaremos 5 jorndas más en la fase de pruebas; si no realizamos pruebas la garantía no cubre las primeras 15 jornadas de incidencias…
  • Definir las ventanas en las que se pueden aceptar cambios de requisitos. Esto hubiera sido muy difícil en este cliente, dado que parte de nuestra actividad la marca el mercado, y en la que la propia indefinición de los requisitos nos obligaba a irlos concretando sobre la marcha a la par que avanzábamos en el desarrollo.

Imprescindible para el futuro

  • No ofrecer garantía de los productos entregados sin un mínimo aceptable de calidad. La aceptación del cliente es importante, pero también debe de haber una aceptación del productor para dar garantía si no queremos convertir la fase de garantía en una fase de desarrollo gratuito.
  • Establecer explícitamente métricas para valorar el éxito de una tarea o entregable debe ser utilizado e impuesto al cliente. En el peor de los casos se debe manejar únicamente de forma interna, pero debe manejarse. De esta forma se puede conocer mejor el estado real del proyecto en todo momento, y tener aceptaciones de los entregables objetivas y explícitas por parte del cliente. En este caso no se hizo por el presupuesto tan ajustado que aceptó el cliente, pero igual que el punto anterior es bueno para el cliente este es bueno para nosotros.

00 - Revisión de Siniestros 1.0

El proyecto de Siniestros ya ha cumplido más de un año.

Aún recuerdo sus primeros pasos en la etapa de preventa, planificación y desarrollo, desde sus primeros meses de indefinición y bandazos en su alcance recortando funcionalidades y añadiendo otras o las mismas que se sacaron previamente, preparando nuevos productos inesperados a gestionar, tirar un diseño y otro y otro mientras las líneas de código se apilaban olvidando por completo calidad y pruebas, desplegando la aplicación en un sistema montado el último día y probado en producción…

Meses en producción han madurado bastante este aplicativo y han aportado algo de definición por fin a requisitos tanto técnicos como de negocio aunque no tiempo suficiente para completar las lagunas heredadas de la fase de desarrollo. Poco a poco se ha ido sacando tiempo para rediseñar, limpiar código, automatizar pruebas, mejorar los procesos internos… achicando agua con las manos mientras navegamos por un mar de icebergs con el casco agrietado.

Ahora se está empezando a vislumbrar una versión 2.0 de este aplicativo que se convertirá en producto. Para ello se está hablando de achicar todo el agua que queda, arreglar las grietas, muebles nuevos y mano de pintura al casco. Esperemos que no se quede únicamente en la mano de pintura!

Por eso es un buen momento para retomar este hilo, sacar tiempo para reflexionar aprender de esta etapa. Para ello repasaré un par de cursos que ya realicé hace tiempo tomando este proyecto como un caso más que práctico para mejorar el propio proyecto y compartir las primeras conclusiones.

La próxima semana : Alcance del proyecto, algo que como he comentado ha sido una criatura cambiante que nunca ha estado perfectamente acotado y definido.

Comenta