¿Horas ideales o puntos abstractos?

Artículo ladrillaco por encargo, como los escritores de verdad :-D . Es técnico y está muy orientado a las metodologías Ágiles, pero creo que todo el que tenga que realizar estimaciones en un proyecto se puede beneficiar de muchas de las ideas que contiene. Allá vamos.

Me escribe uno de mis clientes-y-a-pesar-de-ello-amiguetes comentándome la dificultad que tiene para convencer a sus equipos de que estimen en “puntos abstractos”, una técnica Ágil empleada, entre otras cosas, para enfatizar que en un buen proceso de estimación el foco no está en la precisión, algo casi imposible de lograr en un entorno complejo como el del desarrollo de software, sino en tener una idea común de cómo de grande y compleja es cada historia y, a partir de esa idea, concentrarse en trabajar con la velocidad del equipo como métrica. De hecho, la velocidad es la métrica Ágil por excelencia, y en mi opinión es la medida última de madurez de un equipo de desarrollo: lo rápidamente que puede satisfacer las necesidades del cliente con un producto de calidad.

Vamos a empezar por lo básico. ¿Por qué inventar cosas raras cuando todo el mundo estima en horas-hombre o en días-hombre, algo intuitivo, lógico y que se basa en un patrón perfectamente conocido como la hora o el día? Bueno, es cierto que las horas son una medida muy bien definida cuando hablamos de lo que tarda una máquina en hacer mil tuercas, pero cuando empezamos a intentar definir lo que tarda una persona en hacer algo, la cosa se complica. Porque las personas no son como las tuercas: no vienen todas en la misma medida. Y si hablamos de campos como el software, en el que según Pilar Jericó contaba en su libro “Gestión del talento”, el mejor de su campo es 50 veces más productivo que la media, entonces lo de la hora empieza a desmoronarse.

Así pues, si un experto tarda ocho horas en hacer algo realmente sutil y complejo, el programador promedio tarda veinte horas y un Junior tarda treinta y cinco… ¿Cuál es la estimación que debemos dar a esa tarea?

La respuesta lógica sería que la estimación dependerá de la persona que vaya a realizar esa tarea. Pero eso nos obliga a definir desde el principio quién va a hacer cada tarea del proyecto hasta el día de su finalización, y a reajustar constantemente esa asignación conforme vaya apareciendo incertidumbre en el proyecto.

Demasiada e innecesaria gestión.

Por ello se deberían estima las tareas contra un “programador mítico promedio e ideal” y lo que este señor tarda en hacer cada cosa. De ahí libros legendarios como “The Mythical Man Month”, que debería leer todo el que esté en este negocio de crear software y, en mi opinión, todo el que gestione proyectos de cualquier tipo. Lo que pasa es que definir las capacidades de ese “programador promedio” no es sencillo: ¿Tarda lo mismo en una tarea de Java que una de .Net? ¿Sabe de bases de datos? ¿Hace el diseño? Y aunque resolvieramos todo esto, seguiríamos teniendo otros problemas.

Por ejemplo, los de medida de la productividad. Hay grandes gurús de esto que predican que no es posible medir la productividad de un programador. Yo no es que discrepe, pero añadiría “aunque se puede aproximar muchísimo, sobre todo si medimos al equipo en lugar de a la persona”. La tesis básica es la siguiente: si tú has programado ocho horas, y yo he programado ocho horas, ¿hemos programado lo mismo? O dicho de otra forma, ¿hemos producido la misma cantidad de funcionalidad?

Y en contra de la lógica que nos indica que no, lo que hace la industria del software es poner un “precio medio” por hora y dedicarse a contar todas las horas que meten los programadores ante sus teclados. Y claro, no me gusta encontrarme al final de la semana con que alguien mete menos de cuarenta horas. Que las reuniones de trabajo, los correos, la gestión del proyecto, la formación, el I+D, el team building, las retrospectivas, las entrevistas a candidatos, la redacción de informes y todo lo demás que no sea programar se supone que lo hacen los programadores en sus horas libres porque les gusta. Sonamos. En fin, prefiero no hablar de las herramientas de seguimiento horario, que luego dicen que soy un sobrao :twisted: .

