estimation - menstruación - cuando comienza el ciclo menstrual
Cómo evitar la regla 80/20 en el desarrollo de software. (19)
Creo que todo se reduce a la percepción de los usuarios y la gestión. A pesar de que pueden conocer la estimación hasta su finalización, todavía se envuelven en las emociones y percepciones de lo que están viendo y los números estimados toman un segundo plano. Esto es lo que estoy tratando de averiguar cómo contener o gestionar las expectativas.
Escribe los algoritmos primero ... luego la interfaz de usuario.
Parece que no importa cuál sea mi proyecto, acabo el 80% del trabajo bastante rápido. Los usuarios y la gerencia se entusiasman pensando que las cosas están adelantadas a lo programado, pero el molesto 20% del trabajo restante parece demorar 4 veces más que el 80% anterior. Cuando tenemos nuestros chequeos regulares o levantamientos en el proyecto, me siento como un disco roto que dice "sí, las cosas han ido bien hasta ahora, pero todavía queda mucho por hacer ..."
En su mayor parte, mis estimaciones son bastante precisas, pero soy humano. ¿Cuál es el mejor enfoque para convencer a los usuarios de que el último 20% del trabajo realmente toma el 80% del tiempo? Parece que cada vez más usuarios y administradores creen que la tecnología de la información es fácil y que la magia sucede en un abrir y cerrar de ojos ...
En general, hacemos un seguimiento de las tareas en lo que creo que es un nivel bastante bajo. No necesariamente en una etiqueta de creación o en un cuadro de texto, pero somos bastante detallados ... También realizamos un seguimiento de nuestra estimación hasta completarla en todas las tareas, que considero que es un número más importante que la estimación original cuando se encuentra en la mitad del proyecto .
Creo que todo se reduce a la percepción de los usuarios y la gestión. A pesar de que pueden conocer la estimación hasta su finalización, todavía se envuelven en las emociones y percepciones de lo que están viendo y los números estimados toman un segundo plano. Esto es lo que estoy tratando de averiguar cómo contener o gestionar las expectativas.
EDITARConvirtiéndose en una wiki de la comunidad ya que esto es bastante subjetivo. Debería haber sido así desde el principio.
Siempre lleva más tiempo de lo esperado, incluso cuando se toma en cuenta la Ley de Hofstadter
Pero yo divago.
La mejor práctica es tristemente la experiencia. Los métodos SCRUM han sido muy útiles para algunos tipos de desarrollo de software, ya que actualizan constantemente la fecha de lanzamiento a una fecha más precisa. (video rápido sobre scrum)
¿Cómo estimas la cantidad de trabajo? Usted dice que "el molesto 20% del trabajo restante parece demorar 4 veces más que el 80% anterior", pero ¿cómo llegó a la estimación de que "20%" del trabajo se mantiene y que "80%" es ¿hecho? Obviamente, las estimaciones son erróneas: en realidad, solo el 20% del trabajo está hecho y el 80% restante.
En el desarrollo de software es muy difícil dar estimaciones precisas con mucho tiempo de anticipación. La única forma es dividir el trabajo en pequeñas piezas manejables (quizás menos de 10 horas cada una). Puede estimar con precisión sólo los próximos pasos inmediatos.
Algunas prácticas que ayudan a estimar el progreso se pueden encontrar en Scrum. El alcance del trabajo que se realizará durante el próximo sprint (un mes o menos) se fija al comienzo del sprint y se proporcionan estimaciones aproximadas para cada trabajo. Luego, después del sprint, el equipo puede reflexionar sobre la cantidad de progreso realizado, la cantidad que aún falta, la precisión de las estimaciones y la lentitud del equipo. En Scrum y otros métodos ágiles, un punto importante es obtener una respuesta rápida de lo que se hace y de lo lejos que estamos en el proyecto. Recomiendo leer más sobre ellos. El video sobre Scrum que Ólafur Waage vinculó en su mensaje ofrece una introducción buena y rápida.
Al planificar, tenlo en cuenta. Cuando estime el tiempo que tomará hacer una subtarea, proporcione una estimación de "Hecho" en lugar de "Básicamente hecho" (Calcule a partir de la experiencia cuánto tiempo tarda "Hecho". Resista la tentación de descartar la integración, la documentación, la limpieza , pruebas, corrección de errores después de las pruebas, implementación, etc., como pequeñas tareas que serán absorbidas por otras tareas.
Terminarás con una gran estimación horrible. Pero pregúntese si está fuera de línea con el tiempo real empleado en proyectos anteriores.
Creo que es mejor si puedes prometer menos y entregar en exceso.
Si tus estimaciones son correctas, entonces cuentas con ese molesto 20%. Obviamente no lo hiciste, y es por eso que es un problema.
Tal vez usted está tratando de darles todo lo que quieren, lo que no es realista. Es posible que no haya tenido en cuenta plenamente la ley de Murphy o que no haya tenido tiempo suficiente para realizar pruebas, detectar errores y volver a realizar pruebas, etc.
Parece que deberías estar haciendo un poco más de gestión de riesgos ...
Creo que si está haciendo estimaciones para una tarea que agrupa el 80% y el 20%, está teniendo un comienzo débil. Rompe tus estimaciones. Realiza el 80% y el 20% dos tareas explícitas; La parte fácil y la parte dura, si es necesario.
Luego, puede proporcionar estimaciones de tiempo más realistas por adelantado para el trabajo en su conjunto, y facilitar que la producción realice un seguimiento de los detalles.
Cuando se trata de estimar el tiempo esta es mi experiencia:
Si no puede decir positivamente que una tarea tomará menos de 4 horas, no puede estimarla con precisión. Romperlo en trozos más pequeños y repetir de forma recursiva.
Hacer una estimación de tiempo de este tipo no es un día de campo, tomará tiempo, básicamente tendrá que planear el proyecto completo en partes manejables, lo que significa que cualquier cambio en el requisito resultará en un plan de tiempo modificado (sorprendente, ¿no? )
El mayor problema es que no podemos prever todos los detalles (tal vez, digamos, 20%, tal vez. Dejando el resto 80% sin estimar ...) - vea SCRUM como otros ya lo han señalado.
La administración rara vez "aceptará" una estimación de tiempo tan detallada, ya que "tardará demasiado" en implementarse.
Sin embargo, como la administración está interesada en obtener ganancias, también está interesada en los recortes. Por lo tanto, debe identificar las esquinas posibles para cortar y hacer compromisos sofisticados basados en los escenarios de la vida real involucrados. Respaldado por la administración, puede lograr muchos de estos últimos 20% al no hacer nada (por desgracia, pero supongo que es cierto).
Debido a que el último 80% del trabajo que representa el último 20% del producto final es realmente pulir y eliminar errores y adaptarse a los requisitos cambiados, etc. Es posible que haya una primera versión limitada, etc., etc., que sea creativo. .
Decir "sí, las cosas han ido bien hasta ahora, pero aún queda mucho por hacer ..." podría no ser la mejor manera de expresar su opinión. Después de escuchar que un gerente o cliente podría pensar "sí, queda mucho por hacer, pero hizo esta parte tan rápido que seguramente el resto es mínimo".
En su lugar, asegúrese de identificar el trabajo restante y programarlo. De esta manera puede mostrar dónde debe estar durante el 20% restante del proyecto. Si se demora demasiado, su agenda mostrará un proyecto retrasado y eso debería generar cierta sensación de urgencia.
Mantenga sus tareas actualizadas semanalmente (o cuantas veces regularmente tenga informes de estado). Identifique las áreas que están en peligro de quedarse atrás, especialmente si otras áreas dependen de ellas.
Descubrí que la mejor manera es mantener el programa actualizado con el porcentaje completado para cada tarea. De esa manera, el progreso es bastante claro. Comunícaselo a la gerencia y ellos deben entender dónde estás en todo momento.
He descubierto algunas cosas que ayudan mucho con las estimaciones de tiempo.
- Familiaridad con el código base. Cuando puedes escuchar la especificación y pensar "Necesito tocar las clases A, B y C: nada más, nada menos", entonces puedes ser bastante preciso. Considero que esto funciona mejor que saber qué funciones específicas se deben escribir, porque entonces sabes lo que no necesitas escribir.
- Recuerde incluir pruebas, corrección de errores, implementación y solicitudes de última hora. Es fácil olvidar que necesitas migrar un montón de registros.
- Hasta cierto punto, estar familiarizado con el idioma. Si sabe qué bibliotecas necesitará, entonces es más fácil saber qué no tiene que hacer.
También he usado esto con bastante éxito para aproximar la velocidad de los compañeros de trabajo. Solo se necesitan algunas observaciones empíricas acerca de qué tan rápido pueden desarrollar una característica y qué tan bueno será antes de probarla.
Intente y proporcione las estimaciones más precisas que pueda y proporcione la mayor transparencia posible en el proyecto. Si está constantemente cerca de sus estimaciones, eso debería ser suficiente para satisfacer a sus gerentes. Recuerda que es muy muy difícil medir la productividad .
Lea el excelente libro Rapid Development de Steve McConnell, que tiene mucho que decir sobre el tema 80/20 y otros caprichos de la estimación de software.
Mantenga sus horizontes de tiempo cortos. Es más fácil estimar lo que hará en las próximas semanas que en los próximos meses. Considera dividir tu proyecto en hitos cortos. Un mes o quizás un par de meses depende de lo que esté tratando de hacer. Esto es básicamente lo que hace Scrum. Luego, calcule con mayor precisión solo el trabajo que va a hacer en el hito actual. Vuelva a estimar el próximo hito cuando llegue allí y tenga muchos más datos en los que basar las estimaciones. Parte de la razón por la que el último 20% se está demorando es que probablemente esté haciendo la estimación por adelantado cuando no sepa lo suficiente.
Además, pruebe las técnicas de estimación Wideband Delphi . Esto eliminará mucho más los costos ocultos que probablemente no esté considerando.
No creo que pueda decirlo mejor que Joel con los horarios de software sin dolor .
Si su gerente le hace reducir una estimación, esto es lo que debe hacer. Cree una nueva columna en el programa llamada Estimación de Rick (asumiendo que su nombre es Rick, por supuesto). Incluya su estimación allí. Deje que su gerente haga lo que ella quiera con la columna Curr Est. Ignora las estimaciones de tu gerente. Cuando el proyecto esté terminado, ver quién estaba más cerca de la realidad. Descubrí que solo amenazar con hacer esto funciona de maravilla, ¡especialmente cuando su gerente se da cuenta de que acaba de participar en un concurso para ver cuán lentamente puede trabajar!
No les muestres el primer 80% tan pronto como esté terminado. Goteo alimentarlos.
Se ha dicho que el primer 90% del tiempo del proyecto se utiliza para el 90% del trabajo, y el 90% restante del tiempo del proyecto se utiliza para el 10% restante o el trabajo. ;)
Es natural hacer un gran progreso al inicio del proyecto, ya que simplemente hace las partes más fáciles primero. Además, si hay algún problema en el primer 80% del código, a menudo no serán evidentes hasta que todo se junte y realmente pueda probar todo el código.
Tal vez, como experto, debería dejar que las personas prueben la aplicación que está hecha en un 90% para que vean qué diferencia hace el último 10% ...
Si constantemente encuentra que el último 20% del trabajo se está demorando 4 veces más que el primer 80%, entonces puede ser el momento para una discusión honesta con usted mismo (o con colegas de confianza) sobre si está permitiendo que se acumule deuda técnica. sube durante el primer 80%, y te está mordiendo al final.
Eso puede referirse a prácticas laborales que usted podría considerar cambiar.
Dos de las mejores prácticas que conozco para reducir la deuda técnica son escribir buenas pruebas (preferiblemente antes de que escriba el código, pero las palabras de repuesto también funcionan) y refactorizarlas después de cada tarea. Piense en la refactorización como la limpieza de la cocina después de cada comida, en lugar de al final del mes.
Tal vez necesite desglosar las tareas / funcionalidades en las que está trabajando en unidades más pequeñas, tanto para el trabajo de programación como para los registros / informes. Por ejemplo, casi nunca tengo ningún artículo individual en mi agenda que dure más de dos días.
Luego, en lugar de decir "Estoy trabajando en nuestro nuevo fabricante de muppets" todos los días en Scrum durante dos semanas, puede decir "Actualmente estoy trabajando en el selector de ojos para el fabricante de muppets".
Si está trabajando con horarios y sus horarios son precisos (lo que significa que representan tanto el 80% como el 20%), entonces la administración realmente no debería tener problemas. Si implican que pueden reducir el tiempo asignado porque está "casi terminado", entonces muestre las partes de la especificación que no se han implementado.
Supongo que se trabaja a partir de algún tipo de especificación funcional que detalla qué debe hacer algo, cómo debe comportarse y los casos extremos con los que debe lidiar. Si este es el caso, entonces preocuparme por las emociones y las percepciones de la administración me parece muy extraño, deberían ser bastante capaces de comparar las especificaciones con su trabajo o leer su programa para ver qué queda.
Una de las causas principales del fenómeno 80/20 es que lo inesperado siempre ocurre para cualquier tarea difícil, y en ocasiones incluso trivial. Por ejemplo: la documentación que requieren sus procesos de diseño de software obtiene de repente un nuevo formato de plantilla, gracias a algunos administradores de procesos demasiado entusiastas. De repente, no es solo una simple cuestión de actualizar los documentos para su nueva versión, ahora tiene que reestructurar cada uno de ellos, y todos ellos toman mucho más tiempo.
Una de las mejores recomendaciones que he escuchado para manejar este tipo de fenómeno es siempre crear subtareas de almacenamiento intermedio en el cronograma del proyecto, recomendado por Richard Whitehead . Cada tarea importante obtiene un aumento de tiempo del 20% (o en algún lugar alrededor de él) anotado como una subtarea para esa tarea. El propósito de cada uno es proporcionar alguna medida de lo que sucede cuando "las cosas salen mal" en esa tarea. El autor admite (y también descubrí que es verdad) que a menudo la administración tratará de eliminar esas tareas intermedias: su único recurso es defender su posición o hacer una maniobra como los defensores de Joel (como @Casey ya mencionó). En la práctica, he encontrado que un buen número de subtareas de búfer generalmente se quedan, y han ayudado algunas veces en horarios ajustados.