miércoles, 27 de mayo de 2009

Curso Introducción al Testing

Luego de la experiencia del curso de Automatización de Testing nos pareció (a Lucas y a mí) que se había hecho muy largo (50hs). Es difícil mantener la dedicación durante más de 3 meses, aunque sea un día a la semana. Y el horario (18:30 a 22:00) es muy cansador.

Decidimos hacer otra versión del curso más focalizado, de manera que se pueda hacer en 24hs. No tiene fecha confirmada, pero propusimos hacerlo en agosto y septiembre.

Por mi lado, me pregunté si parte del material que dejamos afuera podría ser incluido en un curso más introductorio. Cuando me puse a pensar, me pareció que la Automatización de la prueba es una consecuencia importante de las necesidades del testing en ambiente ágil, pero que hay otros temas de testing que no tienen mucha relación con el testing automatizado: el testing exploratorio.

También me interesa hacer un experimento: ¿es mejor para la gente dedicar dos días, un formato más compacto, y con horas laborales? El tiempo dirá :)

En resumen, a los que les interese y puedan dedicarle dos días, nos vemos el 10 y 11 de junio en SADIO, para hablar sobre el Testing!

Podés ver los resultados y el material.

jueves, 21 de mayo de 2009

CMMI y Ágil - ¿Choque de civilizaciones?

Fui invitado por Liveware para un evento sobre CMMI y métodos ágiles (parte 1, parte 2). Después de consultar con la comunidad sobre opiniones, di varias vueltas para elegir un tema y buscar un balance entre algo picante que haga interesante el panel y mi natural postura ecléctica. Decidí hablar sobre una diferencia cultural que percibo entre los viene del campo CMMI y los que vienen de Desarrollo Ágil.
Posteo la versión larga, tuve que reducirla para que entre en 10 min.

Una comparación superficial entre empresas CMMI y Ágiles muestra grandes diferencias. Pero en ambos casos los espacio de posibles implementaciones son amplios, con intersección, y hay implementaciones que son tanto CMMI como Ágiles, como lo demuestran casos de empresas como las que estuvieron representadas en el panel.

Podemos encontrar bases comunes, como las ideas de Deming, y en el foco en la mejora continua.

Tuve la suerte de escuchar a Watt Humphrey en Santiago de Chile (SEPGLA 2007), en su presentación comentó "La clave para manejar trabajadores del conocimiento es: los trabajadores deben manejarse a sí mismos." … Lo podría haber dicho un gurú Ágil.

En el libro de Boehm “Balancing Agility and Discipline”, Boehm comenta una comunicación personal de W. H. diciendo que un equipo XP cumple con el TSP con “sólo agregar algunas métricas”. “sólo agregar algunas métricas”… después vuelvo sobre esto. Alan Cyment comentó alguna vez que lo que define a Scrum es la mejora continua, todo el resto es modificable.

Podría seguir con similitudes y puntos de contacto… pero hablemos de las diferencias.

Antes de seguir, un disclaimer. Se puede hablar de “qué es CMMI”, está el SEI para decirlo. Es más difícil con Desarrollo Ágil, no hay una fuente oficial.

Al recibir la invitación para el panel, decidí hacer un experimento, pregunté en una lista Latinoamericana que pensaban de la interacción de CMMI y Ágil. Recibí algunas respuestas negativas, pero la mayoría de los que tuvieron experiencia real con ambas formas de trabajo, dicen que se pude implementar ideas ágiles con CMMI. Sin embargo no hubo ninguna respuesta que recomendara implementar CMMI para empresas ágiles.

Esto llama la atención. ¿Cómo es posible que un modelo hecho para que las empresas mejoren no sea recomendable?

Se entendería para barreras de entrada, como SOX. Nadie espera ser más eficiente por cumplir con SOX. Es un mal necesario si quiero entrar en cierto mercado.

CMMI tiene dos caras: ser una barrera de entrada (evaluación), y por otro lado un modelo de mejora. No voy a discutir la primera parte. Hablemos de la mejora, desde varios puntos de vista.