Seguimos con los problemas: si este año cada programador mete cuarenta horas de programación a la semana, y el año que viene sigue metiendo cuarenta horas de programación a la semana… ¿Ha aumentado la productividad? Alguien diría que no (se facturan las mismas horas), pero a lo mejor ese programador está cometiendo un 1% de los errores que cometía el año anterior, y está entregando cerca del doble de funcionalidades por semana que antes… ¿Y le seguimos cobrando lo mismo a los clientes? Es más, ¿Le estamos pagando lo mismo al programador? Que mal, ¿no?

Más razones, bordeando el campo de Earn Value Management (EVM): si en un proyecto de mil horas llevamos invertidas quinientas horas… ¿está la mitad del proyecto hecha? Respuesta típica: “esperemos por Diox que sí:-D . Respuesta correcta: no lo sabemos.

Es por todas estas razones y alguna más que los equipos Ágiles maduros estiman las funcionalidades que deben desarrollar en función de su tamaño, no en función de las horas o recursos necesarios para construirlas. Sería, de alguna forma, estimar cuantos “kilos” de software vamos a entregar. O cuantos cientos de líneas de código (por el amor de $deity, no estiméis vuestros proyectos en cosas como ULOC’s , espero que no sea necesario explicar por qué :twisted: ).

Por ejemplo, podríamos escoger una funcionalidad prototipo que nos sirva como patrón. Ésta toma diferentes formas dependiendo del entorno tecnológico y de mercado que tengamos: puede ser un formulario básico de cuatro campos, un login/logout, una pantalla de móvil con una consulta a base de datos, un listado básico de AS400… La idea es localizar un “bloque” de trabajo básico que siempre, o muy frecuentemente, se da en nuestros proyectos, y asignarle a esta idea un valor: por ejemplo, cien. ¿Cien qué? Cien. Cien Chipiklanders, si os sentís mejor (pequeño y sentido homenaje al maestro Fuckowski).

Y ahora comparamos las demás historias del proyecto contra el tamaño de este prototipo. Esta historia es algo más del doble de grande… doscientos cincuenta. Esta es el triple: trescientos.

Ahora veamos qué pasa los primeros días que utilizamos puntos. Cuando sacamos la historia prototipo (un formulario con cuatro campos), el miembro senior piensa “bah, dos horas”, el promedio “cuatro horas” y el junior “ocho horas”. Si se ponen a discutir sobre cuantas horas necesitan, cada uno dice un número. Y todos tienen razón. Y todos están equivocados. Como en la historia del elefante.

Pero ahora es un “cien”, y todos están de acuerdo en que es un cien. De forma que cuando sale una tarea el doble de grande, el senior piensa “ok, cuatro horas”, el promedio “ocho horas”, el junior “dieciséis horas”… Y todos dicen “doscientos”. :-D

Este proceso interno de conversión personal de puntos-horas suele darse al principio. Es lo que lo llamo el “periodo de transición al euro”, en el que al principio nos decían “veinte euros” y pensábamos “ok, 6 euros son mil pesetas, 12 son dos mil, 18 son tres mil, y me quedan dos euros, que son 2 por 166 como algo, o sea algo más de trescientas… Uuuuuh… Tres mil trescientas pesetas”. Pero cuando ha pasado un tiempo suficiente, veinte euros es un cine con palomitas para dos, o dos menús, o una camiseta, o un tercio de depósito del coche… Ese número, que antes era abstracto, ahora tiene sentido para nosotros.

Otro de los problemas iniciales es que todo el mundo está muy acostumbrado a que se les pida precisión absoluta. De hecho, cuando les piden estimación generalmente lo que les están pidiendo es un compromiso, y eso funciona muy, pero que muy mal. Pero el caso es que cuando decimos “dame una estimación para esta historia, sabiendo que esta otra (aproximadamente la mitad) es un cien”, hay quien se bloquea con los detalles. ¿Esto es con patiflux de peristone o sin patiflux de peristone? ¿Los campos tienen que esgorziarse con el tetraconmutador cíclico? ¿Contamos con un condensador de fluzo? Detalles que, casi siempre, no tiene sentido ponerse a detallar en un proceso de estimación siempre que dejemos claro que el objetivo no es la precisión (esto daría para otro ladrillo importante ;-) ). Hay un ejercicio que suelo hacer en estos casos que es preguntar “¿Cuánto vale un adosado?”, sin más detalles. Si la gente no responde, voy diciendo cosas como “¿Un millón de euros? ¿menos? ¿cicuenta mil euros? ¿más? ¿doscientos mil euros? ¿trescientos mil euros? ¿Más trescientos o doscientos?”. Y al final hay un número. Que por descontado habrá que pulir, pero lo que me interesa ahora mismo es tener un primer orden de magnitud (¿diez mil o trescientos mil?), y eso es lo que procuramos al usar puntos. Porque si usamos horas o días, inmediatamente el subsconciente de los que luego van a tener que entregar el proyecto comienza a traducir la estimación en plazos de entrega. Y entonces comienzan otra vez los problemas.

