Agile Open Spain 2009: ¡impresionante!

Aun estoy que no me lo creo. Pedazo de evento nos ha salido, y cuando digo nos ha salido me refiero a los 160, si 160, asistentes. Aunque los patrocinadores y la organización también hemos tenido algo que ver seguro. No cito a nadie de la organzación para no dejarme a nadie: compromiso compartido y responsabilidad compartida, para lo bueno y lo malo.

No esperaba yo tanto de este evento, sobre todo era bastante escéptico en lo que al formato de open space se refiere. Eso de no tener una lista de sesiones de antemano me ponía un poco nervioso ¿cómo podía saber que las sesiones merecían un viaje desde Bilbao? ¡Nada me garantizaba tener un hueco a pesar de que mi empresa patrocinaba el evento! ¿y si no había temas suficientes? ¿y si había mucho? ¿y si construir la agenda era un proceso eterno?… El resultado a tener de la retrospectiva que entre todos los asistentes realizamos al final del evento no puede ser más satisfactorio. En lo personal decir que a sido uno de los eventos en los que más he disfrutado… y mira que he participado en eventos ¿eh?…

La primera jornada del evento, viernes por la tarde, se dedicó a montar la rejilla. Básicamente el proceso es escribir el título de tu propuesta (sesión, debate, charla magistral o lo que sea) y tu nombre en una tarjeta, comentar en un minuto de que va el tema y luego poner tu tarjeta en un panel con una chincheta. Luego todos los asistentes cogen tres pegatinas rojas que representan votos y las reparten por aquellas sesiones de su interés. Se recogen las sesiones más votadas y de manera colaborativa se distribuyen por la rejilla de sesiones. Entre mi compañero Jose Luis y yo propusimos cinco sesiones (tampoco hay que abusar) y salieron las cinco. Una pena que una de J se solapo con una mía y no pude asistir. El que salgan todas tus propuestas tiene una pega, no puedes ir a las sesiones de los demás… es el único  pero que puedo poner. A continuación podéis ver la rejilla. Repasando la rejilla he visto que hay una sesión mía a la que no asistí, ¿Ya tengo Scrum y ahora qué?, se fusiono con otras y no me di cuenta. Pensé, erróneamente que se había quedado fuera, lamento el error y pido disculpas.

Sesiones Agile Open Spain

Las sesiones a la que acudí fueron:

Artesanía del software, propuesta por Xavi Gost

Esta sesión molo de verdad, la más friki, de todas la que asistí, sin duda. Pura diversión. La radical propuesta de Xavi (al que le ‘da vergüenza ser tan frki’ jajajaj…) era dejar fuera de la sala todo lo que oliese a negocio y centrarnos en la parte más artesanal, lúdica y motivadora del desarrollo de software. A final la sesión se centro en la belleza del código. Xavi defendía que el código debe ser bello, que el código bello en un valor en si mismo y yo, en otra línea más utilitarista comentaba que para mí el código bello es el código bueno. No todo el mundo compartía mi opinión. Se habló de analizadores estáticos, que garantizan un mínimo de calidad pero nunca belleza y todos concluimos por unanimidad que el camello de Perl es tan bello como mal ejemplo de código mantenible. También se hablo de las escuelas de programación y su relación con las escuelas de Kung Fu. La idea de Xavi que comparto plenamente es que a programar se aprende principalmente con maestros, con gente que te ayuda, es paciente contigo, te corrige el código con cariño (o tobas, en esto no nos pusimos de acuerdo), y leyendo buenos libros. Podéis ver otro resumen de esta sesión (y de otras) y la lista completa de libros propuestos en el post que ha publicado Jose Manuel Prieto sobre el evento.

Control en proyectos ágiles, propuesta por mi

Mi idea para esta sesión era debatir y compartir con los asistentes las métricas y técnicas de control y seguimiento de proyectos que utilizan las metodologías ágiles. Utilice la siguiente ppt para romper el hielo:

Luego a base de preguntas a la audiencia y su participación llegamos a las siguientes conclusiones, que fuimos poniendo en una pizarra durante la sesión:

La base del seguimiento del avance de un proyecto de un proyecto es utilizar tareas pequeñas y binarias.
Es necesario visibilizar y medir el avance.
La métrica clave es la velocidad, pero hacia fuera del equipo interesa más el grado de cumplimiento de lo comprometido en el sprint.
Para cumplir hace falta compromiso, sin equipos dedicados no se logra compromiso. Definir tus equipos es vital.
Solo con estimaciones colegiadas y consensuadas, logramos compromiso por parte del equipo.
Es vital la priorización. Cuando las métricas cantan que estamos retrasados, no tenemos más opción que recortar funcionalidad.
Sin priorización ese recorte deja fuera características importantes y daña el resultado del proyecto irreversiblemente.

Tres años de proyecto con Scrum, propuesta por mi