Observo que las empresas CMMI tienen algunas características que no se encuentran en empresas ágiles:

  • Mejora cuantificada: Existencia procesos y sus métricas como precondición a la mejora.
  • Mejora centralizada: un grupo de mejora o un consultor externo.
  • Foco en la repetibilidad y el cumplimiento de normas.

Mejora cuantificada: Los procesos en las metodologías ágiles

Un amigo empezó a trabajar en la planta de Toyota en Zárate desde el día uno. Me comentó que el layout inicial era ultra sencillo, lineal, sin paralelismos. El único objetivo: producir la primera camioneta, como sea. ¿Era eficiente? No. Pero a partir de ahí, se ponía en marcha la mejora continua. Con todo lo que sabía Toyota de fabricación, podrían haber hecho un mejor layout, no? NO. La planta es sólo un paso en la generación de valor, todo el ecosistema de autopartistas, canales de distribución, … es necesario para entregarle una camioneta al cliente, y ese ecosistema es único y cambiante. La forma óptima es que la planta local se amolde al ambiente existente y influya en el ambiente, en un proceso de continua adaptación y mejora.

Los procesos surgen como las reglas que cada equipo se impone. Son el resultado de un trabajo ordenado y de la mejora continua, no al revés.

Pero si yo mido existencia de procesos como forma de medir la madurez, promuevo que aparezcan procesos aunque no tengan valor para el equipo. Doy un ejemplo: si creemos que un cliente que va a un restaurante va a están más satisfecho si lo atienden personas que están contentas con lo que están haciendo, podría verme tentado a sugerir a los empleados que atiendan siempre con una sonrisa, pero si planteo esto como obligatorio, obtendré de los empleados una continua sonrisa vacía, que tiene un efecto contrario al esperado.

Mejora centralizada: El control y la confianza

La estructura de los programas es un reflejo de la estructura del grupo que lo hizo. No sé quien es el autor de la frase, pero creo que muchas veces es verdad. Si un equipo no está aglutinado, se tendrán un producto hecho por pedazos, cada uno de los pedazos más o menos integrado con el resto.

Creo que algo así pasa con las organizaciones. El SEI y el CMMI nacen de la relación de desconfianza institucionalizada que existe entre el DoD y sus proveedores. Esta estructura macro (dos partes involucradas, que desconfían entre si, usan un tercero “neutral”) se repite a nivel empresa (QA: valida que los procesos se cumplan) y equipo (Test: valida que lo que pidió el usuario se cumpla).

La falta de confianza está también reflejada en organizaciones fuertemente jerárquicas, en la que cada nivel “superior” comanda y controla al nivel “inferior”.

Foco en repetibilidad y cumplimiento: Cómo analizamos los problemas y cómo aprendemos

La forma CMMI de mejora tiene mucho en común con el método científico. Fijo las condiciones (proceso), planteo la hipótesis (cómo mejorar el proceso), hago el experimento, mido los resultados. ¿Es lo esperado? Si, mi hipótesis es la correcta. Paso a la próxima hipótesis. ¿Cuál es el problema?... ¿de dónde surgen las hipótesis? No es algo que el método científico resuelva.

¿Es la única forma de mejorar? ¿Cómo hacen los grupos de teatro?¿Los músicos? No parece que sepan mucho de control estadístico de procesos, por lo tanto debe haber otra cosa.

El desarrollo de software tiene un fuerte componente social. Si queremos resolver la dinámica de grupo con el método científico, me parece que no llegamos a nada.

Por otro lado, si queremos lograr aumentar la confiabilidad de un servicio, un análisis de modos de fallo, Ishikawa y otras técnicas de mejora de proceso probablemente nos ayuden mucho más que una retrospectiva en que tratemos de evaluar como nos sentimos (enojado, triste, contento) cuando se cayó el servicio y nos llamó el cliente para decir que no cumplíamos con el SLA.

Ahora la pregunta del millón, si quiero innovar, ¿me alcanza con el método científico?

Estas tensiones aparecen incluso dentro de la comunidad ágil.


¿Hay diferencias culturales?

No sé suficiente de CMMI como para asegurar que las diferencias observables en cultura son una consecuencia inevitable o, si por el contrario, es sólo un resabio indeseable de formas superadas de implementar el modelo.

