Agiles 2015: llamado a presentación de sesiones

Hace un par de días abrimos el llamado a presentación de sesiones para Agiles 2015. Me alegra mucho el hecho de que ya hemos recibo 6 propuestas y apenas pasaron 3 dias desde que comenzamos con la difusión.

Tal como había mencionado en algún artículo anterior, este año tenemos algunas novedades respecto del proceso de evaluación/selección de sesiones. En primer lugar estamos pidiendo que cada propuesta venga acompañada de un video de 3 minutos donde el autor de la sesión haga una invitación a participar de la misma. Esto tiene un doble objetivo: por un lado ver como se expresa el autor, escucharlo hablar y por otro lado tener material para difundir el evento una vez la sesión haya sido seleccionada para el evento.

Otro novedad es que hemos incluido explícitamente una instancia de feedback en la cual el grupo de evaluadores de la conferencia se compromete a dar feedback concreto a los autores para que estos puedan mejorar así su propuesta y aumentar las chances de que su sesión sea seleccionada.

En tercer lugar hemos agrupado los temas de interés en 3 grupos (temas técnicos, de gestión y extra-software) asignando a cada uno un coordinador que se encargará de responder consultas de los autores, coordinar el proceso de evaluación de las propuestas de su track y finalmente coordinar el armado de la grilla del track. Al igual que en años anteriores, también es posible que toda persona de la comunidad vea las propuestas y envíe feedback a los autores por medio del sistema

Finalmente, la última novedad tiene que ver con la aplicación que estamos usando para gestionar el envío/revisión/evaluación de sesiones. Estamos estrenando una aplicación creada a medida que comenzamos a codear en Agiles 2014 y que luego @ferdibartolo se encargó de completar. Para ser sinceros, Fer la codeó casi de cero pues en Agiles 2014 apenas si llegamos a armar la estructura y definir algunas entidades. ¡Grande Fer!

Bueno gente, esto es todo por ahora, los invito a poner manos a la obra y enviar sus propuestas. Aquí está el detalle del llamado y aquí está el sistema para enviar sus propuestas (y también para ver las propuestas ya subidas).

opencall_home

Sobre mi keynote en Agile Open Camp

El Agile Open Camp tendrá un formato Open space pero con 5 keynotes predefinidos y resulta que fui invitado para dar uno de ellos. Si bien ya había dado keynotes en el pasado, incluso en eventos más grandes, siento que este caso es distinto. En primer lugar porque tengo una gran expectativa con el evento, creo que a nivel comunidad puede marcar un hito en lo que respecta a la forma de organización. Al mismo tiempo sé que en el evento estarán presentes varios de los referentes de la comunidad lo cual en cierto modo me mete un poquito más de presión.

En lo que a temática refiere me enfocaré en DevOps, algo con lo que vengo trabajando muy fuerte en los últimos 3 años y que me parece es un tema bastante “picante” en este momento.

Finalmente me siento obligado a hacer una aclaración. Desde hace ya un tiempo que vengo “pateando en contra” de tener keynote speakers en los eventos que organizamos en la comunidad Agiles ¿Y ahora voy a ser keynote speaker? Si. La explicación de mi posición respecto de esta cuestión merece un post aparte, con lo cual por el momento me voy a limitar a decir simplemente que a pesar de ser keynote speaker no espero recibir ningún trato especial, que es justamente lo que siempre me ha molestado de los keynote speakers. Espero ser un chango más en la multitud, compartiendo los mismos espacios y actividades que el resto de los asistentes. La única diferencia será que en determinado momento tendré el honor de hablar frente a todos ellos en una sesión predefinida (en el sentido que no pasará por el marketplace del open space.)

El Configuration Manager: habilidades y conocimientos

Una empresa con la estoy trabajando actualmente tomó la decision de tener dentro de cada equipo una persona con el rol de configuration manager. Inicialmente me generó ciertas sospechas, la única persona que conocí ocupando formalmente un rol así realizaba tareas que restaban mucho más de lo que sumaban y por ello los equipos terminaban ignorándola. Al mismo tiempo los proyectos exitosos que conozco deben parte de su éxito al hecho de que el equipo maneja las tareas de configuration management de forma integral en el día a día del proyecto.

