lunes, 14 de marzo de 2011

Una Solución pre-Scrumban (II) / A pre-Scrumban Solution (II)



Como mencioné en el anterior post, voy a hablar un poco más del método pre-SCRUMBAN que he utilizado en proyectos anteriores.

Una variación era la de tener solamente 1 o 2 miembros de equipo con tareas Must y Should. Es decir, tener sólo a máximo un par de miembros como responsables de solucionar las incidencias de producción y otros problemas durante un Sprint. Normalmente, en nuestro equipo teníamos para ello a un perfil de desarrollador y a otro de testeador. A estos perfiles les llamábamos "Production Incidents Champion". Con el nombre, resaltábamos que sólo se solucionaban problemas de producción; es decir, el tipo de problemas en los que el tiempo de respuesta no puede ser de un Sprint y pico. El tiempo que se podía pasar en estas incidencias, como expliqué en el anterior post, venía predefinido con el número de story points de desarrollo que poníamos como Should.

Algunas ventajas de hacerlo así eran:
  • Seguíamos con la filosofía SCRUM de tener equipos multidisciplinares, pues durante el Sprint al que le tocaba ser "Champion" debía solucionar las incidencias del producto, hablando con quien fuese necesario si no tenía los conocimientos suficientes.
  • No "quemábamos" al equipo. Según mi experiencia, a la gente no le gusta mucho el rol de "Production Incidents Champion". Algo bastante lógico, por otra parte: generalmente ¡significa pelearse con problemas de solución difícil y urgencia muy alta! Rotando la figura entre los miembros del equipo, la carga se hacía más llevadera.
  • Se distraía menos la dinámica de desarrollo del grupo en general. La mayoría continuaban trabajando en nuevos desarrollos "olvidándose" de los incidentes de producción durante los Sprints en los que no estaban nominados como "Production Incidents Champion".
Otro "refinamiento" del método consistía, después de varios Sprints utilizándolo, medir el tiempo real que se pasó resolviendo incidencias, hacer estadísticas y después ajustar con ellas el tiempo de soporte que se acordaba para un Sprint.

Idealmente, el tiempo medio debía ser menor al tiempo máximo que se había destinado = el número de story points marcados como Should. Se habían dado algunos casos de incidencias muy peliagudas, de difícil resolución, que se habían "comido" algunas horas de Must, pero en general el "Production Incidents Champion" realizaba todos sus Must (su Commitment), algunos Shoulds y resolvía alguna incidencia.

Finalmente, otra variación con la que jugamos era la de introducir Coulds. Las tareas Could eran una alternativa a "tomar las siguientes en el Product Backlog", por si algún miembro del equipo acababa su trabajo antes de la finalización del Sprint. No suponían una gran ventaja respecto al método tradicional, solamente que ya las estimábamos y asignábamos de antemano (planning poker).

jueves, 17 de febrero de 2011

Una Solución pre-Scrumban / A pre-Scrumban Solution



Hace unos meses, leyendo las aportaciones de la comunidad española que trabaja con prácticas ágiles, me topé por primera vez con el término “Scrumban”. A partir de allí me leí el estupendo paper de Kanban vs SCRUM, y me alegré al saber que compartía problemas con ellos y podía leer sobre sus soluciones.

En este post, voy a centrarme en un problema que me he encontrado en el pasado y en una solución que adopté, y en siguientes posts voy a estudiar cómo se relacionan con las tendencias Scrumban que mis compañeros de agilismo están explorando.

En proyectos en los que he implantado SCRUM, había una serie de problemas recurrentes. Uno de estos problemas era qué hacer cuando el equipo de desarrollo también realiza tareas de soporte. Muchas veces, el equipo de desarrollo no sólo tiene que desarrollar nuevas funcionalidades, sino también arreglar bugs y realizar soporte puro y duro. En compañías grandes, los equipos suelen estar diferenciados, pero cuando se trata de empresas pequeñas, los desarrolladores tienen que contestar el teléfono y “apagar fuegos”.

El problema con SCRUM es que no permite incluir tareas nuevas cuando un Sprint ha empezado. Esto no es una restricción caprichosa, pues tiene un buen fundamento: hay que acotar el nivel de cambio dentro de un equipo para poder entregar el paquete de software prometido a final del Sprint. Si estamos cambiando continuamente el alcance de un Sprint, los conceptos de velocidad y compromiso por parte del equipo a entregar lo acordado para ese Sprint, se pierden. ¡No vamos a comprometernos a entregar algo que no sabemos qué es!