Lo que si tenemos que tener en cuenta es que esa diferencia cultural suele estar presente y debemos considerarla. No sé si pueden convivir dos culturas tan diferentes en una organización. Me parece que lo más probable es que una de ellas prevalezca, absorbiendo o desplazando a la otra.

En cualquier caso creo que en el intercambio ambas culturas pueden salir enriquecidas.

lunes, 11 de mayo de 2009

Agile Open Córdoba - impresiones como facilitador


Participé en el Agile Open Córdoba 2009 hace unas semanas. Fue mi primera experiencia como facilitador (salvo la versiones reducidas de la facultad).
Como pasó en el de Buenos Aires, como organizadores nos genera cierta ansierdad la instancia previa, siendo un evento gratuito ¿Vendrán?, y por otro lado ¿Saldrá bien?
Y en ambos casos, el resultado fue muy bueno. Voy a postear desde distintos puntos de vista. En este post me centro en impresiones generales del evento.
Como moderador, traté de usar un estilo minimalista. Por suerte lo tenía a Alan Cyment, para validar las ideas o recibir consejos. Arranqué con una presentación general, no creo que haya durado 5 min, comentando en lineas generales la dinámica de evento, y la agenda a grandes rasgos (Viernes: Propuesta de Sesiones, Votación, Armado de Agenda; Sábado: Slot temporales, aulas disponibles, tiempos entre sesiones, cierre).
Las instrucciones y reglas las fui comentando JIT: justo antes que necesiten usarse. Por ejemplo, las 4 reglas de Open Space las comenté al final del viernes, y en la apertura del Sábado. No las comenté en la apertura.

Impresiones
Propuestas de sesiones: tuve que cortarlas!  El miedo como facilitador es que no se animen, pero en este caso, creo que tuvimos casi una propuesta por persona en promedio. Mentalmente contaba los segundos de silencio. Y cuando llegué al minuto (dos veces), pregunté si quedaban propuestas en el tintero, y siempre había. Las últimas eran sin embargo de relativamente poca utilidad, se superponían con otras ya presentadas.
Votación: la votación se concentró en las sesiones propuestas por gente conocida, y hubo mucha dispersión en el resto. No hubo suficiente fusión de sesiones similares, y las fusiones se hicieron sin consultar con el autor. En charlas con Alan Cyment (asistente a AO Córdoba y facilitador del Agile Open Buenos Aires), creemos que parte de esto fue debido a que no habia lugar para que mucha gente participara simultaneamente. Por lo tanto, si alguien preguntaba por el responsable de una sesión, era probable que no estuviera.
Armado de Agenda: El armado funcionó bien, salvo que se repitieron los problemas de unión de sesiones sin consultar a los autores. Extrañamente, quedaron algunos huecos. Esto fue porque habia relativamente pocas sesiones muy votadas, y muchas poco votadas. Parecía un desproposito asignar un slot para una sesión votada por tres personas.
Desarrollo: El desarrollo no tuvo problemas. Mi tarea principal fue de time-keeper, lo que fue más que sencillo. Hubo sesiones de 2 personas y otras de 30 o más. No vi en ningún caso sesiones explísitamente planteadas como presentaciones, aunque en varios casos había una persona que guiaba fuertemente la sesión en cuanto a contenido. Esto lo veo como un problema. Creo que parte de las quejas recurrentes de los novatos en agilidad se refieren a esto. El énfasis en repetir en las sesiones el formato open space (circulo) fomenta las discusiones democráticas, lo que no significa que sea la mejor o única forma de enseñar/aprender.
Cierre: el cierre, más parecido a una retrospectiva que a un cierre Open Space, me pareció más productivo que el que tuvimos en Bs As. La gente habló, y se plantearon pasos a seguir.

Nos vemos en Tandil!

Resultados de Agile Open Córdoba
Fotos de  Pablo RF
Blog de Matías Iacono    blog / ¿Por qué Agile?
Blog de Fabio Grigorjev  blog
IES21: nota (en la foto Pablo Rodríguez Facal, Matías Iacono, Juan Gabardini, Fabio Grigoriev, Claudio Ochoa, Alan Cyment)
Diario Comercio y Justicia: nota