Pero luego de pensarlo más detenidamente y analizando las particularidades del contexto, me autoconvencí que tener un configuration management por proyecto podía ser una buena idea  ya que en términos generales los equipos no tenían un buen control de la configuración debido en gran parte a falta de conocimiento. Entonces la idea era que estos CM se encarguen de ayudar a los equipos a incorporar prácticas de control de la configuración.
Ya convencido de la idea me puse a pensar que habilidades y conocimientos debería tener una persona para ocupar el rol de CM tal como lo estaba planteando esta organización. Más allá de conocimientos generales de Configuration Management, que se mencionan en cualquier libro de Ingeniería de Software identifiqué los siguientes puntos:
  • Background de desarrollo / perfil técnico
  • Sólidos conocimientos del sistema de control de versiones de la organización (Git en este caso)
  • Sólidos conocimientos de la herramienta de build de la organización (Maven en este caso)
  • Conocimiento de Build Server (Jenkins en este caso)
  • Conocimiento de bash
  • Disciplina
  • Capacidad de aprendizaje
  • Capacidad de liderazgo

 

 

BDD, ATDD y SBE ¿es todo lo mismo?

En la actualidad nos encontramos con estos 3 acrónimos que en muchas ocasiones son utilizados como sinónimos y cuya diferencia no es del todo clara. Más aún, en Una Mirada Ágil los mencionamos a modo informativo sin entrar en mayor detalle pues consideramos que en esencia todos apuntan a lo mismo: la importancia central del trabajo colaborativo entre técnicos y la gente del negocio para especificar la funcionalidad a construir utilizando ejemplos concretos. Y también todas ponen el aspecto colaborativo por encima del aspecto técnico (ejecución automatizada).

Personalmente creo que las principales diferencias radican en que cada uno de estos términos surgió como consecuencia de distintas líneas de trabajo que se desarrollaron en paralelo con distintos protagonistas, todos ellos trabajando principalmente desde la industria y bajo un paradigma de desarrollo ágil. Más allá de los argumentos que pueda tener cada uno de los protagonistas para insistir con su terminología creo que adicionalmente hay una cuestión natural de “orgullo” (y posiblemente también de negocio/marketing) que en cierto modo dificulta la unificación de terminología. Como suele decirse: “Cada maestro con su librito”.

Más allá de esto quisiera dedicar algunas líneas a cada propuesta en particular:

Behaviour-Driven Development (BDD)

Este es el término posiblemente más utilizado en la actualidad, muy asociado a la familia de herramientas Cucumber y cuyo mayor referente es Dan North. El mismo North define BDD como:

BDD is a second-generation, outside-in, pull-based, multiple-stakeholder, multiple-scale, high-automation, agile methodology. It describes a cycle of interactions with well-defined outputs, resulting in the delivery of working, tested software that matters. 

Resalto aquí el hecho de considerar BDD una metodología lo cual es posiblemente la mayor diferencia (a nivel de marketing al menos) con las otras técnicas.

Acceptance Test-Driven Development (ATDD)

Sin duda el punto inicial de todo esto fue TDD, cuya concepción original por Kent Beck era levemente distinta a la actual. Inicialmente Beck hablaba tanto de prueba unitarias como de usuario (customer tests en términos de XP), pero con el correr del tiempo el término TDD fue tomando una connotación unitaria, o sea, en la actualidad TDD se interpreta casi exclusivamente como UTDD (Unit Test-Driven Development). De ahí la necesidad de utilizar el término ATDD para referirse explícitamente a un ciclo de más alto nivel en el cual está involucrada la gente de negocio. Una curiosidad es que Beck en su libro TDD by Example menciona ATDD, pero como acrónimo de Application Test-Driven Development en lugar de Acceptance que es el término utilizado en la actualidad.

Specification by Example (SBE)

Este es el término impulsado por Gojko Adzic y personalmente es el que más me gusta. No porque proponga algo muy distinto, sino simplemente por la terminologia que propone. En el prefacio de su libro Specification by Example Gojko propone una terminología y explica porque la terminología alternativa comúnmente utilizada no le resulta apropiada.

Finalmente no quiero dejar de mencionar que hay algunos otros términos que también suelen utilizarse como sinónimos y que en esencia son lo mismo pero cuya popularidad es mucho menor. Entre ellos se encuentran Story Test Driven Development (STDD) y Example-Driven Development (EDD).

BDD, ATDD y SBE ¿es todo lo mismo? Si.

Breve historia de las herramientas BDD – parte 2

En un artículo anterior conté una parte historia, he aquí la otra.

Mientras que Dan North y los suyos trabajaban sobre JBehave y afines que luego llevarían al surgimiento de Cucumber, Ward Cunningham trabajaba en cuestiones relacionadas a pruebas de aceptación.

