Además de otras actividades, dirijo a algunos equipos de desarrollo. Por eso, la gobernabilidad es un tema que me es muy querido. Es decir, ¿cómo saber si mis equipos están mejorando?. Y ya que creemos en el modelo ágil, como saber si mis equipos están siendo ágiles.

Una crítica habitual - y pertinente de alguna manera - que se hace a XP y Scrum es la falta de un sistema de gobierno. Es decir, como definir un mecanismo para dirigir a los equipos a trabajar con desarrollo ágil. Hablo sólo de XP y Scrum, porque yo no sé si las otras metodologías ágiles tienen mecanismos de gobierno.

La idea de este post es mostrar un ejemplo de sistema de gobierno ágil. Este ejemplo se centra sólo en los aspectos prácticos, sin entrar directamente en el aspecto filosófico, psicológico y sociológico del manifiesto y del movimiento.

 Ya utilizamos la mayor parte de las ideas que voy a explicar aquí en Fortes. Algunas están en el inicio.

Política de cargos, salarios y beneficios

Establecer una política agresiva (por encima de la media del mercado) de cargos, salarios y beneficios. En esa política, no olvidemos considerar las características no técnicas, como la capacidad para trabajar en equipo. Sé que ese es un tema difícil, que a menudo requiere de un trabajo a largo plazo, pero tener las mejores personas invariablemente termina en tener los mejores salarios.

  • value individuals
  • value interactions

Ademas podemos ver los cimientos de un buen clima laboral, el problema humano del software,  para mas detalle..

Selección de profesionales

Establece un buen proceso de reclutamiento y selección de profesionales. Realiza varias entrevistas, observa los aspectos personales, técnicos e interpersonales, aplica pruebas y dinámicas. Selecciona los mejores profesionales. Un consejo: si todavía no tenes una política agresiva de salarios, recorda a los profesionales sin experiencia y aprendices, observando las características personales (el deseo de aprender, ser autodidacta, iniciativa, buenas calificaciones en los temas de nuestro interés, etc.) e interpersonales (negociación comunicación, solidaridad, etc) ..

  • value individuals
  • value interactions

Ademas podemos ver el problema humano del software e introducción de novatos en proyectos grandes,  para mas detalle..

Capacitación

Establece una política de formación. Esto puede hacerse de varias maneras: estimulando los grupos de estudio, coding-dojos, capacitación formal, la lectura de libros, etc. Aquí, en Fortes tenemos un evento anual de integración. Este evento también sirve para recordar lo que hicimos durante el año. Uno de los temas siempre es "capacitación realizada". Si no se desea realizar este evento, puedes preparar un simple informe conteniendo el mismo tema. O incluso una actividad en su agenda anual: "¿Qué capacitaciones hicimos?" Nota: En la política de formación, recuerde incluir temas de habilidades interpersonales.

  • value individuals
  • value interactions

Podemos ver para mas detalle un gran lugar para trabajar

Reducción de documentación

Establece las siguientes actividades mensuales:

  • Comproba la documentación legada que puede ser descartada;
  • Verificar la documentación que puede ser descartada del proceso;
  • Verificar la documentación que se puede simplificar (desformalizar) en el proceso.

Documentación en exceso desalienta las relaciones y supervaloriza los procesos.

  • value interactions
  • over processes
  • Simplicity–the art of maximizing the amount of work not done–is essential.

Puede ser interesante leer la trampa de los requerimeintos.

Contratos

Establece contratos en los que el cliente se obliga a participar de las reuniones, al menos, de planificación y de entrega. Introducí las condiciones de cambios en los requisitos. Conserva ese modelo muy simple, como normalmente las metologias ágiles predican, un simple reordenamiento de las historias. Establece incluso la siguiente actividad mensual: preguntar al cliente lo que debemos mejorar.

  • value customer collaboration
  • value responding to change
  • Welcome changing requirements, even late in  development. Agile processes harness change for the customer’s competitive advantage.

Podemos ver también contratos para proyectos ágiles para mas detalle.

Construyendo equipos

Monta equipos multifuncionales. En el template del plan del proyecto, en la sección del equipo, pone el siguiente comentario: "[montar equipo multifuncional, incluyendo analistas de negocio]. Recuerda también colocar a todos los miembros juntos, en la misma habitación. Esta proximidad facilita la comunicación.

  • value interactions
  • Business people and developers must work together daily throughout the project.
  • The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.

Podemos ver como motivar un equipo para trabajar con ágil.

Informe mensual

Hace que cada equipo prepare un informe mensual con la siguiente información:

cantidad de versiones disponibilizadas

Cantidad de versiones disponibilizadas para el cliente. También podes diferenciar los releases de experimentación de los releases de producción.

  • Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
  • Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.

Satisfacción de los empleados

Coloca la nota de satisfacción de cada empleado de manera anónima y toma un promedio. Si hay una caída en ese valor, investiga para encontrar el problema y presentar una solución.

  • Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
  • Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

