Estoy convencido de que la cantidad de trabajo de rutina en el desarrollo de software es, y debería ser, relativamente pequeña, si no insignificante, y que este es el problema fundamental de la estimación de software.
Permítanme describir cómo llego a esta conclusión y decirme si la argumentación tiene fallas graves:
Todo lo que se puede estimar con alta precisión es el trabajo de rutina, lo que significa cosas que se han hecho antes. Todos los demás tipos de trabajo que implican investigación y creatividad no pueden estimarse realmente, al menos no con una precisión de, digamos, +/- 20 por ciento.
El desarrollo de software se trata de evitar tareas repetitivas. Uno de sus principios básicos es SECO (no se repita). Cada vez que un programador se encuentra haciendo cosas repetitivas, es hora de encontrar una abstracción que evite esta repetición. Estas abstracciones pueden ser cosas simples como extraer el código repetido en una función o ponerlo en un bucle. También pueden ser más complejos como crear un lenguaje específico de dominio. En cualquier caso, implementarlos implicará investigación (¿alguien ha hecho esto antes?) O creatividad.
De estos dos puntos extraigo la conclusión anterior.
En realidad, me he estado preguntando durante bastante tiempo por qué esta relación no se menciona en ninguna otra discusión, publicación de blog o artículo sobre estimación de software. ¿Es demasiado teórico? ¿Están equivocados mis supuestos? O es demasiado trivial, pero entonces, ¿por qué la mayoría de los desarrolladores que conozco creen que pueden hacer estimaciones con una precisión de +/- 20 por ciento o mejor?
fuente
Respuestas:
En cualquier proyecto dado, esto puede ser cierto. Sin embargo, si trabaja en proyectos múltiples y similares para diferentes compañías a lo largo de los años, puede encontrarse 'resolviendo' básicamente el mismo problema muchas veces con solo pequeñas variaciones.
Por ejemplo, he escrito capas de acceso a datos tantas veces que ahora prefiero hacerlo "a mano" en lugar de usar el popular ORM del mes. Es más rápido y fácil para mí lidiar con los 'problemas de rutina' con soluciones conocidas que encontrar y resolver nuevas peculiaridades en componentes de terceros.
Obviamente, podría escribir mi propio ORM para simplificar el código repetitivo sin agregar las peculiaridades desconocidas en el sistema de otra persona, pero este código pertenecería a la compañía para la que estaba trabajando en ese momento, y otros desarrolladores lo encontrarían tan peculiar como cualquier otro ORM de terceros.
De manera similar, en mi experiencia, la mayoría de la programación es la automatización de los procesos comerciales y, aunque a cada negocio le gusta pensar que sus procesos son únicos para ellos; En realidad no lo son.
¡No quiere decir que la estimación sea fácil! Es más fácil, pero creo que en estos días el problema de la estimación se debe a la insuficiencia de los requisitos y no al tiempo dedicado a la codificación.
Los requisitos tienden a caer en tres categorías:
Estos tienden a ser los más fáciles de estimar, ya que cuando ocurre un problema difícil e inesperado, simplemente puede cambiar los requisitos a algo funcionalmente equivalente y evitar el problema.
Súper rápido de hacer y, nuevamente, fácil de estimar. ¡Pero! El requisito está obligado a cambiar. "Hmm no, no lo dudes, prueba este otro rojo" o "¡Espera! ¡Solo quise decir en esa página!" así que el lapso de tiempo real de "cuánto tiempo hasta que esté satisfecho con el color del encabezado" no tiene nada que ver con las estimaciones de codificación
Aquí la multitud de suposiciones no declaradas, "por supuesto que querrá un logotipo diferente", "debe tener un desplazamiento infinito", "debe ser escalable a mil millones de usuarios". controle efectivamente la estimación. O el desarrollador piensa en todo y empuja la estimación más allá de las expectativas "1 hora de hombre de mil millones", o piensa / asume que solo se requieren las características básicas y da una estimación demasiado baja. "Oh, una semana o dos, supongo que solo quieres poner Facebook en un iframe ¿verdad?"
Con experiencia, la codificación es muy rápida, pero los requisitos de diseño son (por lo general) difíciles, y esto es cada vez más necesario para los no codificadores. Con metodologías ágiles que aumentan la velocidad de codificación al trasladar esta responsabilidad al 'negocio' en lugar de a los desarrolladores.
fuente
Porque estimamos nuestra paciencia con el problema mucho más que el problema real.
Si voy a animar una pelota que rebota, podría pasar un día, una semana, un mes o un año y seguir teniendo una animación de una pelota que rebota. Espero que se vea mejor cuanto más tiempo pase en él, pero en cierto momento estoy siendo ridículo.
La cantidad de esfuerzo que puse para hacer que la pelota rebote es una función del tiempo que es razonable gastar en ella. Si mi nivel de habilidad no es suficiente, puedo terminar con una pelota que simplemente se queda allí. Pero cuando llegue la fecha límite, ¿debería dejarla pasar o al menos obtener una pelota en la pantalla? Waterfall insistió en que la pelota rebotara, por lo que el horario se deslizó. Agile dice que solo saquen la pelota. Al menos descubriremos cuánto le importa a la gente el rebote. Entonces la calidad se deslizó.
Trato de asegurarme de que mis bolas rebotan, pero cuando se acerca la fecha límite, es mejor producir una bola estática que nada. Por lo tanto, calculo el tiempo en función de lo que parece un tiempo razonable para dedicarlo a un problema antes de hablar sobre alternativas. A veces la pelota simplemente no va a rebotar. A veces eso está bien. Desaparecer por un mes no está bien.
fuente