Pero si el equipo de software también tiene que ofrecer soporte... ¿cómo podemos decirle a un cliente (usuario, manager…) que tiene que esperar a que el Sprint se acabe para solucionar el problema? Aunque el problema sea urgente, tendrá que esperar a que el Sprint acabe, se priorice la solución en la pila de producto (por el Product Owner) y finalmente, se entregue al final del Sprint siguiente (supongo que, como el problema era urgente, el Product Owner lo prioriza). En el mejor caso, si el problema sucede el último día de un Sprint, el tiempo de respuesta seria la duración del siguiente. Y en el peor, si sucede el primer día del Sprint, dos veces esta duración. E incluso podríamos calcular un tiempo medio de respuesta, haciendo estadísticas de cuando suceden los problemas durante un Sprint en nuestra compañía, calculando su distribución temporal y obtener un tiempo medio de finalización del Sprint en curso (al que sumaríamos después la duración del siguiente). Sea como sea, esto no funciona si el problema es realmente urgente y se debe solucionar.

En un pasado, yo utilicé un método “híbrido”: bajábamos la velocidad de equipo de forma artificial para dejar un buffer para “soporte”. Hay que recordar que en SCRUM, los equipos son multifuncionales y por lo tanto todos los miembros del equipo podían realizar soporte. Definíamos una serie de tareas del Product Backlog como “opcionales”, utilizando una versión reducida del Moscow Method:

- Tareas M “Must”: conformaban el Sprint, el compromiso del equipo.
- Tareas S “Should”: estas tareas se realizarían si no había tareas de soporte. En caso de que surgieran dichas tareas, las tareas “Should” podrían descartarse. No formaban, a priori, parte del compromiso del equipo con el cliente.

Este método no es perfecto, pues también limita la capacidad de soporte del equipo, pero dicha capacidad máxima de soporte era algo que se acordaba con los clientes/usuarios. Por ejemplo, “el equipo dedicará un máximo de 20% a soporte”. Entonces “Tareas Must” = Compromiso = Velocidad - 20%. Si no se realizaban tareas de soporte, el equipo debía realizar las tareas “Must” y “Should”. Las soluciones de bugs se ponían en producción cuando el Sprint finalizaba, con lo que el tiempo de respuesta se reducía.

lunes, 31 de enero de 2011

Miedo a la libertad / Fear of freedom



El otro día oí a una psicóloga explicar que la historia de la humanidad, desde un punto de vista sociológico, viene marcada por alternancias de movimientos que, respectivamente, reclaman más libertad del pueblo o “piden” más control. Después de épocas en las que florecen las libertades, el género humano parece decantarse por regímenes dictatoriales. La explicación ofrecida me llamó la atención: ante una libertad a la que no estamos acostumbrados, sentimos una necesidad de control, un alivio al dejar que se tomen las decisiones por nosotros. La responsabilidad asociada a nuestra libertad nos abruma.

Pensé en un problema que aparece a veces en los equipos en los que se introduce una metodología ágil. El equipo experimenta una sensación de más libertad y de más responsabilidad que en un típico grupo “jerárquico” donde el líder técnico o el gestor de proyecto te dicen qué hacer y cómo hacerlo en todo momento. Equipos auto-gestionados. ¿Todos contentos? Al contrario.

Muchas veces los miembros del equipo se asustan. No se sienten cómodos, no sólo con el cambio (¡el miedo al cambio podría y seguramente inspirará otra entrada!), sino también a la novedosa libertad. Escuchar a la psicóloga hablar del miedo a la libertad a nivel sociedad me hizo darme cuenta de que es un miedo fundado, racional, que no debe ser despreciado.

Cuando se trata de miedos muy arraigados en la consciencia de cada uno, pretender que con un par de frases en una presentación de equipo se van a solucionar es un gran error (error que, sin embargo, he visto muchas veces). “Vamos a ser todos ágiles – ¡veréis qué bien!”. No; hay que hacer un esfuerzo continuado, de seguimiento, de cada miembro del equipo. Ayudarles a que vayan tomando responsabilidades de forma progresiva. Cada persona es un mundo y uno de los problemas más habituales es obviar esto por falta de tiempo y tratar al equipo como un “todo” en la delicada materia de cambiar la forma de trabajar.

Una técnica que funciona bien es tener con cierta regularidad reuniones one-to-one con cada miembro del equipo. No vale ahorrárnoslas porque todo parece ir bien o por demasiado volumen de trabajo; y sobre todo en las primeras etapas del cambio. Si el SCRUM Master es el gestor del proyecto (o sea, el jefe inmediato), este caso es ideal, porque ya se suelen tener reuniones one-to-one. Además, tendrá la autoridad para tomar decisiones si llegan a ser necesarias.

Pero todos sabemos que el SCRUM Master no siempre es el gestor del proyecto, es más, muchas veces es aconsejable que no lo sea. En este caso, debería hacerse otra reunión de frecuencia variable con el SCRUM Master, porque en el típico one-to-one con el jefe el SCRUM Master quedará fuera. Una reunión para que el SCRUM Master pueda entender, persona a persona, sus miedos respecto al cambio, las situaciones particulares en las que se sintieron demasiado presionados, etc.

