Proyecto CMS, día #4 y #5

Me atrasé, por eso aquí paso el reporte de los últimos dos días.

El día #4 (el lunes pasado), fue durísimo, muy poco avance pues me pasé casi todo el día haciendo troubleshooting de ciertas funcionalidades que detectamos no corrian correctamente en el ambiente de prueba. Primero habia una temita con ciertos chequeos de seguridad de Rails que se activan por default cuando la aplicación corre en environment=production. Una vez detectado y resulto este tema, surgió algo inesperado. La gema XMLObject (que mencioné en otro post) lanzaba una excepción en el ambiente de test, pero en mi máquina y en el build server andaba joya. Finalmente resulto que se debia a un cambio de implementación en una dependencia que en Ruby 1.9.3 andaba joya pero no así en Ruby 1.9.1 (versión de la instancia de test). La solución «rápida» una vez detectado el problema, fue remplazar esa gema por Nokogiri. Por suerte el cambio era interno a una clase la cual tenia los correspondientes test. No hubo mayor historia pero me consumió muchísimo tiempo.

El día #5 fue mucho más productivo, logramos completar las dos stories siguientes en orden de criticidad para el negocio y al mismo tiempo un miembro de otro equipo se hizo cargo de una story que nos iba a llevar mil años implementarla por no estar familiarizados con un determinado módulo de la aplicación.

Continuará…

 

Proyecto CMS, día #3

Un día realmente complicado pero para que se entienda debo dar un poco más de contexto del proyecto. Anteriormente mencioné que tenemos varios equipos trabajando en distintos lugares alrededor del globo, pero lo que no mencioné es que cada equipo trabaja en cosas distintas, básicamente cada equipo tiene un subproyecto. La visión global del proyecto es tomar un sitio existente y ponerlo a correr sobre la plataforma CMS. Esto implica varias cuestiones:

  • Agregar a la plaforma CMS algunas funcionalidades faltantes (aquí estoy yo)
  • Estabilizar algunas funcionalidades de la plataforma que hasta el momento no estaban en uso (equipo en India)
  • Migrar la información del sitio «viejo» a la plataforma (equipo en USA)
  • Realizar diversos ajustes a nivel de infraestructura (otro equipo en USA)
  • Realizar varias gestiones a nivel organizacional (por ejemplo el anuncio de prensa)

Todo esto nos lleva a que distintos equipos, trabajando en distintos lugares, en distintas bandas horarias, se encuentren tocando el código de una misma aplicación. Uno podría pensar que usar una estrategia de feature branch podría ser apropiado, pero quienes llevan la batuta del proyecto tienen una postura bastante extrema y se han tomado la cuestión del delivery contínuo muy a pecho. Por ello es que todo el mundo trabaja sobre el trunk utilizando una estrategia de Feature Toggle. Personalmente no me termina de convencer, pero por ahora funciona. Al mismo tiempo, para poder dar soporte a la estrategia de delivery contínuo contamos con una robusta infrastructura basada en Jenkins y Heroku. Tenemos dos ambientes casi identificos corriendo en Heroku: preview y producción. Cada vez que se completa una story, se realiza un depliegue a preview. Por su parte Jenkins tiene 4 trabajos:

  • Integración contínua, se dispara automáticamente en cada commit, ejecuta las pruebas unitarias (Ruby y JavaScript) y verificaciones de código
  • Integración, ejecuta pruebas de integración y se dispara automáticamente luego de cada despligue a preview
  • Depliegue a Preview, se dispara manualmente y como su nombre lo indica, despligue la aplicación y tagguea
  • Depliegue a Producción, se dispara manualmente

La complicación del día se debió a que el equipo estaba trabajando en la migración de datos, probó sus scripts con la base del ambiente de preview y ello generó ciertas inestabilidades en la instancia de preview. La situación se vió agravada porque este equipo no avisó de esto al resto de los equipos. ¿y porque no mencionaron eso en la reunión de standup? Simplemente porque no asistieron, ja!. Para sumar un poco más de tensión a la situación, resulta que en otra parte del globo estaba el cliente probando la aplicación, ja!.

En cuanto se detectaron las inestabilidades, todos los equipos suspendimos nuestras tareas y nos pusieron a ver cuales eran las causas de las misma. Luego de varias verificaciones detectamos que el problema se debía a los datos inconsistentes/faltantes y pudimos resolverlo. Todo este revuelo me costó dos horas. A pesar de eso pude completar mis compromisos del dia y desplegar mis stories al ambiente de preview.

Una vez más ví confirmada mi tesis, el principal factor de éxito de los proyectos, no es una cuestión de técnica, sino humana: comunicación.

