Taller de TDD, CI & Pair-Programming

En el contexto de las Jornadas de Ingeniería de Software del Uruguay, estuve haciendo un Taller sobre Test-Driven Development, Continuous Integration & Pair-Programming.

Participaron del taller unas 19 personas y a pesar de algunos imprevistos (como que la gente no hubiera leído los materiales de preparación), el taller salió muy bien. La evaluación general del taller fue 4.4 / 5.

Dejo aquí los recursos que compartí con los asistentes del taller:

Primeras Jornadas de Ingeniería de Software del Uruguay (notas personales)

Los pasados martes y miércoles estuve participando de este evento. Tuve el honor de dar el keynote del martes. Hablé sobre un tema de moda que conozco con bastante profundidad: DevOps. Las diapositivas de mi exposición están disponibles aquí.

Entre las exposiciones que me resultaron más interesantes estuvieron:

  • La de Federico Toledo quien contó experiencias en pruebas de performance.
  • La de Guilherme Travassos, un reconocido académico brasilero, quien expuso sobre “Using validation sessions based on technology probe in software development to innovation
  • La de Jorge Corral que habló sobre la exportación de servicio de IT a USA
  • La de Nicolás Jodal,  quien habló sobre los desafíos de 30 años de evolución de Genexus (producto desarrollado por su empresa).

Más allá de las exposiciones hubo una mesa redonda de la que participaron varios referentes de la industria uruguaya del Software en la que se destacó la presencia de la Ministra de Industria Carolina Cosse.

Agradezco a Diego Valespir, Cecilia Apa y al resto del equipo organizador por la haberme invitado y los felicito por el gran evento realizado.

ArqConf: Infrastructure as Code

El próximo 11 de Octubre se realizará una edición especial de la ArqConf sobre la temática particular de Infrastructure as Code.  En ese contexto estaré dando una charla titulada “Consideraciones de Diseño para un modelo de Infraestructura”. Lo sé, el nombre no resulta muy atractivo pero confío en que contenido resultará valioso:

De la mano de DevOps, SREs y un conjunto de herramientas, la práctica de Infraestructura como Código ha adquirido una gran popularidad en los últimos años. La adopción de esta práctica implica una toma de decisiones que entre otras cosas incluye el diseño de un modelo de infraestructura y la selección de herramientas asociadas. En esta sesión veremos un conjunto de conceptos y recomendaciones para tomar estas decisiones de cara a una efectiva implementación de la práctica de Infraestructura como Código.

La cita es el 11 de Octubre a partir de las 14.30 en las instalaciones de Universidad Tecnológica Nacional, FRBA en Medrano 951, más info y registración en meetup.

De la máquina del developer directo a Producción, sin escalas

Ayer estuve participando de un meetup donde Marcos Nils estuvo contando sobre su implementación de GitOps. Su presentación me pareció muy interesante pero lo que más me llamó la atención fue cuando comentó que en su organización no tienen ambiente de testing, ni staging, ni nada parecido, o sea: cada developer trabaja en su máquina, sube su código a Git y eso dispara una serie de pasos que terminan instalando una nueva versión en el ambiente productivo. No todos los pasos  son necesariamente automáticos, puede que haya algún trigger manual, pero el punto central es que la aplicación no es instalada en ningún otro ambiente más que el productivo.

Apenas escuché esto me resultó muy disruptivo, luego, en el intervalo hablé personalmente con Marcos y me siguió pareciendo disruptivo, ¡ja! Una estrategia de GitOps implica una alto de grado de automatización y el manejo de infraestructura como código, lo cual facilitaría mucho el armado de nuevos ambientes. Sin embargo, lo que me comentaba Marcos es que ellos hicieron un análisis y no encontraron la necesidad de un ambiente de prueba: tienen tests automatizados y algunas cosas las prueban directamente en producción utilizando usuarios particulares de forma de no interferir con los usuarios reales. La respuesta de Marcos me pareció razonable, pues tomaron las decisión con cierto fundamento y contando con toda una serie de medidas (automatización, monitoreo, alertas, etc) que les ayudan a mitigar algunos de los riesgos de no tener un ambiente de prueba.

Personalmente las veces en que me encontré con equipos/organizaciones sin ambiente de prueba, ha sido por la imposibilidad de armar dicho ambiente en lugar de ser consecuencia de una decisión analizada. Al mismo tiempo, en varios de los proyectos que he participado había un contexto de regulaciones que obligaban a contar con un ambiente de prueba/homologación, previo al ambiente productivo.