Satisfacción del cliente

Así como con los empleados, hace seguimiento de la satisfacción del cliente.

  • Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

Progreso del proyecto

Medí el progreso del proyecto. Una tabla simple con las columnas historia, tamaño y el indicador de finalización es suficiente. Véase el siguiente ejemplo:

historia    tam  concl

historia 1   15   si
historia 2    8   si
historia 3   10   no
...
historia N   12   no

percentaje de finalización del proyecto: 23%

  • Working software is the primary measure of progress.

Relación entre el tiempo invertido en el desarrollo, correcciones y otras actividades

Lo ideal sería que los equipos deben trabajar solo en el desarrollo de nuevas funcionalidades. Pero también tenemos que trabajar en la corrección de defectos y otras actividades como soporte. Por lo tanto, realiza el seguimiento del tiempo empleado por los equipos en estas actividades extras. Véase el siguiente ejemplo:

desarrollo                65%

correcciones            15%

otras actividades     20%

  • Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

Calidad del código

Información tal como:

  • Cobertura de código de las pruebas unitarias;
  • Código duplicado;
  • Clases muy largas;
  • Métodos largos y complejos.

En este caso, la manera es utilizar herramientas más sofisticadas. Echa un vistazo a estos enlaces:

Estas herramientas deben ser, idealmente, disparadas por el servidor de build, generando informes de métricas de forma automática.

  • Continuous attention to technical excellence and good design enhances agility.
  • Simplicity–the art of maximizing the amount of work not done–is essential.

Acciones de mejora

Lista de acciones de mejora. Es una forma de saber si el equipo está mejorando continuamente. Si pensas que ese modelo es demasiado burocrático, simplemente podes pedir que te informen la cantidad de retrospectivas realizadas.

  • At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

En relación a la medición de la mejora, podemos ver examinando la aceleración ágil, aceleración: una medida ágil de productividad y midiendo la productividad en $$$.

Metas/Objetivos

Establece objetivos claros - y deja que los equipos escojan sus procesos y herramientas. Puedes establecer estos objetivos para los indicadores numéricos del informe mensual que acabo de citar. Dependiendo de la antigüedad del equipo, esta libertad puede no ser tan beneficiosa. En este caso, establece un estándar de referencia (eso es una redundancia?) de procesos y herramientas y administra la rigidez con la que  llevas al equipo a utilizarlo. La falta de objetivos claros amplifica la necesidad de un mayor comando y control, sobrevaluando los procesos.

Además de estos objetivos numéricos, también pedí a cada equipo un informe de la iteración, identificando las historias planeadas y concluidas, siguiendo  así el nivel de eficiencia de la planificación. Esta es una forma indirecta de establecer objetivos.

  • The best architectures, requirements, and designs emerge from self-organizing teams.

Las ideas de arriba ya garantian un buen nivel de gobierno. Aunque algunas acciones pueden reforzar más el trabajo:

Informes para el directorio

Aquí en Fortes, condensamos todos los datos numéricos en el informe mensual de todos los equipos, y calculamos indicadores generales del sector de desarrollo. Reportamos estos valores para los demás directores de la empresa.

Seguimiento de las prácticas

En el informe mensual, se puede establecer un checklist para supervisar el progreso de las prácticas. Por ejemplo,

[ ] ambiente informativo

[ ] build de diez minutos

[ ] TDD

[ ] integración Continua

[ ] programación en parejas/ inspección / revisión

[ ] código colectivo

[ ] reuniones diarias

En la integración continua, se puede solicitar además la cantidad de integraciones realizadas.

Equipo de QA

Establece un equipo de QA (control de calidad) para hacer incursiones en los equipos para ver si la información reportada coincide con la realidad.

Sería bueno leer los patrones de calidad para poder estar mas cerca de lo que se puede mejorar en pos de la calidad del software.

Particularmente creo que al estar en el camino de las metodologías ágiles, los equipos están mejorando de por sí. Aunque veo bien probarlo cualitativamente. Sería muy bueno que cada acción que emprendamos tenga una cadena de hipótesis de mejora y luego poder hacer el seguimiento de las mismas para probarlas estadísticamente.
Entonces cada indicador puede tener una meta anual establecida, aunque al principio se deba poner un número "que nos parece bien" luego tendremos que modificarlos de acuerdo a las tendencias.

También debemos entender porque buscamos el seguimiento, es mucho mejor tener claro lo que queremos hacer, antes que buscar información que luego no usaremos con el consiguiente gasto.
 

Basado en governança ágil

Inspiración.

"Si tú tienes una manzana y yo tengo una manzana e intercambiamos las manzanas, entonces tanto tú como yo seguiremos teniendo una manzana cada uno. Pero si tú tienes una idea y yo tengo una idea, e intercambiamos las ideas, entonces ambos tendremos dos ideas"

Bernard Shaw