En esta sesión, ya un clásico, pues la he presentado en una u otra forma en varios foros diferentes trate de comentar mis experiencias de tres años en un proyecto gestionado con Scrum y Team System como herramienta de gestión. Una vez más use una ppt para romper el hielo:

En esta sesión hable de las dificultades, las acciones tomadas ante ellas y los resultados que nos ha dado la adopción de Scrum y Team System en el desarrollo de Captor 3 en Sisteplant. Angel Agueda tiene un excelente resumen sobre esta sesión en su blog, así que os remito a el.

Oficina de proyectos ágil, propuesta por Xavier Albaladejo.

Lo mejor de la sesión sin duda, escuchar las experiencias de Xavier en Indra y ver como está cambiando el panorama de la gestión de proyectos en empresas de esa envergadura gracias a tipos como él. La otra gran cosa fue coincidir con mi viejo conocido Angel Medinilla. Angel es uno de los grandes del agilísmo en España, coincidí con él en el curso de CSM y desde entonces, de un modo u otro hemos estado en contacto. Poder debatir con él la visión de una oficina de proyectos ágil fue toda una experiencia. La principal conclusión de la sesión para mí fue que una oficina de proyectos (PMO) que de una visión global de todos los proyectos de la empresa y que de soporte en ingeniería ágil a todos los proyectos es posible y deseable. También fue muy interesante la aportación de gente que ya está en PMOs, como Juan Mari Huarte de Orona.

Documentación ágil e historias de usuario propuesta por Jose Luis Soria, también de Plain Concepts y por otra persona cuyo nombre no recuerdo (disculpas):

Excelente sesión en la que se trataron temas como:

¿Cúal es la utilidad de la documentación?
¿Cómo de útiles son las historias?
¿Cómo es una buena historia?
La importancia de las condiciones de aceptación
Documentar frente a refactorizar

Las principales conclusiones:

La documentación es un subproducto del software que funciona. Debemos evitarla.
Los wikis pueden ser de gran ayuda, pero también tienen problemas relacionados con la organización, la responsabilidad sobre el contenido etc…. Ninguno de estos problemas anulan su utilidad.
Debemos tender a generar toda la documentación.
La única documentación única es aquella que evoluciona a la vez que el código.

Seguro que Jose Luis nos contará más cosas sobre esta sesión y sobre la otra sesión que propuso sobre gestión de la configuración en proyectos ágiles.

Destacar la aportación de Joao Gama en esta sesión. No todos los días se encuentra uno con un Product Owner profesional y que se dedica a ello ‘full time’. Esto es algo que me encanto del formato open space, ¡cualquiera puede aportar en una sesión!.

Mi conclusión sobre el evento: excelente, no he estado nunca en un evento más participativo. Todo el mundo tuvo voz y todo el mundo tenía cosas interesantes que decir. Pensé que no tenía mucho que aprender sobre agilidad, que era un campo ya muy arado, ¡como me equivocaba!.

Y sabéis lo mejor ¡este era el primer evento de Agile Spain!… en próximas ocasiones no se que va a ser esto…

Por último decir que también aprovechamos para constituir oficialmente como asociación Agile Spain. Puedo presumir de ser uno de los que han firmado los estatutos aun a costa de casi perder el avión… menos mal que lo cogí, sino me cuesta el matrimonio y con razón.

Podéis encontrar una recapitulación de post, fotos y twits sobre el evento en esta página.

¡Un saludo!

Luchando contra los interbloqueos en Sql Server (II): Read Commited y el modo snapshot

Hace ya un tiempo escribía sobre cómo evitar los interbloqueos en Sql Server y como diagnosticar que les está causando cuando se producen. Hoy quiero contar un pequeño ‘truco’ que nos puede ayudar a, sin cambio alguno en el código de nuestra aplicación, reducir las probabilidades de sufrir un bloqueo. Este pequeño truco es un ‘antídoto’ que nos permite solucionar a menudo problemas de interbloqueos con un mínimo impacto sobre la aplicación. Además, esta técnica también puede mejorar el rendimiento de aquellas aplicaciones que estén sufriendo problemas de esperas en bloqueos entre lectores (selects) y escritores (updates e inserts).

El nivel de aislamiento por defecto de Sql Server es Read Commited. Esto quiere decir que este nivel es el más utilizado y que si no tienes ni idea de qué es el nivel de aislamiento este es el que estás utilizando. En este nivel de aislamiento, con el fin de evitar las lecturas sucias, cuando una consulta esta actualizando una fila, establece un bloqueo sobre la misma. Este bloqueo hace que quien quiere leer esta fila, se encuentre con que debe esperar. Este bloqueo en principio inocuo, puede se origen de interbloqueos en aplicaciones altamente concurrentes que no se hayan diseñado adecuadamente. Cuantos mas bloqueos, menos rendimiento, y más posibilidades de interbloqueos Tengo que decir, antes de que mi compañero Pablo Alvarez Doval, gurú de estos temas, me saque los colores, que he simplificado mucho la película, para no liar el asunto.

