sábado, enero 31, 2015

El éxito del Agile Coach (Scrum Master)

Esta frase me pareció genial.

La  leí en el libro de Lyssa Adkins "Coaching Agile Teams: A Companion for ScrumMasters, Agile Coaches, and Project Managers in Transition" (super recomendado luego de haber avanzado un poco en biografía ágil)

"El éxito del Gerente de Proyecto (PMP) es cumplir el plan, para el Agile Coach es la mejora continua de su equipo y la búsqueda de su alto desempeño" @LyssaAdkins


martes, enero 27, 2015

Leído y Recomendado: Caso de estudio: Cómo hace Google sus planes de pruebas (y los hace en menos de 10 minutos)


Este es el link: http://www.javiergarzas.com/2012/12/google-pruebas.html


Saludos ágiles

Jorge Abad

[Scrum] Antipatrones del Daily Meeting / Reunión diaria / Scrum Diario y Posibles Soluciones

Faltaba yo...

Me he encontrado esta semana muchos post de antipatrones en los dailys (*)  (unos de Javier Garzas a quien sigo frecuentemente en su blog y otros de otras fuentes), y bueno la verdad falto yo, pues a mi he identificado otros mas a añadir a la lista - según mi experiencia - :


Los antipatrones encontrados y los propios son los siguentes:



Fuentes Antipatrón Posible(s) Solución(es)
(1)(2)(3) Reuniones de informar al líder o al jefe
  • Intervención del scrum master explicando que el daily es para el equipo y sincronizar al equipo, no para el scrum master, líder, product owner o cualquier otro rol dominante.
  • Poner al líder detrás del equipo (Por lo general el daily se hace al frente del tablero kanban y todos mirando el tablero )
(1)(2)(3) Se llega tarde
  • Acordar con el equipo una multa en dinero para quien llega tarde (ojo, solo si el equipo todo esta de acuerdo), y enfatizar que el objetivo no es conseguir plata para desayunos o invitaciones en la tarde sino para promover la asistencia puntual con este "leve castigo"
  • Retroalimentar en la retrospectiva y a lo largo del sprint a quien sea reincidente, haciendo énfasis en lo necesario y útil que es este momento para el equipo
(1)(2) No lo puedo recordar
  • El Scrum Master invita a los participantes a preparar la conversación del daily minutos antes.
(1)(3) Ponerse a contar la historia de tu vida
  • El Scrum master, prepara al equipo antes del daily diciendo que hará una señal para que cualquiera que se esté extendiendo comprenda que debe cortar rápido.
(1)(2)(3) Resolver problemas
  • El Scrum Master interrumpe respetuosamente al equipo y les dice que luego del daily se resuelven estos aspectos
(1)(2) Se van de tiempo
  • El Scrum Master interrumpe respetuosamente la sesión, corta a los 15 minútos . Luego en un espacio y tiempo aparte revisa con el equipo que sucedió para que este tiempo no se cumpliera (igual se puede revisar en la retrospectiva)
  • Una posible opción es que tienes en tu equipo más de 9 team members, que es lo máximo que tiene un equipo scrum.
(1) Reunión caótica
  • El Scrum Master entrega un token y solo tiene la palabra quien lo posee
(1) La gente se corta y no habla o habla poco
  • Coach del Scrum Master con esta persona
(2) Hacerla unos días y otros no
  • Responsabilidad del Scrum Master
(2) Estar distraído
  • Una opción: Un simple llamado de atención del Scrum Master corrige esto. 
  • Luego indagar por que se esta distraid@ en el daily, pueden haber razones para mejorarlo o corregirlo
PropiaContestar las tres preguntas abstractamente, ejemplo, señalando el tablero:

  • ayer hice esto
  • hoy esto
  • y no tengo impedimientos
o 
  • Ayer hice la parte 1 de la historia 2
  • y hoy continúo con la parte 3
  • y no tengo impedimientos



  • Inivitar a que se digan los nombres de las funcionalidades, para lograr la atención de todos los del equipo.
Propia Los dailys cada día a diferente hora para el mismo equipo, de manera que puedan asistir todos o alguien en especial
  • Esto se vuelve una locura, y uno termina no sabiendo que día de la semana es el daily. Recomentación: EL DAILY SIEMPRE A LA MISMA HORA
Propia No empezar por que falta...


  • El daily es del equipo debe comenzar con los que estén del equipo, es un ritual a cumplir y es de los aspectos sicorígidos de scrum - recordemos que es un marco donde nos movemos con liberdad -. Se comienzan  con los que estén y aclaro "no es necesario que este el Scrum Master", si por alguna razón este falta en otro momento se enterará de los impedimentos y del avance del equipo - seguro en el tablero Kanban queda esto reflejado - 