Finalmente, mencionar que otro problema importante con el que me he topado al introducir SCRUM es la presión del grupo. El típico ejemplo: ¡todo el mundo parece tan encantado de trabajar ágilmente! Algún miembro tiene sus reticencias, pero no se atreve a hacerlas públicas durante una reunión con todo el equipo por la famosísima presión del grupo o peer pressure: “No quiero que me tachen de waterfall”. Otro buen ejemplo de porqué las reuniones one-to-one son tan importantes es porque en estas conversaciones es cuando se desenmascaran los miedos de cada uno y se pueden solucionar los problemas.

jueves, 16 de septiembre de 2010

Agile para estudiantes / Agile for students


No hace mucho, el propietario de una empresa de software, alguien que no estudió ingeniería informática, me preguntó si yo lo había hecho. Cuando le contesté afirmativamente me preguntó qué era lo que se estudiaba en la facultad en el ámbito de la gestión de proyectos y la ingeniería de software. El contexto donde la pregunta fué formulada era inmejorable: un curso sobre SCRUM y metodologías de gestión Agile. No era yo la única que había estudiado la carrera, éramos en el curso una muestra representativa en cuanto a educación universitaria en informática se refiere. No es extraño que una discusión muy interesante siguiera.

La duda era cómo se podía incluir metodologías Agile en el plan de estudios de una facultad de informática. Y no tiene fácil respuesta.

El propietario de la empresa comentó que a finales de los años 80, los que como él ya trabajaban en el mundillo informático, viendo el desorden que había en los proyectos, creyeron que los estudios de ingeniería de software eran la solución. Se decía que uno de los objetivos de la carrera era la de formar a profesionales que dominasen metodologías ordenadas e “hiciesen las cosas bien”.

En efecto, a finales de los 80 y durante los 90 (yo me gradué en 1999) se estudiaba el modelo Waterfall en las asignaturas de ingeniería de software. No es extraño y refleja los estándares de la industria al respecto. Tampoco niego que es mejor el Waterfall a no utilizar ninguna metodología. Pero en el momento en el que nos encontramos, en el que las metodologías Agile están copando el mundo anglosajón y buena parte del europeo, quizás llegue el momento de revisar qué se está estudiando en nuestras universidades.

Durante mi época de estudiante, los profesores provenían predominantemente del ámbito académico. No se habían encontrado con los cambios de opinión del cliente, con las modificaciones a última hora o con tiránicas restricciones de tiempo y presupuesto.

Una alumna más joven que el resto y que había acabado la carrera recientemente, comentó que un profesor sí les había hablado de SCRUM y XP. Curiosamente, dicho profesor provenía del mundo corporativo y compaginaba las clases con labores menos académicas. Así que actualmente se estudian las metodologías Agile en la universidad, averiguamos los más veteranos. Nos quedamos satisfechos.

Pero luego una duda me asaltó. Vislumbré un potencial problema, arraigado en la forma en la que se enseña en las universidades. Mi preocupación es cómo al enseñar las nuevas metodologías a alumnos que aún no están en el mercado laboral y que no se han peleado con los problemas que Agile intenta solucionar, puedan ellos entender realmente los beneficios.

Pese a alegrarme al oír como el mundo de la enseñanza refleja como las empresas se adaptan a la realidad utilizando nuevas metodologías, ¿podrán los alumnos entender el porqué están proliferando estas metodologías? ¿su verdadero valor?

¿Cómo se puede hacer entender a un alumno lo que se va a encontrar en el mundo de la empresa? ¿No sería útil un modelo de prácticas más adecuado a la realidad? Los informáticos trabajamos, la mayoría de las veces, en proyectos. ¿No sería una buena idea que los profesores actuasen como clientes, cambiando los requerimientos, rechazando proyectos, etc.? De esta forma, en sucesivas asignaturas, los alumnos aprenderían a usar SCRUM y verían las ventajas que realmente aporta.

Curiosamente un alumno contó que uno de sus profesores (allá en los 80!) le rechazó una práctica y cuando él protestó, le contestó: “¿Acaso esperabas que la primera versión me gustase?”. A él se le quedó grabada la conversación por lo inusual. Y después, cuando se sumergió en el mundo laboral y se dió cuenta que era el pan nuestro de cada día, le dio a la actitud del profesor el reconocimiento que merecía.

Si no se hace así, me asusta pensar que los estudiantes verán SCRUM o XP como el modelo Waterfall. Una manera como otra de hacer las cosas. Le planteé mi duda a la chica que había estudiado XP en la facultad. Y ella me respondió que, precisamente, así lo había visto. Como una anécdota.