domingo, 10 de mayo de 2009

Aprendiendo Lean Manufacturing con un juego

En la materia Adm. y Control de Proyectos II vemos el modelo de organización por procesos y también técnicas de desarrollo ágil, como Scrum y Lean Software Development.

Estamos siempre buscando mejores maneras de aprender estos temas.
Este cuatrimestre decidimos probar con Mr. Happy Face, uno de los juegos propuestos en Tasty Cupcakes. Es un lindo lugar para buscar ideas.
 
El resultado, como siempre que hacemos juegos, fue tener una clase muy entretenida, con todos los participantes prestando mucha atención. El resultado fue muy bueno, se pudieron comentar los principios Lean y algunos conceptos como JIT, Pull y Kanban desde la experiencia.

Ricardo Colusso se tomó el trabajo de filmar partes de las actividades. Gracias!

En la primera parte se trabaja con una linea de montaje "tradicional", tratando de predecir las ventas. En la segunda parte se usa pull, produciendo sólo lo vendido, y usando kanban para comunicar las necesidades de partes a lo largo de la linea.






lunes, 4 de mayo de 2009

Qué bueno es Chrome!… o no tanto?

Hace tiempo estoy usando Chrome como mi browser primario, desplazó a Firefox de mis preferencias. La rapidez con la que inicia, la limpieza de la UI y algunas funcionalidades (manejo de download, páginas más frecuentes, …) me convencieron.
Acepté limitaciones en cuanto a sitios que no lo soportan. Los más notorios:
  • Wetpaint: la edición de páginas tiene funcionalidad restringida.
  • Yahoo! Groups: la edición de mensajes Rich Text no funciona. Esto me costó encontrarlo, ya que la edición parecía andar bien, pero los mensajes enviados no incluían la parte editada. Luego de postear mails vacíos varias veces (una vergüenza), identifiqué el problema. La gente de soporte de Yahoo! me dio la solución, Chrome no está soportado :P
  • Página de la AFIP: un comportamiento extraño, parece funcionar, hasta que en algún momento muestra un mensaje de error diciendo que el sitio no está disponible, que intente más tarde. No intentes más tarde, no lo soporta.
Hasta acá, molesto pero esperable en un browser con poca penetración en el mercado.
La parte extraña sucedió cuando estaba trabajando con una Applet Java en una página web. El comportamiento era el siguiente:
  • Abro la página (sólo tiene el Applet)
  • El primer campo tiene foco
  • Cambio a otra ventana (Alt-Tab)
  • Vuelvo a la ventana del browser (Alt-Tab)
  • Ninguno de los campos del Applet tiene foco
  • (workaround) Click en uno de los campos del Applet para que tenga foco.
Será un problema del browser? Pruebo con Firefox, mismo comportamiento. Horas y horas dedicadas a rastrear el problema y buscar soluciones.
Después, en un acto de desesperación o por mera casualidad (a esa altura mis funciones cerebrales estaban bastante disminuidas) probé la página con Internet Explorer 7, y voila, funciona bien!
Un costoso re-aprendizaje de que debo mantener los browsers mainstream en mi lista de prueba.
Y afortunadamente IE7 es una opción aceptable para mi cliente!

martes, 7 de abril de 2009

Videos de Ágiles 2008

Cierre (EN)

En el cierre de la conferencia Ágiles 2008 que se realizó en Buenos Aires debatieron sobre "El futuro de Agile" algunos de los invitados internacionales.

Part 1 - Short talks by Mary Poppendieck / Dave Nicolette / Tobias Mayer / Tom Poppendieck

Part 2 - Short talks by Tom Poppendieck / Micah Martin / Matt Gelbwaks / Q&A

Part 3 - Q&A

Part 4 - Q&A / Closing by Martín Salías

Part 5 - Closing by Martín Salías

The Lego Lean Game (just video) (Danilo Sato, Francisco Trindade)

Un video parcial de esta sesión interactiva en la que los participantes arman pequeñas lineas de producción, aprendiendo los conceptos de Lean.

Partial video / More info and presentation

Acceptance Testing With Fitnesse (EN) (Micah Martin)

