Relato de un desarrollo ágil en la industria petrolera

Resumen

Este artículo describe un proyecto en el que participé hace un par de años cuyo objetivo era la informatización del proceso de gestión de licitaciones de una empresa del rubro petrolero. El mismo fue realizado por un equipo de 4 personas en un plazo de 5 meses, trabajando con prácticas ágiles de gestión en el marco de un contrato de alcance variable.

Contexto del proyecto

Trabajaba yo en aquel momento en un empresa de desarrollo de soluciones informáticas y nos había contactado una empresa del rubro petrolero para informatizar su proceso de la gestión de licitaciones. Hasta aquel momento esta empresa tenía un proceso de licitaciones totalmente manual lo cual implicaba:

  • Gran volumen de información en papel
  • Alto costo de gestión
  • Licitaciones más largas de lo deseable

El objetivo del proyecto era resolver estas cuestiones a partir de la informatización de proceso y adicionalmente lograr:

  • Una mayor transparencia del proceso de licitaciones
  • Mayor visibilidad del proceso
  • Tener métricas del proceso que permitan detectar posible puntos de mejora

Un detalle técnico relevante era que la solución debía ser implementada sobre una plataforma de gestión de contenidos (CMS) que el cliente ya estaba utilizando.

El acuerdo

La venta del proyecto fue llevada a cabo por el gerente del área de desarrollo con mi asistencia, que en aquel momento era líder técnico. Ambos hicimos un primer relevamiento a partir del cual, mi equipo de técnicos y yo hicimos una estimación de esfuerzo. Luego junto con el gerente del área del área de desarrollo, hicimos un plan tentativo de versiones (release plan ) tomando como base la estimación realizada por el equipo, los riesgos detectados y las fechas deseables que había manifestado el cliente.

Es importante destacar que antes de la presentación formal de la propuesta tuvimos una reunión con el cliente en la que hicimos una presentación informal de la misma, para explicar nuestra forma de trabajo y así asegurarnos que la propuesta escrita fuera bien interpretada. La propuesta tenía algunas particularidades interesantes:

  • Indicaba explícitamente que tendríamos reuniones semanales para validar el trabajo realizado y así tener feedback temprano y constante. Esto nos permitiría asegurarnos de estar construyendo el producto que el cliente necesitaba
  • Establecía un alcance variable, lo cual estaba justificado por la incertidumbre que había respecto de cómo se informatizarían ciertas cuestiones del proceso de licitación. Si bien la empresa ya tenía un proceso de licitaciones que venía utilizando, el mismo era manual y su informatización implicaba ciertos cambios en dicho proceso.Algunos de esos cambios era bien claro cómo debían ser, pero había otros que no y que requerían algo de experimentación.
    Al mismo tiempo la empresa de desarrollo se comprometia a entregar un sistema informático de soporte a la gestión de licitaciones. No se establecía el alcance completo de ese sistema pero estaba claro que ciertas funcionalidades debían ser cubiertas por el sistema.
  • El acuerdo tenía un alcance un año, donde los primeros 5 meses estaban destinados a generar la versión inicial de sistema con un equipo a tiempo completo. Los restantes 7 meses se preveía un esquema de soporte y mantenimiento evolutivo con un compromiso de unas 80 horas mensuales.

Inicio de proyecto

Aproximadamente 2 semanas después de haber presentado la propuesta, el cliente confirmó que haría el proyecto con nosotros. Para mi satisfacción el equipo encargado de la ejecución estaba conformado por los mismo técnicos que habíamos realizado la estimación inicial. De esta forma, por parte de la empresa desarrollo los involucrados éramos:

  • Danilo: gerente de desarrollo y responsable comercial del proyecto
  • Ramiro: era el responsable de sistemas del cliente.
  • Nicolás (yo): líder técnico del equipo de desarrollo y facilitador del proyecto
  • Camilo y Roberto: dos técnicos del equipo de desarrollo

Por parte de la empresa cliente los involucrados eran:

  • Felipe: sponsor, era el directivo de la empresa cliente que estaba pagando por el proyecto
  • Gabriel: era el responsable del  área de compras y en el contexto del proyecto ocupaba el rol experto de negocio y  product owner
  • Manuel y Matías: eran dos empleados del área de compras y como tales eran los futuros usuarios del sistema