Continuará…

Proyecto CMS, día #2

Si bien el equipo de Argentina está distribuido, hoy me reuní para trabajar con un compañero pues teniamos que atacar una de las funcionalidades más críticas del proyecto. La jordana fue muy productiva,  mucho TDD, varios debates sobre como nombrar métodos, tres rondas de mate y una taza de café para despejar el sueño luego del almuerzo.

Aprendizajes varios:

  • FactoryGirl, una gema facilitar las pruebas con dependencias de base de datos
  • XML-Object, una gema para acceder a un documento xml utilizando sintáxis de objetos
  • SublimeText es un interesante IDE que en algún deberia probar
  • Si bien en la actualidad hay herramientas como Google Hangout que facilitan mucho el trabajo remot0, no hay nada como el trabajar sentado junto a un compañero y aún más si ese compañero sabe más que uno 😉

Mañana será un día intenso pues vamos a desplegar una nueva versión de la aplicación con las funcionalidades desarrolladas hasta el momento.

Año nuevo, proyecto nuevo (cms): contexto y día #1

Hace ya un tiempo vengo trabajando con gente de ThoughtWorksPurpose y Tipit, en una especie de CMS para montar sitios de ONGs. Un par de dias atrás me contactaron para un proyecto puntual: hacer una prueba de concepto agregando soporte de donaciones recurrentes utilizando el servicio de Recurly. La prueba de concepto fue exitosa y cliente nos pidió que hicieramos la implementación «posta» de esta funcoinalidad para así poder montar en la plataforma el sitio de una ONG.

Dadas ciertas restricciones de negocio, el proyecto fue definido tipo «comando»:  8 dias para implementar la funcionalidad de donaciones, montar el sitio de la ONG y ajustar varias cuestiones de UI. En términos más concretos el proyecto debe dar solución a 8 user stories. Algunos datos de contexto del proyecto:

  • Equipo distribuido entre Argentina, USA e India
  • Tecnologia base: Ruby
  • Plataforma de ejecución: Heroku + PG + Amazon
  • Herramientas de soporte: GitHub, Jenkins, ChiliProject, Campfire y GoToMeeting

Hoy fue el día #1 y por el momento el mayor riesgo que tenemos son algunas definiciones pendientes del lado del negocio. Si mañana no tenemos algunas de estas definiciones vamos quedar bloqueados y ello va producir retrasos.

Continuará…

Artesania de Software, el movimiento

Es muy posible que los siguidores de este espacio conozcan algo sobre métodos agiles. En la misma línea que lo métodos ágiles pero yendo un poco más lejos, hace unos años apareció otro movimiento llamado Software Craftsmanship.

Este movimiento pone el acento en ciertas cuestiones de índole más técnica y entre sus referentes cuenta con Uncle Bob, Micah Martin y Paul Pagel (estos últimos dos tuvimos el gusto de tenerlos en la Conferencia Latinoamericana de Métodos Agiles). El punto de entrada a este movimiento es su manifiesto y a mi parecer este video de Uncle Bob.

A modo de resumen les recomiendo este comic que esquematiza bastante bien las distintas visiones del desarrollo de software según el enfoque tradicional, el enfoque ágil y el enfoque craftsmanship.

Agile Open Seguridad 2012 @Baires

Este sábado 24 a partir de las 9 se llevará a cabo este encuentro en las instalaciones de Universidad de Belgrano. Si bien el formato es open space, ya hay algunas sesiones propuestas.

Aqui les dejo un par de links con más información: www.agiles.org/agile-open-tour/agile-open-buenos-aires-2012—seguridad y www.agiles.org/agile-open-tour/agile-open-buenos-aires-2012—seguridad/difusion

Agile Tour Venezuela 2012: Mérida

Por estoy dias me encuentro en Venezuela, pues he sido invitado a participar como orador de la edición 2012 del Agile Tour Venezuela. Este año el tour tiene dos escalas: Mérida (8/11) y Caracas (10/11).

Ayer fue el evento el Mérida. La cita fue en las instalaciones de la facultad de ingeniería de la Universidad de Los Andes. La jornada comenzó 8.30 con la apertura de @pablolis, yo hice una dinámica para romper el hielo y que gente se suelte.

A continuación fue el turno de mi sesión: El paradigma del Valor que como su nombre lo indica estuvo centrada en este elemento central de los métodos agiles que curiosamente no es nombrado explícitamente en el manifiesto (aunque sí en los principios).

Luego de mi sesión tuvimos un coffee break y a continuación estuvo la sesión de Marxjony quien compartió su experiencia de aplicación de Scrum en un organismo estatal de Venezuela.