(3) Baja Energía
  • El Scrum Master debe indagar esta situación y tomar acciónes. (ojalá no estén trasnochando)
Propia Daily avanzado el día.

Por lo general esto desconcentra a los equipos, parar para hacer un daily tipo 11am o 3pm.


  •  Tratar de hacer el daily comenzando el día de trabajo
(3) Impedimentos no son identificados.

Por lo general los team members no identifican que tienen un impedimento y no no cuentan

(3) Los impedimentos no son removidos
  • El equipo debe en este caso llamarle la atención al Scrum Master. Identificar causas en la retrospectiva.
(3) Los obstáculos solos son removidos en el daily
  • El Scrum Master debe informar tan pronto se remueva un impedimento al equipo para mejorar la agilidad y no esperara al daily
Propia Permitir que el product owner indague al equipo.
  • Recordar el daily es del equipo, ni el product owner, ni el scrum master tienen voz y voto en el. Después del daily estos pueden hablar con el equipo
(2) Se toman tareas sin respetar prioridades del backlog

Explico: como los team members comparten la respuesta a la pregunta ¿que voy a hacer hoy? es probable que elijan algo que no esta en la prioridad.

  • El Scrum Master o cualquier team member llamar la atención sobre esta situación e invitar a que se respete la priorización.

--

Nota: Si tienen más antipatrones no duden en compartirlos





Saludos ágiles

Jorge Abad





_______

Definiciones

(*) Daily (Reunión Diaria / Daily Meeting / Scrum Diario ): La reunión diaria propiedad del equipo de desarrollo - facilitada por el Scrum Master - que dura máximo 15 minutos y se hace de pie, donde cada miembro cuenta:
  • que hizo ayer
  • que se va a hacer hoy
  • y que impedimentos se tienen
____


Referencias

(1) Reuniones Diarias (Daily meetings): anti-patrones - Blog Javier Garzas -  Clic Aquí
(2) Tales from the Scrum: Anti-patterns de la reunión diaria - Blog Ángel "Java" Lopez -  Clic Aquí
(3) It's Not Just Standing Up: Patterns for Daily Standup Meetings -  Blog Martin Fowler - Clic Aquí (este post es de estudio)
(4) Stand-up Meeting Antipatterns - Clic Aquí

_

lunes, enero 26, 2015

Scrum Hit list - 10 good reasons for Scrum

Tomado de: http://www.agile42.com/en/blog/2009/06/16/Scrum-risks/



  1. There are many good reasons to work with Scrum. The 10 most important include: Competitiveness - In many markets, the competitive environment is changing faster and faster. Only companies that are flexible and agile have a fast enough time-to-market to stay competitive and create a competitive advantage for themselves.
  2. Develop what is needed - Scrum allows the incremental development of features. The customer receives the first working versions early and as well as seeing progress can, if necessary, add new ideas.
  3. Confidence through transparency - Transparency plays a critical role at various levels in Scrum and is one of the primary drivers which makes Scrum so efficient. Because of transparency all the stakeholders are informed where the project is at any given time. This helps in discovering weaknesses and it makes effective teamwork possible.
  4. Build quality in - Testing is an integral component of Scrum in every sprint. Only if the software is tested and documented is it ‚”ready‚”. Methods such as continuous integration are very applicable for increasing the quality of every object from the beginning.
  5. Recognize risks in time - systematic risk management - Regular releases establish the conditions in which to recognize problems in time and to react promptly. Long-term statements about time to completion and product delivery roadmaps are possible because of factors like the team velocity (a measure of how much a Team can do per Sprint).
  6. To have the costs under control - The duration of a project is usually fixed, but the effort and the complexity of the work is usually only roughly estimated. Scrum allows changes to feature specifications, in collaboration with the customer, creating transparency and allowing definitive cost accounting.
  7. Changes are welcome - The Scrum framework is not afraid of changes. On the contrary, changes can be shown to the Product Owner at any time and can be realized in the following sprint without generating conflict. That way the customer gets the product he or she desires.
  8. Efficient collaboration and customer satisfaction - Scrum involves regular communication between all the participants of the project. Communication, collaboration, respect and understanding what the customer requires or what the team develops is the basis for delivering successful projects.
  9. Scrum is perfect for system development as well - As opposed to the widely-held view, that Scrum is only good for small products, Scrum is very good for the development of complex systems and extended projects. The exact planning and practices such as the continuous integration of new functionalities provide visibility of progress, and ensure that there won’t be a big surprise at the end of the project. Many large systems are developed with the same agile principles behind Scrum.
  10. Last but not least - Scrum is fun - Not task selection necessarily, but collaborative working and decision-making as a team is an important part of Scrum. Software development is seen for what it is: A creative and multi-dimensional activity that only can work properly when everyone takes responsibility.