El trabajo de Cunningham se tradujo concretamente en una herramienta llamada FIT: Framework for Integration Testing, cuyos objetivos pueden resumirse como:

  • Ayudar a pensar y comunicar las necesidades que debe cubrir una aplicación de software en base a ejemplos concretos de uso
  • Probar automáticamente desde una perspectiva de negocio que una aplicación de software hace lo que efectivamente se espera de ella y que continúa haciéndolo a medida que crece en funcionalidad

Para lograr esto, FIT propone escribir los ejemplos con herramientas capaces de generar HTML (Word, Excel, etc) utilizando distintos tipos de tablas para dar cierta estructura unificada a los ejemplos y facilitar así su interpretación. Una vez escritos los ejemplos trabajando en conjunto con gente de negocio y técnicos, se escribe código Java que interpreta la tablas e interactúa con la aplicación en cuestión.

El propio Ward Cunningham escribió la primera implementación FIT en Java, mientras que tiempo después James Shore tomó la coordinación general del proyecto y colaboró en la implementación en C#.

En 2005 Ward Cunningham junto con Rick Mugridge publicaron el libro Fit for Developing Software: Framework for Integrated Tests, el cual explica de forma bastante detallada el uso de FIT.

A lo largo del tiempo han ido surgiendo diversas herramientas en el ecosistema FIT, algunas de las cuales se integran con FIT mientras que otras lo extienden. Una de las más destacadas es FitNesse, desarrollada por inicialmente por Robert Martin y que en cierto modo agrega una interface de usuario por encima de FIT permitiendo que los ejemplos sean escritos en una Wiki. De esta forma FitNesse oficia de interface de usuario y FIT de motor de ejecución. Esta combinación tuvo buena recepción en la comunidad y para 2006 David Chelimsky y Mike Stockdale ya habían publicado una implementación de FIT en C#.

Fue a partir de esa implementación en C# que en 2008 Gojko Adzic publicó el excelente libro Test Drive .NET Development with FitNesse. Si bien este libro tiene un foco técnico, el autor resalta la importancia del trabajo colaborativo en entre gente de negocio y técnicos para la identificación y especificación de ejemplos. Los siguientes libros de Gojko se centraron precisamente en estas cuestiones de colaboración dejando de lado las cuestiones técnicas.

Fuentes:

Expectativas para el nuevo cuatrimestre en FIUBA

Esta semana comenzó el cuatrimestre en FIUBA. En el curso 3 (miércoles) tenemos poco más de 40 alumnos 2 de los cuales son de intercambio (uno de Colombia y otro de Francia). Respecto del equipo docente, quedó conformado por DiegoM, PabloRM y yo, lo cual no dá prácticamente unos 15 alumnos por docente, un número no tan malo tratándose de UBA, sobre todo si tenemos en cuenta que según la política de la facultad la relación debería ser de 1 docente cada 20 alumnos.

Como de costumbre, la gran mayoría de los alumnos (~85%) son de la carrera de ingeniería informática.

En términos generales no tenemos planificadas grandes innovaciones para este cuatrimestre, pero en particular en el curso de los miércoles intentaremos realizar más actividades de programación en clase, ya que según pudimos relevar en la primera clase, muchos alumnos podrían asistir a clase con sus computadoras personales.

fiuba_2015

 

Cuando un libro te toca: #MasProductivos

Hace unos días tuve un intercambio de mails con un colega que ya al tercer mail empezó a levantar temperatura. Escribí el quinto mail del intercambio, lo releí y de repente me acordé algunas cosas que había leído en el libro #MasProductivos de @martinalaimo. Le di vueltas en mi cabeza por un par de minutos y finalmente terminé escribiendo:

“Creo que entiendo tu punto y me parece que hay algunas cosas que no comparto, pero no considero que el mail sea el medio más apropiado para intentar ponernos de acuerdo. A menos que tengas una propuesta diferente, te propongo hablar este tema mañana cuando nos veamos físicamente”

Recibí una respuesta corta y positiva. Al día siguiente, tuve la charla presencial con mi colega y rápidamente pudimos llegar a un acuerdo win-win sin ningún tipo de rispideces ;-)

Entrega continua principio #1: 3 repositorios por aplicación

Creo que en la actualidad está ya claro que debemos tener un repositorio para versionar el código de nuestra aplicación. Algunos también versionan  en ese mismo repositorio la configuración de la aplicación. Para algunos casos esto puede ser suficiente, pero en contextos de entrega continua no me parece apropiado.