FitNesse is a widely used open source tool for Automated Acceptance Testing. Learn how FitNesse can help you with your software project.

Part 1 / Part 2 / Part 3 / Part 4 / More info and presentation

Arquitectura Ágil (SP) (Martín Salías)

Esta sesión pretende plantear desde la experiencia práctica la posibilidad de aplicar principios sólidos de arquitectura de manera emergente durante todo el proyecto de desarrollo, manteniendo un alto margen de refactorización de los componentes y aplicando mecanismos de evaluación permanente de requerimientos no funcionales y estado de salud del código producido.

Part 1 / Part 2 / More info and presentation

ISO 9000 Ágil (SP) (Diego Gonzalez)

El objetivo de esta charla es la de presentar desafíos y experiencia en este marco, donde hay mucho trabajo por explorar y poca experiencia de campo. En este caso se usará la experiencia de Lagash como una PyME que certificó un proceso Agil mediante la implementación de un sistema de gestión de la calidad ISO.

Part 1 / Part 2 / Part 3 / More info and presentation

Distributed Agile (EN) (Matt Gelbwaks, Emilio Gutter)

We are firm believers that the best venue for doing more (and better), faster is through the agile values and practices. We also believe that not all projects can be sub-divided so as to be satisfactorily completed by collocated teams.

Distributed agile is harder than agile, so perhaps we need to look at a different model for the masses.

Part 1 / Part 2 / Part 3 / Part 4 / Part 5 / More info and presentation

jueves, 26 de marzo de 2009

Ingeniería o Artesanía v1


Hace tiempo que se trata de encontrar una analogía al desarrollo de software. Es un arte, una ciencia, un conjunto de técnicas,...
¿Por qué es esa discusión interesante?
Porque siendo el software una actividad relativamente joven, buscamos utilizar la experiencia existente en otras actividades, por ejemplo para copiar como enseñamos, como organizamos el trabajo y como lo evaluamos.
Diego Fontdevila, Pablo Rodríguez Facal, Vanesa Dell'Acqua y Juan Gabardini nos reunimos en una sesión de Agile Open Buenos Aires 2009 para hablar de estos temas, y estas son nuestras notas.

¿Por qué buscamos la analogía?
¿No podemos simplemente admitir que el software es distinto y analizarlo per se, sin buscar analogías?
Podemos, pero cuando se trabajan con nuevos conceptos, ni siquiera tenemos las palabras para describirlos, lo que hace difícil pensar y discutir sobre ello.
Por ejemplo, Philosophiae Naturalis Principia Mathematica de Newton no es el libro que usamos para aprender física o cálculo matemático. A lo largo de los años se ha mejorado el lenguaje y la forma de explicar los conceptos.
Si logramos una buena analogía, podemos usar el lenguaje y modelos mentales ya probados.

Micah y Bob Martin proponen la idea de artesanía (video en Ágiles 2008 y manifiesto).
Artesano u Operario
Creemos que la analogía se basa en la comparación de las personas que fabricaban artefactos complejos de manera artesanal, a fines del 1800 o principios del 1900. Podemos comparar a estas personas que fabricaban artesanalmente relojes o automóviles versus el operario en una linea de montaje tipo Taylor/Ford.
El resultado del trabajo del artesano es un artefacto de complejidad considerable pero se producía de forma artesanal debido a la falta de la tecnología que permitiera automatizar los procesos (y porque Ford y Taylor todavía no habían metido la cuchara, je).

Pero es útil comparar al desarrollo de software con la fabricación?
Que analogía usamos:
- producción (silla hecha a mano vs silla hecha en linea de producción)
- diseño (diseño de la silla
vs cuadro o escultura de la silla)
- ingeniería civil (diferencias entre el diseño del edificio y el obrero que lo construye - en nuestro entorno el compilador es el "obrero" mientras que cuando programamos estamos haciendo "diseño"). El problema de esta analogía es que en general cuando hablamos de ingeniería civil estamos tratando con un entorno medianamente estático (la estructura del terreno donde se construye un edificio se considera constante) mientras que en software, el entorno cambia permanentemente, cambian las reglas de negocios, las regulaciones y legislaciones, los usuarios, etc.