domingo, enero 25, 2015

Leído y Recomendado: “Vamos a automatizar pruebas”. ¿Qué significa esto? ¿Realmente por dónde deberíamos empezar a automatizar?

Tomado de: http://www.javiergarzas.com/2015/01/automatizacion-pruebas.html

Excelente post de la página de Javier Garzas

Lo copio, pues lo considero de colección

--------
Hoy en día muchas empresas software, por su negocio quieren ser ágiles. Quieren sacar productos más rápido al mercado y adelantarse a la competencia, mejorando para ello la calidad de su proceso, producto y equipos software.
Una de las claves para agilizar ese proceso, detectar errores antes, en puntos del desarrollo en los que nos cueste menos solucionarlos y así desarrollar con más seguridad, es la optimización y automatización de ciertos procesos y pruebas (muy relacionado con Integración Continua).
Sé que no es un cambio sencillo y que automatizar pruebas tiene un coste (lo vivo en el día a día, ya que Integración Continua, testing ágil, automatización de pruebas, son campos en los que trabajo en dentro 233 Grados de TI.).
No obstante, creo que con recursos limitados, sin automatizar ciertas pruebas es complicado llegar al testing ágil.
Dentro de este día a día, me da cada vez más la impresión, de que al igual que ocurre con la calidad de software en general, en ciertas ocasiones no se tiene muy claro qué implica la automatización de pruebas. Ni qué implica el testing ágil.
De ahí que escuche cosas como:
– “Para el mes que viene estará todo automatizado, ¿no?”
– ¡Ah, genial! Si automatizamos las pruebas…¡Nos ahorraremos a los testers manuales!
– ¡Sí, automaticemos pruebas! Tú enséñanos a automatizar pruebas con eso de Selenium, que le das al botoncito, tocas cuatro cosas y vas grabando lo que haces.
Pero la automatización de pruebas implica más que eso. Ahora verás por qué.

¿Automatizaremos todo? ¡Así nos ahorraremos el testing manual! ¿No?

Como comenté en ¿Cómo enfoco el testing de forma ágil?, el objetivo de la automatización de pruebas no es eliminar por completo el testing manual, ni suplantar a los testers manuales.
Lo que automatizamos son chequeos, comprobaciones que los testers manuales previamente han detectado antes: ciertas pruebas de regresión, smoke test etc.
En este enfoque de testing, durante la evolución de un sistema, un caso de prueba comienza siendo manual, para luego ser automatizado.
Así los testers manuales pueden dedicarse a buscar otros bugs más complejos o testear nuevas funcionalidades.
Incluso puede haber ocasiones en las que automatizar alguna prueba o generar las condiciones necesarias para ello sea tan costoso, que sea más rentable mantenerla manual.

¿Y por dónde empezamos a automatizar?

Por otra parte, la calidad del software tiene muchos ámbitos (Calidad del software es mucho más que el testing).
Y dentro de lo que es el testing, existen distintos tipos de pruebas, cada una orientada a detectar y prevenir ciertos tipos de errores en el software.
Probablemente lo que primero suele venirnos a la cabeza cuando oímos hablar de automatización de pruebas son automaciones de “record & play”, por ejemplo con herramientas tipo Selenium IDE, que te permiten simular y grabar tus interacciones con la interfaz de la plataforma, con el navegador web etc.
Depende de qué plataforma, a primera vista pueden resultar las más sencillas de automatizar.
Es cierto que son automatizaciones necesarias, pero no son las que más retorno de inversión aportan, ni las que deberían automatizarse en mayor cantidad.
Principalmente, porque la interfaz de usuario es la parte más propensa a cambios de toda la aplicación, y para automatizar pruebas y tener fiabilidad sobre lo que estamos ejecutando necesitamos cierta estabilidad: un cambio en la interfaz podría hacer fallar la prueba automática, y en ese caso, tendríamos que readaptarla para que volviera a funcionar.
Por eso este tipo de pruebas suelen tener un coste de mantenimiento mayor que el resto.
Sí que tenemos que automatizar las pruebas de interfaz, pero mi consejo es que lo hagas después de haber automatizado otras partes más estables de la aplicación, el núcleo en sí, que aporta más retorno de inversión.
Por ejemplo, un buen primer paso es automatizar los test de API (funciones, elementos que ofrecemos desde nuestro software para que otro software, u otras partes del nuestro, puedan interactuar con él).
Hay varios niveles a la hora de automatizar pruebas. El secreto está en automatizar en el grado adecuado y en los niveles adecuados para nuestra aplicación.

