"El software se hace cuando se hace, no antes ni después".
Esto es cierto, pero para cada tarea en la que sus desarrolladores comienzan a trabajar, ¿ entienden todos los miembros de su organización la Definición de Hecho para cada tarea?
Parece que uno de sus mayores problemas es la Estimación , pero los desarrolladores solo pueden proporcionar una estimación realista cuando tienen una 'definición de hecho' inequívoca y claramente especificada. (Que incluye problemas de procesos de la compañía, por ejemplo, documentación del usuario, paquetes de trabajo en una versión formal, etc.)
No es sorprendente que la sobreestimación esté causando un problema, dado que la mayoría de los desarrolladores ven que estimar el tiempo requerido para completar una tarea es lo más difícil que se les pide.
Sin embargo, la mayoría de los desarrolladores tienden a tener un manejo razonable (aunque optimista ) de la cantidad de esfuerzo que pueden realizar, durante un período de tiempo determinado.
El problema a menudo es que los desarrolladores luchan por crear una relación entre una tarea y la cantidad total de esfuerzo que se requiere cuando se trata de información incompleta, especialmente si se les presiona para que presenten todas las respuestas por adelantado a una tarea realmente enorme. .
Naturalmente, esto lleva a que las estimaciones de tiempo se desconecten de la realidad y pierdan de vista cosas como el proceso de compilación y la documentación del usuario.
La desconexión tiende a comenzar desde el principio cuando se describe la tarea; y generalmente está compuesto por una persona no técnica que elabora una lista de requisitos sin tener idea de la cantidad de esfuerzo necesario.
A veces, las personas en la alta gerencia especifican tareas e ignoran por completo los problemas del proceso de la compañía; No es raro que la alta gerencia piense que cosas como la definición de pruebas, o la creación de una compilación formal lanzada, o la actualización de un documento de usuario sucede mágicamente sin tiempo ni esfuerzo. necesario.
A veces los proyectos fallan antes de que un desarrollador haya escrito una línea de código porque alguien, en algún lugar, no está haciendo su trabajo correctamente.
Si el equipo de desarrollo no está involucrado en la aceptación de los requisitos o la captura de los criterios de aceptación, entonces eso es un fracaso de la administración, porque significa que alguien que no tiene una comprensión suficiente del código y los problemas técnicos ha comprometido a la empresa a un conjunto incompleto de requisitos, y dejó el proyecto abierto a interpretaciones erróneas, fluencia del alcance, chapado en oro, etc.
Si el equipo de desarrollo está involucrado en la captura y el acuerdo de los requisitos, entonces podría ser una falla del equipo, quienes son responsables de aclarar los detalles (y los criterios de aceptación, es decir, "¿Cómo se ve el producto entregable? ¿Cuándo se hace ?" ) El equipo de desarrollo también es responsable de decir NO cuando hay otros problemas de bloqueo en el camino, o si un requisito no es realista.
Entonces, si los desarrolladores están involucrados en la captura de requisitos:
- ¿Tiene el equipo la oportunidad de sentarse con el gerente de producto para aclarar los requisitos / definición de hecho?
- ¿El equipo hace suficientes preguntas para aclarar los requisitos implícitos / asumidos? ¿Con qué frecuencia se responden satisfactoriamente esas preguntas?
- ¿Exige el equipo los criterios de aceptación (definición de hecho) antes de proporcionar una estimación?
- ¿Qué tan bien se capturan los criterios de aceptación para cada tarea? ¿Es un documento vago con pocos detalles o describe una funcionalidad tangible y una redacción que un desarrollador podría traducir inequívocamente en una prueba?
Lo más probable es que la productividad de su equipo no sea un problema; su equipo probablemente esté haciendo todo el esfuerzo que puedan poner en relación con el desarrollo. Sus problemas reales podrían ser uno o más de los siguientes:
- Requisitos incompletos y vagos.
- Requisitos / tareas que son demasiado grandes en primer lugar.
- Mala comunicación entre el equipo de desarrollo y la alta dirección.
- Falta de criterios de aceptación claramente definidos antes de entregar las tareas al equipo.
- Especificación incompleta o vaga / ambigua de las pruebas de aceptación. (es decir, definición de hecho)
- Tiempo insuficiente asignado para definir / acordar los criterios de aceptación.
- Los desarrolladores no consideraron el tiempo para probar el código de línea base existente o corregir errores existentes
- Los desarrolladores probaron el código de línea base existente pero no detectaron los errores como problemas de bloqueo antes de proporcionar estimaciones sobre los requisitos.
- La gerencia vio los problemas / errores y decidió que no es necesario corregirlos antes de escribir un nuevo código.
- Los desarrolladores están bajo presión para dar cuenta del 100% de su tiempo, aunque posiblemente el 20% (o un número similar) de su tiempo probablemente sea ocupado por reuniones, distracciones, correos electrónicos, etc.
- Las estimaciones se acuerdan a su valor nominal y nadie ajusta el margen de error o contingencia (por ejemplo, "Decidimos que esto debería tomar 5 días, por lo que esperamos que se haga en 8").
- Los estimados son tratados por todos (desarrolladores y administración) como números únicos en lugar de números de "rango" realistas, es decir
- Estimación del mejor caso
- Estimación realista
- Estimación del peor de los casos
... la lista podría durar mucho más que eso.
Debe hacer algunos "hallazgos de hechos" y descubrir exactamente por qué las estimaciones están constantemente desconectadas de la realidad. ¿Es malo el software de línea base existente? ¿Carece de cobertura de prueba unitaria? ¿Sus desarrolladores evitan la comunicación con la administración? ¿La administración evita la comunicación con los desarrolladores? ¿Existe una desconexión entre las expectativas de la administración y las expectativas del desarrollador cuando se trata de "Definición de hecho" ?