Al grano: poco a poco el equipo comienza a familiarizarse con lo que es un “cien”, un “doscientos” o un “cuatrocientos”, y comenzarán a escoger en cada iteración tantas historias como consideren que pueden terminar totalmente (terminado, terminado) en una iteración (Sprint). Con el tiempo, en media, harán más o menos la misma cantidad de trabajo en cada iteración.

Y las palabras clave son “en media”.

Porque hay semanas buenas y semanas malas. Hay semanas que haremos tres mil puntos y semanas que haremos mil quinientos. Y lo malo es que muchos gestores entonces optarán por planificar de cara a tres mil puntos por semana. Cuando los consigan (semana buena), dirán “¿veis? ¿veis como cuando queréis podéis?”. Y cuando no los consigan (semana mala: muchos Bugs, reuniones, distracciones, retrabajos, peticiones de clientes…) dirán “es que no se os puede dejar solos, hay que estar con la vara encima de vosotros todo el tiempo”.

Lo lógico es no planificar de cara a tres mil puntos por iteración ni a mil quinientos, sino analizar la media sostenida. Si la media es dos mil y planificamos contra esa media, unas semanas andaremos retrasados, otras adelantados y, en media, cuadraremos los proyectos.

Y eso nos permite otra cosa importantísima: analizar cuál es nuestra velocidad media ahora y ver cuál será dentro de un año. Y entonces si podemos aproximar si nuestra productividad ha crecido o no, porque si hace un año nuestra media era de dos mil y ahora es de dos mil quinientos, podemos inferir una mejora de la productividad del 25%.

En resumen: la estimación en puntos cuenta con grandes ventajas para los procesos de estimación y gestión de proyectos, así como para la medida de la productividad y la mejora de los equipos de desarrollo, y el único inconveniente que personalmente he podido encontrarle con el tiempo es que es poco intuitiva de usar al principio… Como cualquier innovación basada en un cambio de paradigmas, por otra parte.

En fin, que espero que este granito de arena anime a algunos a investigar más sobre el tema, y si tenéis dudas o experiencias al respecto serán bienvenidas en los comentarios. ;-)

Esta entrada fue publicada en Gestión de Proyectos y etiquetada , , , , . Guarda el enlace permanente.