Pirámide de Cohn.

La pirámide de pruebas de Mike Cohn, descrita en su libro Succeeding with Agile, ha sido un referente en este campo durante mucho tiempo.
idealautomatedtestingpyramid
En ella Cohn establece que hay varios niveles de pruebas, y señala el grado en el que deberíamos automatizarlas. Lo ideal sería:
– Muchos tests unitarios automáticos, porque un primer punto primordial para detectar fallos es a nivel de desarrollador. Si una funcionalidad en este punto falla, podrían fallar pruebas de los siguientes niveles: integración, API etc.
– Bastantes tests a nivel de API, integración de componentes, servicios, que son los más estables y candidatos a automatizar.
– Menos tests de interfaz gráfica automatizados. Ya que estos tests son variables, lentos en su ejecución y con muchas dependencias con otros componentes.
Aún así, en este punto, no suelo utilizar esas herramientas de record & play para automatizar pruebas de interfaz de usuario, ya que el código autogenerado por algunas de ellas no es muy mantenible (existen alternativas como Selenium WebDriver, que hace lo mismo pero programando tu el código).
– Un nivel estable de pruebas automáticas, que vayan detectando los testers manuales y se vayan automatizando paulatinamente, para que llegue un momento en el que invirtiendo los mismos recursos logremos cada vez una cobertura mayor de pruebas.

Mala estrategia de automatización: el patrón del “cono de helado”

En la automatización de pruebas hay que tener cuidado, ya que en ciertas ocasiones se tiende a perder el foco y a invertir en automatización en el nivel y grado no adecuado.
Una mala estrategia en estos casos, es lo que llamamos el patrón “del cono de helado”.
softwaretestingicecreamconeantipattern
Como ves es lo contrario a la pirámide de Cohn: centramos el foco en muchas pruebas manuales y en automatizar pruebas de interfaz de usuario, y nada de pruebas unitarias. Con todos los problemas que acarrea no detectar errores en los otros niveles y dejarlo todo para la parte más visible de la aplicación.
Además ten en cuenta, que una buena estrategia de automatización de pruebas conlleva más cosas que solo automatizar las pruebas en sí: crear un buen framework de automatización, parametrizar los tests, las ejecuciones para los distintos entornos, lanzar los test con distintos datos de prueba y gestionar dichos datos, sistemas de logs, buenos reportes con información que sirvan para obtener conclusiones, montar una buena infraestructura contra la que lanzar esos tests, paralelizarlos etc.

miércoles, enero 21, 2015

[scrum] Tareas de un Product Owner

Por definición tenemos que las principales tareas de un Product Owner en un proyecto ágil son:

  • Mantener el Product Backlog refinado y priorizado
  • Velar por el Retorno de la Inversión, logrando que salgan a producción lo más pronto posible las funcionalidades que más retorno le generan al negocio.
Pero miremos al detalle en que trabaja un Product Owner durante un sprint y un proyecto ágil.


Antes de Iniciar el proyecto:
  • Construir con todo el equipo Scrum la Definition of Done
  • Construir un product backlog priorizado y refinado
  • Tener un release plan del producto
  • Construir el presupuesto del proyecto
  • Participar activamente en el Sprint Cero
  • Construir artefactos que sirvan para direccionar y definir el producto, tales como:
    • Impact Map
    • Product Vision Board
    • Product Backlog Board
    • User Story Map
  • Comunicar al equipo la visión del producto, propósito y releases a realizar

Para el Planning

Para la ejecución del Sprint
  • Resolver los impedimientos asignados por el Scrum Master y el Equipo.
  • Resolver dudas durante la construcción del Sprint
  • Realizar reuniones de refinamiento presentando al equipo lo que vendrá para el siguiente sprint
Para el Review
  • Asistir a los review 
  • Aceptar o rechazar las historias de usuario construidas según los criterios de aceptación y Defnition of Done.
  • Presentar los resultados incrementales a los Stakeholders
  • Velar por que se cumpla la Definition of Done
Para la Retrospectiva
  • Participar activamente en las retrospectivas
  • Dar y recibir feedback sobre las mejoras requeridas para cada vez ser un mejor equipo y construir un mejor producto.
