Resultados del Taller de lntegración Continua

El jueves pasado hicimos en Kleer el taller de integración contínua. No tuvo tanta práctica como yo esperaba, pues hubo muchas consultas, pero creo que estuvo muy bien. Cubrimos todos los puntos del programa y atendimos a todas consultas de los asistentes.

Algunas variantes a considerar para futuras ediciones:

  • Enfocar el taller sólamente en Jenkins
  • Enfocar el taller en una única tecnología (Java , .Net, etc)
  • Hacer el taller de día completo o de dos medios días para poder hacer más práctica

Les dejo algunos frases de las encuestas de la evaluación completadas por los asistentes:

  • “Excelente las explicaciones y conocimientos expuestos”
  • “Muy bueno, si bien conocía algunas de las herramientas, vi un poco más en detalle todo el potencial de uso que tienen”
  • “Nada para agregar, el taller fue genial..”
  • “Excelente Didáctica y cobertura del tema”

Screencast sobre despliegue automático en .NET

El jueves pasado participé de un Meet up organizado por Microsoft Argentina en el cual presenté la estrategia de despliegue automático que estoy usando en uno de mis proyectos actuales.Como la sesión no fue grabada, grabé este screencast.

Para aquellos interesados en profundizar en este tema, les recomiendo que se sumen al taller de integración continua que voy a dictar a comienzos de diciembre.

cd_en_net

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.

Definición de hecho y entrega limpia

En el contexto de los métodos ágiles suele hacerse mucho énfasis en la definición de hecho (definition of done). Esta definición puede variar dependiendo del contexto.

Personalmente desde que «vi la luz», mi definición de hecho consistió en:

  • El cumplimientos de condiciones de aceptación de la funcionalidad
  • El cumplimiento de las convenciones de codificación
  • El visto bueno por parte del Product Owner

Obviamente en cada nuevo proyecto procuro revalidar esta definición tanto con mi equipo como con el cliente.

Sin embargo, hace unos años empecé a ir por más. Ese «ir por más» tiene que ver con no sólo cumplir la definición de hecho, sino también  con lograr una entrega limpia. La idea es simple aunque puede no resultar fácil de explicar. Para intentar explicarlo voy a describir un contra ejemplo que me tocó vivir recientemente.

Resulta que un cliente necesitaba de una herramienta para resolver determinadas cuestiones de su deber cotidiano, pero debido a ciertas restricciones de agenda no podía involucrarse de lleno en el desarrollo de dicha herramienta. Como yo venía trabajando con él desde hacía un par de meses y conocía en profundidad la problemática a resolver, acordamos que yo ocuparía el rol de product owner. La herramienta fue construida en un par de semanas por un equipo de su organización cumpliendo con todos los «chiches»  (pruebas unitarias, de aceptación, integración continua, alta cobertura, etc, etc).
Luego de 2 semanas de finalizada la construcción de la aplicación, mi cliente se dispuso a ponerla en producción para empezar a utilizarla y entonces….¡chan! El procedimiento de instalación no estaba claro al igual que algunos requerimientos de runtime, lo cual llevó a varias horas de troubleshooting hasta que finalmente la aplicación quedó operativa. Esto es un ejemplo de entrega no-limpia.

Es muy posible que la situación pudiera haberse evitado si la aplicación se hubiera puesto en producción al final de la primera iteración, pero diversas cuestiones llevaron a que eso no fuera posible. Pero si miramos la situación a la luz de la filosofia de entrega limpia, esta entrega no fue limpia. Una entrega limpia habría incluido los pasos detallados para puesta en marcha de la aplicación  y no sólo eso, sino que dichos pasos habrían sido probados para asegurar que fuera correctos.

La entrega limpia tiene que ver con dar ese paso extra que finalmente termina haciendo la diferencia y deleitando al cliente.

Continuous Delivery en Agiles 2013