A partir de Sql Server 2005 se introdujo un nuevo modo de funcionamiento para el nivel de aislamiento Read Commited, que sigue evitando las lecturas sucias y que también evita ese posible bloque dañino del que hablábamos. Este modo es el modo Snapshot del nivel de aislamiento Read Commited, en el que, simplificando de nuevo el asunto, en lugar de establecer un bloqueo que para las lecturas, hace una copia en la sombra (snapshot) de las filas que se están modificando y si alguien intenta leer no lo bloquea sino que devuelve el valor copiado en la sombra. Resumiendo, no hay lecturas sucias como exige el nivel Read Commited y además no hay bloqueo.

Una ventaja adicional de este modo, es que es así y solo así como Oracle se comporta, luego si tu aplicación soporta Oracle y Sql Server, con este modo consigues el mismo comportamiento en ambas bases de datos en lo que a las transacciones Read Commited se refiere.

Evidentemente nada es gratis en la vida, y a cambio de no tener bloqueos, vamos a tener más trasiego en la base de datos temporal (TempDb) donde se almacenan los Snapshot y esta va a crecer en tamaño. En la mayoría de las ocasiones este es un mal menor.

Corolario: Si tienes una aplicación que está sufriendo bloqueos o interbloqueos, donde hay tablas que se escriben y leen concurrentemente, activar el modo Snapshot puede ayudarte a solucionar el problema.

Os dejo un script que establece el modo Snapshot para el nivel de aislamiento Read Commited para un base de datos:

-- Script que cambia en comportamiento del nivel de aislamiento
-- READ_COMMITED para que use snapshots (READ_COMMITTED_SNAPSHOT ON)

-- ¡OJO!: Ejecutar este script establece la base de datos a modo
-- de usuario único y por tanto termina las conexiones actuales a la
-- base de datos

-- Establecer la base de datos sobre la que haremos el cambio

USE <nombreDeBaseDeDatos>

-- Comprobar que la versión es SQL Server 2005 o superior
IF ((SELECT @@microsoftversion / 0x01000000) >= 9)
  BEGIN
    DECLARE  @sql VARCHAR(8000)
    
    SELECT @sql = 
         'ALTER DATABASE ' + DB_NAME() + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;
         
ALTER DATABASE ' + DB_NAME() + ' SET READ_COMMITTED_SNAPSHOT ON;
          ALTER DATABASE '
 + DB_NAME() + ' SET MULTI_USER; ' 
    EXEC(@sql)
  END
ELSE
  PRINT 'La versión de su SQL Server no soporta READ_COMMITTED_SNAPSHOT'
GO

¡Suerte en la batalla contra los bloqueos y los interbloqueos!

Estuve, subido a la nube con Windows Azure, en el CodeCamp de Tarragona

Este pasado fin de semana tuve el enorme placer de ser uno de los ponentes del CodeCamp, evento que mi empresa Plain Concepts patrocinaba siguiendo con su línea de continuo apoyo a la comunidad de desarrolladores en .Net. Tuve la oportunidad de exponer en dos sesiones una sobre la plataforma Windows Azure y otra, compartida con dos titanes del tema Luis Fraile y Bruno Capuano, sobre las novedades de VSTS 2010.

Sobre la sesión de Azure puedo decir que me sorprendió gratamente la asistencia que hubo, no esperaba tanto interés sobre el tema, la verdad, y sin embargo la sala se llenó. A continuación os dejo la PPT que use, no tiene mucho contenido, puesto que al ser el evento un CodeCamp traté de mostrar código, pero quizás veáis en ella información que os interese. Si tenéis algún feedback sobre la charla, no dudéis en dejarlo en los comentarios de este post.

En la charla sobre las novedades de VSTS 2010, que puedo decir, que disfruté como un enano compartiendo sesión con Bruno y Luis. La verdad es que da gusto ver como cuando hay comunidad de por medio, podemos dejar a parte la lógica competencia entre empresas y pasar un rato charlando sobre los temas que nos apasionan.

No puedo cerrar este post sin un agradecimiento explicito a la organización de evento. El esfuerzo realizado por los grupos de usuario implicados y por las personas que ha llevado adelante la organización a sido espectacular. Un diez señores, podéis sacar pecho de comunidad .Net. Además hay que destacar que en esta ocasión también Mono estuvo presente, más comunidad aun, incorporando otras plataformas. Jose Miguel Torres, Viçens Masanas, Toni Recio, Marc Rubiño (y seguro que algunos otros que me dejo), se han lucido con la organización. No es fácil montar un evento para trescientas personas y que no haya fricciones y todo vaya como la seda.

Decir, por último que la sesiones fueron grabadas, así que supongo que, tras maquetarlas un poco, en un tiempo estarán disponibles para que las podáis disfrutar aquellos que no pudisteis asistir al evento, ¡estad atentos!.