La primer iteración fué particular pues duró sólo 1 semana y la dedicamos a algunas típicas del inicio de proyecto como ser configuración de ambientes y capacitación de los expertos de negocio sobre la dinámica de trabajo.

Para la gestión del proyecto utilizamos la herramienta Trac, que era la herramienta estándar utilizada por nuestra empresa de desarrollo en aquel momento. Dicha herramienta brindaba:

  • Gestión de tickets y plan de versiones
  • Wiki
  • Acceso web
  • Almacenamiento de documentos
  • Integración con sistema de gestión de código Subversion
  • Envío de notificaciones ante determinados cambios en los artefactos del proyecto

Dinámica de trabajo

El equipo de desarrollo trabajaba en sus oficinas, las cuales se encontraban a 1o minutos de a pié de las oficinas del cliente. En líneas generales la dinámica de trabajo estaba dada por :

  • Iteraciones time-boxed de 2 semanas de duración
  • Reuniones presenciales de planificación al comienzo de cada iteración
  • Reuniones presenciales de revisión y demostración al final de cada iteración

Dado que la informatización del proceso requería repensar algunos pasos del proceso de licitación, era común durante las iteraciones, hacer algunas reuniones adicionales a para ir analizando/definiendo las «nuevos pasos» del proceso de licitación.

Durante las reuniones de planificación se definían las funcionalidades a implementar en la iteración actual y establecían los criterios de aceptación de las mismas. Dichos criterios eran luego refinados y bajados a detalle por los especialistas de negocio en un plazo máximo de 3 días luego de la reunión de planificación. De esta forma el equipo de desarrollo podía contar con los criterios de aceptación antes de finalizar el desarrollo de las stories.

Apenas finalizada una funcionalidad, la misma era validada con un experto del negocio de forma de tal llegar al final de la iteración con la mayor parte de las funcionalidades con cierto grado de validación. La reunión de revisión al fin de la iteración no solía era un momento tenso, pues el cliente ya sabía lo que sea se iba a encontrar. Si una funcionalidad había sido completa, el cliente ya la habia visto y había dado algo de feedback. Al mismo tiempo, si alguna funcionalidad no había sido completada, el cliente también lo sabía previamente, pues el equipo comunicaba este cualquier tipo de desvío apenas lo detectaba.

Había un detalle importante respecto de la forma en que el equipo planificaba las iteraciones. Las reuniones de planificación se hacían los lunes de la primera semana de la iteración, preferentemente por la mañana. Las reuniones de revisión de hacían los viernes de la segunda semana de la iteración. Sin embargo, el equipo planificaba de cara a completar el desarrollo el miércoles de la segunda semana de la iteración, lo cual dejaba un día y medio para hacer prueba de regresión y realizar ajustes correspondientes al feedback temprano obtenido de los expertos de negocio.

Tanto la definición del proceso, como las user stories y sus correspondientes criterios de aceptación, eran escritos en la wiki del proyecto, en muchos casos por los mismos especialistas de negocio y luego eran revisados por algún miembro del equipo de desarrollo. También se pretendía que los expertos del negocio se encargaran de ejecutar las pruebas de aceptación, aunque esto no siempre se lograba.

La fase de desarrollo se completó con algunas variaciones respecto de lo planificado pero sin problemas graves. Una vez que el sistema estuvo productivo, se pasó a mantenimiento tal como estaba previsto.

Consideraciones finales

No todos los clientes están dispuestos a trabajar de la forma aquí descrita ni tampoco todos los proyectos lo requieren. Tal vez el proyecto se podría haber realizado utilizando otra dinámica de trabajo, pero en su momento creímos que esa era la forma apropiada de llevar ese proyecto. Hoy en día sigo pensando lo mismo.

Entre los puntos que considero fueron claves para el éxito del proyecto no puedo dejar de mencionar:

  • El alto grado de involucramiento de los expertos de negocio
  • Comunicación constante
  • Confianza del cliente en el equipo y vice versa
  • Compromiso y transparencia

El gráfico de Burndown

Este gráfico es muy utilizado en la gestión ágil de proyectos y muchas veces se lo suele hacer en forma manual en el tablero del proyecto.