18 respuestas a ¿Horas ideales o puntos abstractos?

  1. Eduardo Ferrández dijo:

    Muy buen post. De acuerdo en casi todo. Sólo un apunte. Si mides la productividad en “puntos función” puedes crear una deuda técnica cuando el programador busque atajos para mejorar su productividad. Creo que el valor de un profesional es algo más abstracto y quizás subjetivo, no tanto como en el arte, pero más que en la fabricación industrial.

  2. Ángel dijo:

    Cuidado, que no hablamos de “puntos función”, que son una cosa, sino de “puntos abstractos”, otra muy distinta. Por lo demás, entender mal la productividad siempre se puede dar, pero una de las cosas en las que suelo hacer énfasis es en que exista una definición de qué significa que algo está terminado-terminado (documentado, testado, subido a integración…). No soluciona el problema, pero ayuda.

    El caso contrario, usando horas, sería que un programador reportase más horas de la cuenta en una funcionalidad para así poder cuadrar sus cuarenta horas semanales… Pero claro, eso no ocurre nunca :O)

  3. Ángel dijo:

    Por cierto, que velocidad leyendo… :-D

  4. Eduardo Ferrández dijo:

    Cuando el tema es interesante y está bien escrito no es difícil leer deprisa. Creo que el tema de la estimación es nuestro talón de Aquiles y siempre es interesante que alguien reflexione y describa lo que intuimos en nuestro día a día.

  5. Iván dijo:

    Muchas gracias por el post, ya sé que resulta dificil contar lo mismo con distintos ejemplos una y otra vez, pero es que el concepto parece tan claro que una ya no entiende la reticencia. Además, en horas siempre somos más optimistas. Hay un ejemplo que he escuchado últimamente y que resume un poco todo este asunto: Cuando le preguntas a alguien: ¿Cuanto tardas en llegar de tu casa al trabajo? Normalmente siempre recibes una respuesta que no entra en las escalas del optimismo, porque nadie cuenta con tiempo de trasbordos, tiempo que tardas en llegar a la parada del tren, que te pasas de parada por ir dormido… Al final cuando de media tardas 1 hora, todo el mundo dice 40 minutos…

    En resumen, que al final nadie llega por no contar con los detalles.

    Ahora es cuando me voy a mis compañeros, y les digo: “Ya os lo decía, melones” ;). Un abrazo para ellos.

  6. Ángel dijo:

    Hahaha! Muy bueno lo del tiempo en llegar a casa… Lo suyo sería decir “mi casa está a trescientos puntos” y luego medir una media de veinte minutos (reales) en hacer cien puntos :-)

    Espero veros en la conferencia de Junio… ¡Duro con ellos! ;-)

  7. AndrésEA dijo:

    Gracias Ángel! esto me ayuda a entender mejor el problema y las soluciones pero sobre todo me recuerda el derecho que tengo a que me cueste un poco hacerme con conceptos un tanto abstractos.

  8. Juanjo dijo:

    Muy buen post Ángel, gracias por atender nuestras dudas de forma tan comprometida. Sólo me queda contárselo al equipo de forma que se auto-convenzan, en la próxima retrospectiva citaré este post. Ya te contaremos los resultados. ;)

  9. jorge dijo:

    excelente, una vez más.

    Lo único que puedo añadir es que es una pena que no escribas con más asiduidad ;)

  10. Francisco dijo:

    Muchas gracias Ángel, me ha solucionado bastante las dudas sobre pesar en puntos en vez de en horas. Aun así, sigo viendo difícil mantener la proporcionalidad entre la tarea que hemos definido como 1 y las tareas más grandes, principalmente porque si nos enfrentamos a tareas con son un tanto desconocidas, el senior va a verlas más sencillas que el junior, para el que dicha tarea es un poco como una caja negra. Y éste las pesará mucho más a la alza.
    Supongo que eso es inherente y precisamente Scrum proporciona mecanismos para que ambas opiniones converjan, pero no deja de ser un proceso un tanto doloroso.

    En lo que no había caído es en la medida de la productividad, en cómo con esta metodología permite trazar de una manera mucho más fiable un aumento real de la misma.

    Gracias de nuevo :)

  11. Ángel dijo:

    Lógico, una historia grande es dificil de estimar. Por eso en la baraja de planning poker hay 1, 2, 3, 5, 8… Y los números más grandes sólo deben usarse, a mi juicio, en grandes planificaciones de producto. Con historias grandes lo suyo es trabajarlas y dividirlas en historias más pequeñas (curro del Dueño de Producto, a ser posible con el equipo).

    Sobre las diferentes perspectivas de Seniors y Juniors, la estimación en puntos te ayuda a paliarla, y si la combinas con Planning Poker (o Delphi para los del PMBOK ;-) ), tendrás dos estupendas herramientas para mejorar tu proceso de estimación a la vez que el conocimiento del equipo y la propia cohesión del mismo.

  12. Adrian dijo:

    Hola!

    interesante el artículo aunque no esté de acuerdo.

    Mi impresión es la siguiente:

    El incorporar una medida de tiempo indirecta como son los puntos abstractos, donde, parafraseando el artículo: 10 puntos son un día para un senior, pero dos y medio para un junior, luego, al llegar al momento del compromiso de parte del equipo en decir “cuantos historias” deben entrar en el sprint, lo lógico sería que en un hipotético sprint de una semana el junior dijera que podemos acabar con las historias más prioritarias que sumen hasta 20 y el senior, en cambio, propondrá 100 puntos por sprint. De este modo, no estamos resolviendo el problema de las distintas velocidades relativas de los miembros de un equipo, sino, simplemente, postergando el problema, enmascarándolo y moviéndolo al final.

    Si como se propone en el artículo, utilizamos la palabra clave “en media” para calcular el compromiso final, ¿no es más sencillo hacerlo para todas las estimaciones? ¿no me evito una indirección (“poco intuitiva” de acuerdo al post)?

    Uno de los problemas de estimar en puntos abstractos con el que nos encontramos en nuestro equipo fue que, luego de identificar ese “bloque básico” que se asociaba a “complejidad base”, la frecuente aparición de tareas sencillas y largas de ejecutar, frente a las pequeñas y muy complejas, terminaba generando estimaciones disparatadas.

    En cuanto al aumento de productividad, al ser los “puntos abstractos” una medida relativa per se y solo válida dentro de lo que un equipo acordó en un momento de su historia (los equipos cambian y las personas también), me parece mucho más lógico contabilizar la cantidad de historias acabadas comparando, sobre todo las de igual tipología en distintos sprints. En definitiva esto es lo que el cliente ve, percibe y aprecia.

  13. Ángel dijo:

    Hola Adrian:

    Ante el problema inicial a la hora de establecer la velocidad por sprint, hay una solución muy fácil al principio:

    no determines ninguna velocidad.

    Simplemente comienza a coger historias desde el principio y a ver cuántas se hacen en un sprint. Para el segundo sprint, ya puedes aplicar “yesterday’s weather”, y a partir de ahí ir tuneando la media.

    Por otra parte, suponiendo que esto fuera un problema, ¿estimar en horas lo soluciona?

    Respecto a utilizar la media para todas las historias: si empleas puntos, no es necesario, ya que una historia de cien puntos, al aplicarle luego la velocidad media, se hará “en media” en una seria de horas, con la ventaja de que no tienes que estar haciendo este cálculo para todas y cada una de las historias, sino para el conjunto del sprint.

    Por otra parte, date cuenta de que no se trata de estimar COMPLEJIDAD, sino TAMAÑO. Por eso una tarea sencilla puede ser GRANDE y una compleja PEQUEÑA. Ese es probablemente el error que cometisteis al emplear puntos.

    Finalmente, y en lo tocante a la medida de productividad, medir “historias entregadas” no esta mal si todas las historias tienen un tamaño similar. Si no tienen tamaños similares, podías coger un patrón y decir “esta vale por dos, esta vale por tres, esta por cinco”… Un momento…¡Si eso es estimar en un puntos! :-D

  14. Juan dijo:

    Yo solo te voy a decir una cosa:

    ¡GRACIAS!

    Un saludo

  15. Ángel dijo:

    Juer, que contundente… :-D

  16. david dijo:

    gracias por el articulo, muy bueno…

    me queda una duda… para las empresas que venden desarrollo de software…. ¿como le pondrán precio al punto?… me imagino no podran hacerlo bien hasta muchas y muchas tuneadas..

  17. Juan dijo:

    Hola,

    Está bien resumido, pero creo que deberías comentar las fuentes por eso de que la gente pueda ampliar. En este caso el amigo Mike Cohn los explica en un interesante libro: Agile Estimating and Planning

    saludos

  18. Miguel dijo:

    antes de todo, como estudiante de Ing.Informática, gracias por dar un poco de luz a este mundo que a veces parece que se lleva demasiado bien con la “chapuza”. Por suerte, tu demuestras que hay otras opciones.

    Luego, solo que no me queda muy claro como valoras en esos puntos que hablas (creo que aun tengo que leer mucho más sobre este tema que parece interesante) el tema de la reutilización de código y luego “mides” la productividad.

    Está claro que la misma función si la valoras con los mismos puntos, pero reutilizas algo ya hecho, en términos de lo que acabas “cobrando” si te da una buena idea, pero si entiendes la productividad como la capacidad del equipo para desarrollar más rápido un proyecto (ya sea por una mejor interacción entre miembros, cordinación, etc) puede resultar un tanto engañoso. Espero haberme explicado y que me aclares las dudas.

    Por otra parte decirte que aunque en mis estudios me habian hablado ya de metodologias ágiles me alegra encontrar una propuesta a muchas charlas que ya tuve con algunos jefes que me pedian horas ante mi negación a estar calentando la silla porque sí.

    Esto es todo,
    salud!

Los comentarios están cerrados.