La siguiente sesión fue la Gustavo Bazán, quien habló sobre BDD, una interesante exposición que cubrió muy bien el tema. Luego de la sesión tuvimos un ameno debate sobre la forma de escribir las especificaciones.

La agenda de la tarde fue definida on-the-fly, durante la mañana pusimos una cartelera para que los asistentes pusieran post-its con sus inquietudes/expectativas/consultas, y luego en base a ello definimos las sesiones de la tarde. Fue asi que la tarde comenzó con dos sesiones en paralelo. Una de ellas fue facilitadas por PabloLis y trató sobre Scrum y cuestiones de gestión ágil. La otra fue facilitada por mi y fue básicamente un coding dojo usando la kata del Login. A continuación tuvimos una sesión plenaria en la que en la que hicimos la dinámica de la Fábrica de Aviones. Tuvimos 6 grupos de trabajo y 3 product owners (Pablo, Eli y yo). A diferencia de otras ocasiones, permitimos que cada grupo definiera la duración de sus iteraciones, lo cual hace que la sesión sea un poco más caótica pero creo que vale la pena pues resulta más enriquecedor para los grupos.

Una vez finalizada la dinámica de los aviones, hicimos el cierra de la jornada con una retrospectiva. Los asistentes se manifestaron muy contentos y conformes con la jornada, surgieron un par de propuesta de hacer el evento más seguido o incluso hacer de mayor duración (2 jornadas completas).

Personalmente quedé muy satisfecho, hubo muy buena energia durante toda la jornada y me resultó muy enriquecedor el intercambio con gente de un contexto diferente al mio.

¡Gracias totales!

Agiles 2012: Día #3

El día completo fue con dinámica de Open Space y fue facilitado por Alan Cyment (@acyment).

La primer sesión que asistí fue la propuesta por Hernán Wilkinson, en la que hablamos sobre lambdas, closures y continuations. Muy interesante (y muy techie).

Luego participé de la sesión sobre la comunidad, en la que compartimos experiencias de las comunidades de los distintos paises de latinoamerica.

Ya por la tardé, estuve en una sesión sobre contratos ágiles, de la cual me llevé algunos puntos interesantes. En particular me gustó el enfoque presentado por Carlos (@carlosgabriel_).

Finalmente, asistí a una sesión facilitada por un joven de Intel cuyo nombre no recuerdo, en la que debatimos sobre distintos enfoques para atacar la deuda técnica. De aquí tambień saqué una listita de ideas.

Hacia las 5 de la tarde, Alan facilitó en cierre del Open space y a continuación los presidentes del evento, EmilioG y Pablo RF, hicieron el cierre y facilitaron la retrospectiva. Más allá de los clásicos agradecimientos a los sponsors, voluntarios y organizadores, el cierre contó con el condimento adicional del anuncio de la sede de la seguiente conferencia: Agiles 2013 será en Lima, ¡allí vamos!

Agiles 2012: Día #2

El día comenzó con el excelente keynote de Martin Salias (@MartinSalias) hablando sobre agilidad en las organizaciones. Resultó muy interesante la reflexión de Martín sobre el hecho de que el manifiesto ágil en sus 4 afirmaciones solo hace referencia al software en una ellas: Software funcionando sobre documentación exhaustiva. Entonces, si reemplazamos Software funcionando por Innovación de producto, podemos aplicar el manifiesto a cualquier organización. Una particularidad interesante de este keynote fue que la última parte estuvo protagonizada por la audiciencia, ya que Martín invitó a los asistentes a compartir sus experiencias/opiniones.

Luego del keynote asistí a la sesión «Refactoring Conversation Smells», facilitada por Luis Parzianello (@lcparzianello) . Generalmente estamos acostumbrados a hablar de code smells para referirnos a situaciones en el código de una aplicación que delatan algún posible problema. En el mismo sentido, es posible detectar «posibles problemas» en las conversaciones. Basada en esta analogia, la sesión tuvo una primera parte de exposición/discusión y luego una segunda dedicada a actividades prácticas desarrolladas de a pares. Me gustó y espero poder aplicar algunas de las cosas vistas.

Luego del almuerzo asistí a la sesión dictada por Thomas Wallet, en la cual jugamos al Business Value Game, un juego muy entretenido sobre valor de negocio, muy apropiado para aquellos que se estan acercando al paradigma del foco en el valor propuesto por los métodos ágiles.

Este segundo día cerró con el evento social de la conferencia, que se desarrolló en el bar llamado Canario Negro, donde entre pizzas, cerveza y karaoke, pasamos una velada muy entretenida.