En primer lugar la configuración y el código tienen un tasa de cambio distinta, el código cambia mucho más rápido que la configuración. Al mismo tiempo la configuración suele variar dependiendo del ambiente en que se despliegue la aplicación. Finalmente, dependendiendo de la organización puede que la configuración del ambiente productivo sea reservada y sólo algunos miembros de la organización puedan accederla. La propuesta entonces es tener un repositorio exclusivo para almacenar la configuración de la aplicación. En particular, yo suelo crear en ese repositorio un branch por cada ambiente. Adicionalmente para facilitar el trabajo del equipo de desarrollo suelo almacenar junto al código, la configuración del ambiente desarrollo.

Finalmente necesitamos un tercer repositorio para almacenar los scripts de despliegue. La idea de poner estos scripts en un repositorio exclusivo tiene que ver otra vez con su tasa de cambio esporádica y también con el hecho de que es posible que estos scripts sean creados/manipulados por personas distintas a las que escriben el código, típicamente sysadmins.

En algunos casos particulares puede que sea necesario un cuarto repositorio, por ejemplo si uno quisiera generar modulos Puppet para automatizar el provisioning de la aplicación.

Pensándolo bien, creo que el título del artículo no es preciso, el principio es versionar todo,  el hecho de usar 3 repositorios es más bien una forma de implementarlo, que puede no aplicar siempre.

Emoción: avance de ingeniería en el CBC

Hoy desayuné con una noticia que me emocionó: la última inscripción del Ciclo Básico Común (curso de ingreso) de Universidad de Buenos Aires indica que habrá más ingresantes 2015 en carreras de ingeniería que en carreras de ciencias sociales, una situación casi inédita.

Claro está que la UBA no es la única casa de altos estudios en el país, pero sin duda es una institución de referencia y es posible que esta tendencia sea un reflejo general de la sociedad. Parece que los esfuerzos de promoción de las carreras técnicas hechos por las diversas organizaciones relacionadas a la industria han dado frutos.

La noticia me llegó por medio de este artículo del diario Clarín, lo que me resulta curioso es que la información provista en el mismo artículo indica que el título de la nota es incorrecto, ¡ja!

 

DevOps, una nueva idea no tan nueva

El término DevOps fue acuñado por Patrick Debois quien allá por 2009 organizó una serie de conferencias bajo el título DevOpsDays. El objetivo de estos eventos era incentivar una visión holística de la entrega de software derribando las barreras de la visión tradicional que separaban el desarrollo del software de su operación. A pesar que el término fue acuñando hace ya más de 5 años, creo que fue en los último 3 que tuvo un salto de popularidad potenciado entre otras cosas por herramientas como Chef, Puppet, Docker, y Vagrant y por prácticas como Infraestructura as Code, Test-Driven Infraestructure y Self-Service Provisioning.

Si bien la idea de DevOps aún hoy puede parecer novedosa para algunas organizaciones, para algunas otras siempre ha sido moneda corriente. Hablando más en concreto creo que DevOps suele resultar novedoso o incluso revolucionario para grandes organizaciones de tipo “tradicional” como bancos, telcos e incluso organismos gubernamentales. Al mismo tiempo me parece que es moneda común en organizaciones surgidas en la era de internet como .coms y startups.

Personalmente desde 2012 soy parte del equipo de Tipit, una empresa dedicada a brindar soluciones web y que adicionalmente cuenta con un conjunto de aplicaciones ofrecidas como servicio.
Tipit es una empresa chica pero que tiene bien claro que sus clientes pagan por el valor aportado al negocio y que en este contexto se traduce en software funcionando en manos del usuario. Dicho de otra forma, en términos de valor no existe la diferencia entre desarrollo y operación, la cuestión es blanco o negro: ¿está la funcionalidad lista para ser usada en un ambiente productivo o no?

Al igual que la mayoría de mis colegas en Tipit, yo trabajo tanto en tareas de desarrollo como en tareas de operaciones. Esto no implica que todos hagamos todo, todo el tiempo, sino que cada uno tiene un rol en cada proyecto pero más allá de ese rol particular que cada uno desempeña, todos somos responsables de que el software este disponible en manos del usuario cuando este lo necesite. Entre otras cosas esto requiere no dejar las cuestiones de operaciones para la última milla, sino tenerlas presentes en forma temprana, ya desde el momento del diseño de cada funcionalidad.