En General:
  • Lograr que se obtenga lo antes posible el MVP (Minimo producto viable)
  • (acorde con la anterior) Velar por que se construya primero lo que más retorno le proporcione al proyecto
  • Levantar y especificar historias de usuario con los Stakeholders de forma que se tengan al menos 3 sprints adelantados claros y refinados
  • Mantener actualizado el Release Plan
  • Realizar seguimiento del producto con el Release Burn Up y otras gráficas de seguimiento del producto
  • Vigilar e informar la ejecución presupuestal del proyecto y producto
  • Tener claro, "lo que no se va a construir"

Saludos Ágiles


Jorge Abad

domingo, enero 18, 2015

[scrum] Un buen Team Member

Existen muchos post sobre Product Owner  y el Scrum Master, y es bueno reflexionar sobre ellos pues son roles que estamos comprendiendo y haciendo parte de nuestra cultura TI que tanto tiempo ha estado  RUP-pizada o Waterfall-izada.

Pero sobre los Team Member en scrum, solo sabemos dos elementos claves, el equipo debe ser:
  • multidisciplinario
  • autoorganizado o autogestionado
De igual forma sabemos que los valores del Equipo Scrum ( Team Developer, Scrum Master, Product Owner (1) ) son:
  • Enfoque
  • Coraje
  • Apertura
  • Compromiso
  • Respeto (ver más valores en este post anterior sobre valores ágiles (2)  )
Yo he notado que en la medida que el equipo comienza a tomar vida (pues no es un acto mágico que se convierta en autoorganizado) comienzan a emerger reglas éxplicitas e implícitas sobre los team members que son quienes perciben el latir y son el propósito de scrum (darles el entorno para que ellos produzcan el mejor producto)

Entre esas reglas, he observado varias:
  • En el Planning
    • Hacer preguntas para entender lo que se va a construir
    • No permitir que el equipo se comprometa con cosas que no conoce
    • Poner a disposición de todos mi experiencia para construir correctamente lo que se esta comprometiendo
    • Dar mi estimación responsable.
  • En la Ejecución del Sprint
    • Llegar puntual al daily
    • No dejar tirado a mi equipo con el compromiso (pues estuve en el Planning y junto con todos acepte el sprint backlog)
    • No tener tiempos de ocio "irresponsables*" cuando todo mi equipo esta trabajando por bajar puntos
    • Ayudar a mis compañeros
    • Escribir buen código
    • Realizar buenas pruebas
    • Construir el producto con la calidad inmersa (no postergar la calidad esperando que otros encuentren defectos)
    • Trabajar empleando la mayor cantidad de prácticas ágiles de desarrollo posibles (TDD, ATDD, Integración Continua, etc)
    • Si se identifica algún sobreesfuerzo oculto, levantar la mano y dar visiblidad al equipo y al Scrum Master
    • Preguntar dudas sobre el producto al Product Owner
    • Dar visibilidad y alerta sobre los Impedimentos al equipo y al Scrum Master
    • Dar feedback asertivo a compañeros que perdieron el "foco" y andan muy ocupados en no apoyar al equipo o haciendo nada.
    • Reconocer cuando se esta fallando y corregir camino
    • Ser honesto con el equipo y consigo mismo
    • Mostrar el coraje y foco durante el sprint.
    • Dar visibilidad de la deuda técnica
    • Trabajar por reducir al  máximo la deuda técnica
    • Mejorar las habilidades en el área de fortaleza técnica y trabajar con otros para aprender nuevas tecnologías de manera que se elimine en lo posible el riesgo de dependencias de compañeros de trabajo.
    • Continuar la autoformación técnica
    • Trabajar con coraje para lograr el DONE lo antes posible de cada funcionalidad comprometida
    • Trabajar en lo que está priorizado y no en lo que "me parece"
  • En el Review
    • Tener el review preparado 
    • Dar respuesta asertivas a lo que se requiera
    • Apoyar a que el equipo se luzca en la sesión
  • En la Retrrospectiva
    • Dar y recibir retroalimentación
    • Usar comunicación asertiva con todos los miembros del equipo
    • Reconocer cuando se falla
    • Aportar evidencias para la retrospectiva
    • Decir todo aquello que sienta que debe ser compartido y aporta a la sesión (tanto del punto de vista técnico como humano)
    • Ser honesto con el equipo y con sigo mismo.



Nota:
Este post seguirá en construcción pues este aprendizaje no termina.

---
* Ocio irresponsable (vale la pena aclararlo): no me refiero a los tintos o momentos de pausa que requerimos para seguir avanzando, me refiero - y creo que todos entendemos - a laaaargas y descaradas sesiones en cualquier cosa que no sea una pausa sincera.


Referencias