Durante la conferencia hubo varias sesiones sobre continuous delivery, una de ellas fue la mía. Dado que fue en el último turno del día intenté que fuera bastante movida, por eso arranqué con música y palmas, lo cual atrajo algunos curiosos que estaban en la cercanía de la sala.

Una vez terminó el ingreso del público hicimos tribus para así conocer el perfil de la audiencia. Resulto que había una audiencia dividida, la mitad no conocía continuous delivery y de los que sí conocían, sólo uno pocos tenían experiencia.

Yo personalmente quedé muy conforme con cómo salió la sesión y según el feedback que obtuve parece que los asistentes también se fueron conformes.

Durante la sesión conté con la colaboración de mi colega Luis Mulato.

Aquí están los slides que utilicé en la sesión y para quienes me preguntaron, el tema que sonó al comienzo de la sesión se llama Tapa de los sesos y es de Los Visitantes.

Algunas ideas para Agiles 2014

En el open space de Agiles 2013, Alan propuso hacer un Agiles 2014 radicalmente distinto. Entre las particularidades de la propuesta incluyó:

– Que la conferencia sea 100% Open Space
– Que no haya keynotes speakers
– Que haya un único nivel de sponsors

Personalmente me gusta esta propuesta y es en parte por ello que esto escribiendo este artículo.

El punto que más me gusta es el primero, pero el segundo me parece más importante.

Tradicionalmente desde la comunidad siempre hemos hecho un imporante esfuerzo en traer keynotes speakers extranjeros, llegando en un punto a menospreciar a los referentes locales. De hecho en las primeras conferencias no había keynotes speakers locales, lo cual puede en cierto modo justificarse por el hecho de que la comunidad estaba aún en formación. Personalmente creo que esa situación inicial ha cambiado mucho y creo que quedó en evidencia en Agiles 2013 donde el keynote speaker local (Gustavo Quiroz) fue incluso mejor que los keynotes speakers extranjeros.

No es que pretenda no tener keynotes speakers extranjeros, sino que me gustaría que en caso de tenerlos, los mismos sean de primer nivel. A mi entender los keynotes speakers que hemos tenido en los últimos años, aunque muy buenos, dudo mucho que puedan ser keynotes speakers de una conferencia mundial de Agile.

 

Agiles 2013, día 3

Al igual que el año pasado, el último día del evento fue en formato open space, pero comenzó comenzó con un keynote a cargo de Gustova Quiroz.

Luego del keynote, largamos con el open space. Al igual que viene ocurriendo últimamente, obviamos la parte de la votación y buscamos la forma de que todas las sesiones tuvieran su espacio. Curiosamente hubo una muy baja proporción de sesiones técnicas: alrededor de 5 sobre un total de más de 30.

De las sesiones que participé, me resultaron especialmente interesantes una propuesta por Janet Gregory en la hablamos sobre experiencias de automatización de pruebas y otra propuesta por JuanG en la que hablamos sobre las habilidades de los testers.

Gran parte de la tarde estuvo dedicada a sesiones relacionadas a cuestiones comunitarias como ser la selección del grupo de representantes/facilitadores, definición de la sede del año próximo, formato de la próxima conferencia, etc, etc.

En estas sesiones fue elegido un comité/grupo de facilitadores/representantes (llamenlo como gusten) conformado por 2 representantes de los equipos organizadores de las conferencias anteriores y 1 representante por cada pais de los presentes en la conferencia.
Luego un largo análisis y varias rondas de preguntas, el grupo de facilitadores eligió a Medellín (Colombia) como sede para la próxima conferencia. La otra ciudad candidata era Montevideo (Uruguay). La elección favoreció a Medellín por la mínima diferencia (1 voto).

Ya sobre las 6 de la tarde fue el cierre del evento, con facilitación de Alan y algunas palabras de los organizadores.
Aquí pueden ver un breve video de la dinámica de la máquina del sonido con la que cerramos el evento.

Luego del cierre, fue la retrospectiva del evento.