En muchos casos, parece que el desarrollo de software se parece más al diseño de productos que a la producción repetitiva de los mismos.

Acá tenemos una primera conclusión: si comparamos entre el artesano y el operario, ¡el desarrollador es artesano!
Esta definición no es poco, cuantas veces nos encontramos con formas de trabajo en las que el programador sólo implementa lo que definió el diseñador, que a su vez se basó en lo que dijo el analista.

Ingeniero o Artesano
Esta comparación es más difícil, y cada uno tiene en su cabeza definiciones distintas de Ingeniero y Artesano.

Artesanía: Consiste en la construcción o producción de un objeto complejo, pero el balance de entre resultados y costos es en general desfavorable ¿?
Ingeniería: Consiste en resolver problemas
complejos, siempre con un balance o compromiso entre los resultados y los costos.
Artesanía -> ¿Técnica? Algo hecho directamente por las manos
del hombre con herramientas.
Ingeniería -> ¿Tecnología? Algo hecho indirectamente por las manos del hombre con máquinas capaces de
repetir su trabajo.

¿Open Space es una tecnología o una técnica?
Orgullo de lo producido
Cabe a ambos, el artesano y el ingeniero, en función de su identificación con el producto de su trabajo.
Produce una de las condiciones fundamentales que es la satisfacción con el trabajo por el trabajo en sí. Puede ser conflictivo si implica que tome precedencia sobre la percepción de valor que tiene el usuario final o el cliente.
En ambos casos hay criterios estéticos y de elegancia, aunque no necesariamente compartidos con el usuario. Un ejemplo: para algunos las ecuaciones de Maxwell son elegantes y tienen la belleza de la simetría. Otro ejemplo, en las artes marciales, cuanto más se sabe, menos movimientos se requieren.
¿Están menos orgullosos los ingenieros que participaron en el diseño y construción del Alfa Romeo 8C Competizione que lo que estaría un artesano?
Entonces, ¿cuál es la diferencia?

Separación entre la creación y el producto final
Una posibilidad es que la diferencia esté en la distancia con lo "real", distancia semántica (usamos distintas palabras, distintos idiomas).
Un artesano conoce bien las herramientas, el material con el que trabaja, el producto que realiza. El ingeniero puede hablar el idioma científico para tomar novedades que pueda aplicar en forma novedosa. Puede tener una mayor capacidad para manejar distancia semántica. Pero eso conlleva el riesgo de alejarse del día a día.

El equipo y el especialista
¿Qué sabe cada uno? ¿Qué parte de lo que sabe se pone en juego en el trabajo conjunto? El equipo es un espacio común definido por un espacio físico (
Gemba, en japonés el "Lugar real" donde se produce valor) y un lenguaje común. Este lenguaje limita los conceptos que pueden manejarse (pensamos con las palabras que tenemos a nuestra disposición). Un ejemplo de lenguaje común es el que se desarrolla cuando los integrantes del equipo aprenden del negocio. Sin embargo, muchas cuestiones propias de los especialistas quedan fuera.
El problema aparece cuando ese lenguaje no es capaz de describir todo lo necesario (lógica, comportamiento, interfaces, etc.) En el futuro, es posible que se desarrollen lenguajes propios de cada dominio de problema, o que se formalice el lenguaje del equipo para soportar tanto el negocio como la lógica del software.

El compromiso es aprender, es decir expandir siempre los límites de nuestra ignorancia, alejando a cada paso el horizonte de lo que hay por aprender. ¿Cómo aprende el equipo? Como en Toyota, podrían seleccionarse responsables de aprender o desarrollar ciertos temas o capacidades (costos, calidad, seguridad, etc.) y cada cierto tiempo rotar esas responsabilidad. Este sistema funciona muy bien para temas que escapan a la especialidad de todos los miembros del equipo.

Y nuestra segunda conclusión: todos tenemos que conocer las herramientas, nunca alejarnos mucho del gemba, y quizás somos ingenieros si nos preocupamos en diseñar no sólo el producto, sino también mejorar o crear nuevas herramientas.

¡Da para más! ¿Cómo impacta en la educación? ... lo seguimos en el próximo Agile Open