En el eje horizontal se representa la dimensión tiempo y en el eje vertical se representa trabajo remanente. La unidades utilizadas para cada una de estas dimensiones pueden variar dependiendo de lo que se pretenda mostrar.

El uso más frecuente para este gráfico es durante el desarrollo de una iteración. En tales casos, en el eje vertical se representan los story points remanentes y en el eje horizontal los días de la iteración.

En el siguiente gráfico se muestra el burndown correspondiente  al día 12 de una iteración donde el trabajo remanente es de 12 story points (línea bordó). También puede apreciarse en color gris una línea punteada que representa una proyección basada en el ritmo actual de trabajo del equipo. Finalmente la línea de color naranja muestra el ritmo de trabajo que debería tener el equipo para llegar a completar el trabajo remanente al final de la iteración.

burndown

El gráfico de burndown también puede utilizarse para tener una visión de la evolución del proyecto a más alto nivel que la iteración actual. En este caso se representan iteraciones en el eje horizontal y los story points correspondientes a las user stories aún no completadas en el vertical.

burndown-iteraciones

 

Nota: el primer gráfico aquí mostrado corresponde a un proyecto en el que participé hace ya algunos años cuando solía trabajar con iteraciones de 3 semanas. En la actualidad prefiero trabajar con iteraciones más cortas, generalmente de 1 semana.

Eventos comunitarios en la última parte del año

La semana pasada se llevó a cabo en la ciudad de Rosario la Smalltalks 2013, lamentablemente no pude asistir y digo lamentablemente porque según me han comentado estuvo excelente.

Por otro lado este viernes 8 hay un evento de lujo en el contexto de la comunidad ágil de Buenos Aires: un open space con la participación de Alistar Cockburn y Mary y Tom Poppendieck. El evento se llevará a cabo a partir de las 14.30 hs en el Centro Metropolitano de Diseño. La entrada es gratuita pero requiere registración.

El sábado 16 de Noviembre se llevará a cabo el  primer  workshop de proyecto Uqbar para la discusión de ideas innovadoras en programación e ingeniería de software. Me resultó muy interesante y por eso la semana pasada envié una propuesta de sesión sobre la que aún no he recibido respuesta.

Finalmente, los días 27 y 28 de noviembre se llevará a cabo en el centro cultural Konex la RubyConf Argentina. Si bien el evento no es gratuito, sin duda vale la pena asistir si uno trabaja con Ruby.

QA no es testing

Una confusión que muy frecuentemente encuentro es el uso del término QA para referirse a cuestiones de prueba. Voy a intentar aclarar un poco esta confusión.

Existen diversas definiciones de calidad. Una de ellas es la que define calidad como ausencia de defectos. Esto nos lleva a definir qué entendemos por defecto. En términos generales podríamos decir que un defecto es una no conformidad con los requerimientos/especificaciones.

El testing es una actividad enfocada en la detección de defectos. El testing por si sólo no asegura la calidad de un producto. Decir que al testear se mejora la calidad de un producto, sería equivalente a decir que por pesarse se baja de peso. El testing brinda información sobre los defectos de un producto, del mismo modo que una balanza brinda información sobre el peso. Luego en base a esa información uno puede tomar acciones correctivas, como hacer dieta en el caso de sobrepeso, o corregir los defectos en caso que estos sean de una severidad no aceptable. En términos más formales el testing es denominado Quality Control (QC).

Ahora bien, testear para detectar defectos y luego corregirlos, es un enfoque de calidad en cierto modo reactivo. Esto nos lleva a la pregunta: ¿podremos hacer algo más proactivamente para asegurar la calidad de nuestros productos?

Si aceptamos que la calidad del producto está influenciada por el proceso de construcción del mismo, entonces podríamos tomar un enfoque de calidad más proactivo, definiendo tareas en nuestro proceso de cara a asegurar la calidad. Esto es precisamente lo que se denomina aseguramiento de calidad o simplemente QA (Quality Assurance).

Entonces, siendo explícito: el aseguramiento de calidad (QA) tiene que ver con procesos, no con testing. Claro que existe cierta relación entre estas dos actividades, pero también es cierto que cada una de estas actividades requiere de distintas habilidades.

Resumiendo:

QA = Quality Assurance = Aseguramiento de calidad -> Procesos
QC = Quality Control = Control de calidad -> Testing