Ya por la noche fue el evento social el cual se llevó a cabo en «La peña del Carajo» y que entre pisco, cerveza, música criolla y cachengue, se estiro hasta horas de la madrugada.

Agiles 2013, día #2

La jornada comenzó con el keynote de Janet Gregory quien habló sobre «el cambio». Me resultó bastante abstracto y algunos de los ejemplos que utilizó a mi entender no aplicaban a la realidad de latinoamérica.

A continuación asistí a la mejor sesión del día: Integrating Agile UX into your project. La misma estuvo a cargo de Rafael Petri y trató sobre diversas cuestiones de UX. Creo que me gustó tanto por tratarse de temas que siempre me han interesado pero en los que nunca he profundizado.

Luego seguí con la sesión Continuous Delivery with Mobile. En lo que hace específicamente a mobile la sesión aportó muy poco, pero me resultó muy interesante la forma en que fue explicado CD haciendo una analogía con la producción/consumo de café.

Ya el cierre de la mañana fue con la sesión de Mary Poppendieck, la cual estuvo dedicada al Lean Mindset. La sesión estuvo centrada en la presentación de casos e incluyó varias cuestiones del próximo libro de Mary.

Por la tarde, asistí a la sesión Current Testing Challenges de Janet Gregory, la cual me resultó muy interesante y me dejó varias cosas para pensar (próximamente post aparte sobre algunas cuestiones de testing que me surgieron de esta sesión).

La siguiente sesión fue la de Edson Chávez, un artesano de software que habló sobre su oficio. Si bien yo ya estaba familiarizado con el movimiento de software craftsmanship, la sesión me resultó muy entretenida por el estilo y los ejemplos utilizados por Edson.

Ya en el último tramo del día asistí a la sesión de Jorge Gamba sobre BDD. Estuvo bien, pero personalmente no me aportó nada nuevo.

La última sesión de mi día fue la de Angel Nuñez Salazar, quien habló sobre deuda técnica y presentó un modelo interesante para cuantificar su impacto económico. La sesión me gustó y me pareció muy innovadora pues nunca había visto nada de ese tipo.

El día terminó con una «sesión extraordinaria» en la que se debatieron temas de la comunidad, puntualmente se habló sobre el mecanismo de toma de decisiones de la comunidad, otro tema que también merece un post aparte.

Agiles 2013, día #1

El día comenzó con el keynote de Jurgen Appelo. Me gustó mucho, el mismo se tituló «Champs Frog». Podríamos decir que trató sobre un modelo para facilitar el cambio organizacional.

Luego asistí a una sesión titulada «Team of Leaders», la misma trató sobre liderazgo en equipos ágiles y básicamente fue un relato de la experiencia de los oradores. Estuvo bien, pero personalmente no me sumó nada nuevo.

La siguiente sesión que asistí fue de índole técnica y trató sobre testing de aplicaciones Andriod. Me resultó muy interesante y me llevé varias cuestiones para reveer. El orador fue bien claro y concreto.

Ya cerrando la mañana asistí a una sesión que prometía mucho «Diviértete en forma segura con Javascript», pero quedó sólo en la promesa, pues a las 10 minutos me retiré porque detecté que eran todos temas que ya conocía por demás.

Luego de compartir el almuerzo con Andy y Sole Pinter, asistí a la sesión de Jurgen Appelo, pero llegué bastante tarde ya que almuerzo se alargó más de lo debido, ¡ups!

La segunda sesión de la tarde fue de la JuanG que habló sobre planificación de la prueba. Como desde hace un tiempo, Juan no usó slides, sino un poster para facilitar la sesión, la estrategia presentada me resultó interesante.

Ya sobre las 5 de la tarde, estuve en la sesión de Gustavo Quiróz que presentó una técnica para retrospectivas enfocadas en propósitos. Estuvo bien.

Finalmente terminé el día con mi sesión sobre Continuous Delivery, pero eso será tema de otro post.

agiles_2013_dia_1