Uno de los puntos más complejos del desarrollo de Software es la estimación. En esta clase me gustaría abordar qué herramientas Gitlab nos ofrece para poder estimar la cantidad de trabajo que un issue requiere, qué ventajas tiene agregar pesos a los issues y algunas de las buenas prácticas relacionadas con este ejercicio.
Gitlab ofrece la funcionalidad de agregar pesos a los issues. Estos pesos se representan de manera numérica (con el límite de que los números deben poderse representar en 4-bytes). Los pesos aparecen en el menú derecho del Issue, junto al nombre del issue en la lista de issues y sirven para determinar la cantidad de trabajo ejecutado en los Burndown Charts de los Milestones.
Ahora bien, estimar es algo difícil. Para los desarrolladores de software es una de las tareas –quizá la tarea más difícil– de nuestro trabajo. Se deben tomar en cuenta muchísimos factores, muchos de ellos desconocidos, para tomar decisiones que afectarán al resto del equipo y a la compañía misma. Por eso, muchos desarrolladores y product owners son reacios a estimar; pero hay que recordar que la estimación es tan solo eso: un estimado. No es un juramento de sangre ni una declaración solemne ante autoridad judicial. En pocas palabras, jamás trabajes fines de semana y vacaciones para cumplir un estimado.
No obstante lo anterior, existen un par de buenas prácticas que te ayudarán a ser más preciso y ayudar a los product owners a priorizar el trabajo pendiente.
El primer punto que debes tener en cuenta es que la estimación es un trabajo de equipo. Es importante que diversos equipos de trabajo colaboren en la estimación. Los Desarrolladores, Diseñadores, Product Managers, etc. tienen diversas perspectivas sobre lo que implica desarrollar una nueva funcionalidad. Cuando la estimación se realiza tomando en cuenta estas perspectivas existe una mayor probabilidad de que la estimación se acerque a la realidad.
Otro punto importante es que las estimaciones funcionan mejor cuando son relativas. Es decir es mejor encontrar un trabajo relativamente sencillo en el que todo el equipo se encuentre de acuerdo y estimar a partir de ese punto. Por ejemplo, si todo el equipo está de acuerdo en que añadir verificación a los campos de un formulario es un 2, entonces estimemos con base en ese acuerdo.
Es importante recordar que cuando estimamos, es buena práctica tener un sistema de estimación en el que el equipo esté de acuerdo. Un ejemplo muy usado en la industria son los puntos Fibonacci. Es decir, se utiliza la secuencia de Fibonacci para asignar pesos a issues (1, 2, 3, 5, 8, 13, etc.). Otra forma, es utilizar tallas de camisas (S, M, L, XL, XXL, etc.). En todo caso, lo importante es que el equipo entienda estos sistemas y los adopte en sus prácticas.
Por último, cuando incluímos a varios miembros del equipo en la estimación es importante que sus opiniones no se vean sesgadas por el resto de sus compañeros. Por eso, una práctica que me gusta mucho es la de jugar “Estimation Poker”. En esta modalidad de estimación, todo el equipo tiene barajas que representan los puntos y cuando se pone a discusión un issue, los miembros del equipo revelan su estimado con las barajas. Si todos están de acuerdo, perfecto. Pero si existen grandes discrepancias es momento de escuchar y de volver a evaluar con la nueva información que nos ha sido proporcionada. En todo caso, lo importante es mejorar con el paso de los sprints y que las estimaciones, quizá nunca perfectas, sean lo más realistas posibles.
En la empresa donde me encuentro actualmente, utilizamos mucho esta herramienta para la estimación de Scrum, sobretodo por que en muchos casos hay desarrolladores que no se encuentran fisicamente en la sala donde realizamos las reuniones, espero les sirva:
No Confundir esfuerzo con tiempo.
wow!!!!! esto es muy cierto amigo!!!!!
El peso se refiere al esfuerzo requerido y de este modo podría también sugerir el tiempo que pueda requerirse, pero, el esfuerzo requerido también depende de quien tenga a cargo el issue; un desarrollador junior podría requerir más tiempo que un desarrollador con más experiencia. Como se podría manejar este tipo de escenario?
En mi experiencia, como Líder de Proyecto, lo que primero hacemos es poner peso a cada una de las actividades, una de mayor peso conllevará también un mayor riesgo de desviación y por lo tanto se asignará a los desarrolladores más experimentados para reducir el riesgo, mientras que las de menor peso se asignarán a los desarrolladores menos experimentados. En la retrospectiva del sprint se analiza el esfuerzo estimado con el esfuerzo real, se ajustan los pesos y se mide el rendimiento de cada uno, el objetivo es que todos mejoren su rendimiento y por lo tanto la "velocidad" de ejecución del equipo se vaya incrementando sprint vs sprint.
Asignar actividades tomando en cuenta la complejidad y la experiencia de quien las va a realizar es una buena observación.
Hay que aprender a planificar el esfuerzo.
Planning-poker
Super importante esta lectura, me quedó sonando lo de las tallas de las camisetas como sistema de estimación. Comparto esta otra lectura que también me gustó
Al estimar usando poker planning, y asignar puntos historia, esto también puede usarse para medir el progreso real del equipo en términos de trabajo realizado.
En mi caso en varios equipos en los que he participado se realiza la definición de un Pivote, una Historia de Usuario o Issue que todos conozcan muy bien y hayan solucionado. Se le asignan un peso y esta se utiliza como referencia para estimar el esfuerzo de los futuros Issues.
Yo les cuento que en unos procesos en los que aprendí algo de Scrum, nos mostraron apps como: "Scrum Poker" y "Scrum Time".
Muy interesantes por la posibilidad de definir las escalas o rangos a usar.
En mi experiencia, es una practica que va tomando sentido conforme se va desarrollando experiencia en varios proyectos.
De entre los cuales es posible obtener un factor comparador de scopes de acuerdo a la problemática general a resolver, como saber que la integración con algún servicio en particular suele ser una tarea compleja vs alguna otra como agregar una validación en un input.
En otras palabras, es posible acercarse a la realidad conforme se vaya recolectando patrones neuronales de resolución de issues. Lo cual haría que progresivamente seas mas eficiente en relacion a issues relacionados.
Pero no hay que confundir el esfuerzo con el tiempo
totalmente de acuerdo!!!!!
Lo del poker ayuda mucho cuando se integra personas con distintos niveles de conocimiento, en algunos casos ayuda a redefinir los equipos de trabajo.
Que estime una persona técnica no una perdona k nunca ah programado
Con respecto a las estimaciones, hay varios puntos que puente generar grandes desviaciones para los puntos estimativos.
La experiencia de los devs es importante. Un junior tardaría más en resolver un problema que un semi-senior y a su vez que un senior.
La cantidad de desarrolladores que intervienen en el proceso podría complicar la repartición de las tareas y la interacción entre estos mismos.
El tamaño de desarrollo y construcción de la tarea asignada. A veces se crea un Sprint que resulta muy cargado de procesos que engloban una tarea y conviene antes de crear un issue fraccionar en partes y luego reunir los procesos para dicho sprint.
Los problemas que pueden surgir durante el desarrollo y la construcción del software, que pueden crear bloqueos importantes en el progreso de los procesos y peor aún, si estos procesos son contiguos y correlativos los unos de los otros.
Mi crítica:
Supongo que deben haber más puntos. Una cosa que critico enérgicamente de Agile y Scrum, es que no poseen cálculos o determinaciones para obtener el "camino crítico" durante un sprint. Tan solo los proyectos basados en Peart lo poseen mientras que Gann y otros no. El camino crítico es ideal para corregir potenciales desviaciones en los progresos de los procesos de desarrollo. Es algo que veo que los ingenieros no resuelven o no pueden resolverlo con estos métodos.
Una de las cuestiones importantes a la hora de estimar y que por lo menos he visto poco en los equipos en los que estuve es que el SCRUM master no hace que el PO este presente en la planning. Para mi es importante ya que puede aclarar muchas dudas al momento de estimar o dudas de alguna feacture en particular.
Es muy útil la estimación. En donde trabajo lo usamos hace unos años y ayuda muchísimo a ser más objetivos y a no pensar por sobre el compañero de trabajo subestimando o sobrestimando su capacidad de trabajo.
Las estimaciones, siempre son útiles a la hora de entregar resultados, son las que te indican la velocidad de tu equipo
Ahora si se viene lo chido!
Es preciso tener buena base de comunicacion en el equipo para trasladar un sistema de estimaciones
Jajaj la idea del poker esta genial!
Venga que Agile anda en todo :/ , pero que mas darle que si no duele no sirve