Pero quien sabe, tal vez algún día tenga la oportunidad de experimentar con una estrategia de este tipo.

Primeras Jornadas de Ingeniería de Software del Uruguay

Los días 16 y 17 de Octubre se realizarán en Uruguay las Primeras Jornadas de Ingeniería de Software y tengo el honor de haber sido invitado como orador.

En ese contexto estaré hablando sobre unos de los temas “calientes” de la actualidad: DevOps. Concretamente el título de mi disertación será “DevOps, myths and facts of a new paradigm“. También estaré dando un taller enfocado en Test-Driven Development, Continuous Integration y Pair-Programming.

Las jornadas son de entrada libre y gratuita pero es necesario registrarse. Pueden encontrar más información en la página del evento y siguiendo la cuenta oficial de twitter.

De visita por España y Portugal

Del 21 al 25 de Mayo voy a estar participando de la conferencia XP 2018 que tendrá lugar en Porto, Portugal. En ese contexto, el lunes 21 por la mañana voy a estar dando mi Taller sobre Prácticas DevOps. Por otro lado, el martes 22 por la tarde voy a estar presentando junto a Diego Fontdevila el resultado de nuestro trabajo de investigación Technical and Organizational Agile Practices: A Latin American Survey.

Pero antes de todo esto, pasaré un par de días en Madrid y aprovecharé para participar de un Meetup de la comunidad Madriagil.  Estaré presentando una versión actualizada de la charla Patrones de Infraestructura para Continuous Delivery que presenté en año pasado en Agile 2017. Agradezco a Israel Alcázar por la organización del Meetup.

Más allá de estas actividades, si algún informático tiene ganas compartir unos tragos en algún punto de mi travesía, me escribe y coordinamos.

Agiles 2017, día 2

El día comenzó con una dinámica para “despertarnos” y algunos anuncios parroquiales. A continuación: marketplace. Si bien ya del día anterior habían quedado agendadas algunas sesiones, las mismas no eran suficientes para completar la agenda. Un detalle a destacar es que para evitar que el marketplace se estirara tanto como el día anterior, se decidió reducir el tiempo de presentación de cada sesión a 30 segundos, lo cual funcionó muy bien (#lessonLearned).

Una de las sesiones que había quedado agendada del día anterior, fue la de “Introducción a Extreme Programming” que hice a primera hora de la jornada. Al igual que en mi otra sesión, hubo mucha más gente al final que al inicio, tal vez unas 50 personas. Para la sesión utilicé las diapositivas de mi ya clásica sesión de ModernXP, los cuales están disponibles para descarga aquí.

Inicio de mi sesión de Extreme Programming

A continuación, asistí a la sesión de Lucho Salazar sobre Story Conversation Canvas, una herramienta en papel desarrollada por el propio Lucho para guiar las conversiones sobre User stories. La herramienta me pareció muy útil y como siempre la oratoria de Lucho… impecable.

Ya por la tarde, estuve en el coding dojo “TDD por Zombies” facilitado por Martín Salias y Edson Chavez. Como era de esperar fue excelente. Trabajamos sobre la famosa Mars Rover Kata y aunque no llegamos a completarla, las discusiones que se dieron estuvieron muy buenas.

Continuando con cuestiones técnicas, en el siguiente bloque asistí a la sesión de Diego Fontdevila “TDD al uso nostro” en la cual contó la forma en que están haciendo TDD con una visión de negocio. Me gustó el enfoque y me llevé como tarea revisar la herramienta Serenity BDD.

Sesión TDD al uso nostro

Finalmente, cerré el día con la sesión de Hernán Wilkinson: “OOP programming is not Dead: Objetos vs. Funcional”. El principal punto de la sesión fue que la programación orientada a objetos y las programación funcional no son rivales sino complementarias. Concuerdo. Un detalle menor, el título de la sesión me pareció impreciso porque si bien se abordó lo prometido, la mayor parte de la sesión estuvo centrada en otras cuestiones.

La jornada cerró con una dinámica que no puedo describir porque me colgué en una charla en la zona del jardín.

Por la noche, compartí una muy agradable cena con Loreto, Mario Lucero, Javier Garzas, Monica, Patricio Montecinos y Héctor Mosquera.