¿Cómo afectan los plazos ajustados y la presión de programación al TCO y al tiempo de entrega?


9

El padre de un amigo, que es gerente de ingeniería de software, dijo enfáticamente: "La causa número uno de los excesos de programación es la presión de programación".

¿Dónde se encuentra la investigación? ¿Es estimulante una cantidad moderada de presión de programación, o el gerente que mencioné es correcto o incorrecto, o se trata de "cuanta más presión de programación tenga, mayor será el tiempo de entrega y más TCO?" ¿Es una de esas cosas donde idealmente la ingeniería de software funcionaría sin programar la presión, pero prácticamente tenemos que trabajar con limitaciones de situaciones del mundo real?

Cualquier enlace a la literatura de ingeniería de software sería apreciado.


¿Qué significa TCO en este contexto?
Andres F.

Supongo que TCO representa el costo total de propiedad . ¿Es esto correcto?
Thomas Owens

@ThomasOwens Entonces adiviné, pero ¿tiene sentido en el contexto de los cronogramas y presupuestos de los proyectos? Pensé que TCO se refería a la propiedad de un producto, no al desarrollo.
Andres F.

@AndresF. Tengo entendido que es integral: diseño, desarrollo, envío, mantenimiento y actualizaciones. Pero no soy un experto (o incluso tengo una cantidad considerable de experiencia) en el aspecto financiero de las cosas.
Thomas Owens

@ThomasOwens A juzgar por ese enlace de Wikipedia, esa no es la impresión que tengo. El desarrollo definitivamente no se menciona (¡haga una búsqueda!), A pesar de que la tecnología y los productos de software sí lo son (y preocupaciones relacionadas, como la implementación y el mantenimiento). El TCO está relacionado con la propiedad , ¡incluso lo dice en el nombre! Tengo entendido que el TCO es una consideración al elegir qué producto comprar , no qué producto construir .
Andres F.

Respuestas:


5

La causa número uno de los excesos de programación es la presión de programación.

Estoy en desacuerdo. La causa número uno de los excesos de programación es un horario que no refleja la realidad, y de una manera demasiado optimista. La naturaleza humana dicta que cierta presión de programación es una necesidad absoluta. Solo un par de problemas que surgen sin cierta presión de programación son problemas interesantes y "lo mejor es enemigo de lo suficientemente bueno". Nosotros, los técnicos, preferiríamos trabajar en los problemas que nos interesan en lugar del problema que debe resolverse para que el producto salga por la puerta. Elimine los plazos (también conocido como presión de programación) y trabajaremos en esos problemas interesantes, en detrimento del producto.

Otro problema es que el producto debe ser "lo suficientemente bueno". No necesita ser perfecto. Los ingenieros y científicos ven los supuestos simplificadores que no son del todo válidos en algunos casos especiales. Los diseñadores gráficos ven problemas de alias que son invisibles para todos los demás. Los programadores ven verrugas en sus arquitecturas que tienen cero impacto en el comportamiento del producto. "Lo mejor es enemigo de lo suficientemente bueno", lo que significa que a veces tenemos que vivir con esos problemas que no son realmente problemas.

La falta de presión de programación conducirá a un producto con un costo de propiedad muy alto. Lo que causa los excesos son los malos horarios. Esto puede venir en una variedad de formas. Es necesario subestimar el esfuerzo, no tener en cuenta las dependencias y agregar personas a un proyecto que ya está retrasado. Sólo para nombrar unos pocos.


+1 Además, programar la "presión" a veces, aunque no siempre, refleja preocupaciones comerciales reales. No hay forma de evitar eso. "Siempre que se haga" no es una fecha de vencimiento aceptable para muchos proyectos. De hecho, si todo lo que se puede prometer como fecha objetivo es "cuando sea", entonces una posibilidad aceptable es cancelar el proyecto.
Andres F.

Steve McConnell considera los "horarios demasiado optimistas" como uno de los errores clásicos de la práctica de desarrollo de software y una fuente importante de problemas de proyecto; esta sería la causa de los excesos de programación en primer lugar. stevemcconnell.com/rdenum.htm
Solo tú

2

El tiempo, la calidad, los recursos y la cantidad de funciones están todos conectados. Puede arreglar cualquiera de ellos y obtener el último como resultado de su proceso de programación.

La forma en que se formula su pregunta implica que el tiempo es su variable, y las otras tres (la calidad, los recursos y la cantidad de características) son todas fijas. La pregunta puede beneficiarse al cambiar un poco la perspectiva al fijar el tiempo * y dejar que la calidad flote.

Ahora su pregunta es la siguiente: "¿Las restricciones de tiempo afectan negativamente la calidad"? La respuesta a esta pregunta es un rotundo "Sí": la investigación confirma que a las personas les va peor bajo la presión de los problemas relacionados con las matemáticas ** que no han practicado ampliamente antes (es decir, lo han intentado cincuenta veces o más), por lo que el padre de su amigo tiene razón.


* Un gerente superior de una de mis compañías anteriores solía decir que el tiempo es una entrada al proceso de programación, no su salida. Sin embargo, estaba dejando que flotara la cantidad de características, insistiendo en la calidad uniformemente alta de los entregables.

** Aquí hay una suposición implícita de que la programación es similar a hacer matemáticas; Creo que esta suposición es justa.


2

Cuanta más presión de programación tenga, mayor será el tiempo de entrega y más TCO?

Bueno, cualquier programación realizada por el gerente sin discutirlo con el líder técnico es propensa a eso. Es muy obvio que la programación o las estimaciones que NO están basadas en hechos son propensas al fracaso .

Además, los gerentes que evitan la programación basada en evidencia también se están moviendo hacia el próximo fracaso de su proyecto. Hay varios estudios sobre este tema y la programación basada en métricas es la forma correcta de seguir.


2

Programación de derecha a izquierda.

Alguien en la gerencia siempre piensa que son Steve Jobs con su famosa zona de distorsión de la realidad. Hasta que alguien en el desarrollo de productos los eduque, los gerentes no técnicos a menudo pueden tener una visión sobre la programación que es tan sofisticada como la primera película francesa "Le voyage dans la lune" ("Un viaje a la luna") era para la ciencia de los cohetes.

El problema ha estado presente por un tiempo. Fred Brooks habla sobre la estimación sin tripas en Mythical Man-Month . Barry Boehm habla de ello en sus propuestas para un enfoque de gestión de Theory-W . Más recientemente, Steve McConnell (autor de Code Complete ) enfoca el concepto de negociación de principios en "Cómo defender un programa impopular" .

Agile empuja el alcance de los proyectos a un lugar donde sea altamente visible. El Manifiesto Ágil llama a la "colaboración del cliente sobre la negociación del contrato". También, espero, empodera a las personas responsables. El juego de planificación evita que los interesados ​​no técnicos coaccionen a los desarrolladores con las promesas que hicieron hace mucho tiempo que han sido invadidas por cambios en los requisitos o nuevos descubrimientos.

Si su organización rechaza ágil, existen excelentes métodos relacionados con la calibración de estimaciones para volver a ajustar un cronograma basado en el valor ganado . No creo que el valor ganado haga un gran trabajo con algunos de los problemas reales con la predicción, pero puede ayudar a disipar las ilusiones sobre la velocidad de los proyectos y la arpa en las estimaciones que tenemos como hechos.

Hay un dicho que dice que cuanto antes comience a codificar, más tardará. La presión del horario puede tener el efecto de forzar el cambio de metodología. A veces es de cascada a "código como el infierno". Esto puede tener un impacto negativo en la calidad, por no mencionar la moral cuando los trabajadores no pueden hacer lo mejor y sus compañeros y futuros mantenedores los ven en su peor momento, no en su mejor momento. En un entorno como este, cierto grado del caos puede controlarse con control de fuente, creación y prueba diaria (o integración continua y prueba de unidad), revisiones de código, utilizando un equipo experimentado y altamente calificado, resistiendo la tentación de agregar personal tarde el proyecto, y el viejo standby, horas extras.

Otras veces, el cambio de metodología puede ser de cascada a incremental iterativo. Mi experiencia ha sido que la administración tardó en adoptar a Agile. Pero luego, después de un tiempo, hubo una nueva administración que fue más solidaria con Agile. Time boxing puede ser como presupuestar: puede obligarnos a pensar en el mejor uso de un recurso limitado. Scrum tiene dos cuadros de tiempo: uno es diario para comentarios entre los miembros del equipo, el otro es mensual para el sprint a través de la lista de grabación.

Diagrama de Scrum - Licencia Creative Commons ver

Licencia Creative Commons: consulte http://en.wikipedia.org/wiki/File:Scrum_process.svg


¡+1 para agregar no solo una referencia, sino múltiples referencias!
Christos Hayward el

1

No necesita literatura de ingeniería de software. Probabilidad conceptual y estadísticas, de pregrado, es todo lo que necesitas.

Una estimación es solo eso, una estimación. No es preciso, no está garantizado. Para cualquier estimación, hay alguna probabilidad de que lo supere o lo golpee en la nariz, y cierta probabilidad de que lo supere.

Probabilidad 101: p (underrun o hit exactamente) + p (overrun) = 100%.

Un horario basado en una estimación tiene exactamente las mismas características.

No se puede eliminar la incertidumbre por completo. SIEMPRE habrá alguna probabilidad de desbordamiento. Puede ser pequeño, la probabilidad de que Irán destruya su edificio de oficinas, pero todavía está allí. Lo mejor que puede hacer es mirar TODO y reducir la incertidumbre tanto como pueda. Una vez que haya hecho eso, tendrá suerte, si tiene suerte, tendrá un horario con poca incertidumbre y un 50% de probabilidad en cada lado.

Ahora, piénselo: si aplica el cronograma, la probabilidad de que no se ejecute correctamente o se cumpla exactamente el cronograma disminuye. El total todavía tiene que sumar el 100%. ¿A dónde va esa probabilidad? Respuesta, entra en la probabilidad de desbordamiento.

General Dynamics / Fort Worth Division aprendió esto de la manera difícil. Hicieron su estimación inicial para el desarrollo de F-16C / D, y lo enviaron a la cadena alimentaria. Alguien más alto cortó arbitrariamente un año y lo envió a la Fuerza Aérea. Como resultado directo, GD / FW se retrasó un año en la prueba de vuelo, y la Fuerza Aérea NO estaba contenta. (Tenga en cuenta que "un año de retraso" estaba de acuerdo con el cronograma revisado, lo que significa que el cronograma original era DERECHO AL OBJETIVO).


La mejor respuesta hasta ahora: la programación y la estimación son dos cuestiones completamente diferentes. Demasiada gente no logra comprenderlo.
mattnz

1

Creo que una cierta presión en un proyecto está bien porque ayuda a mantener el enfoque.

Sin embargo, si la presión no es realista, o si la comunicación entre la gerencia y el personal técnico no funciona correctamente, sí, existe el riesgo de que la presión de programación resulte en mala calidad y / o entrega tardía.

Un desarrollador experimentado sabrá que no se espera que él / ella produzca la solución perfecta, sino más bien una solución que sea lo suficientemente buena . Entonces, la estimación dada por dicho desarrollador ya reflejará su comprensión de lo que es lo suficientemente bueno para un proyecto en particular.

Existen muchos factores que influyen en la definición de lo suficientemente bueno.

Por ejemplo, ¿cuántos meses dura el proyecto? Si el proyecto dura un año, puede escribir un prototipo de ese módulo particularmente difícil con bastante rapidez al comienzo del proyecto y luego tiene varios meses para probarlo y depurarlo como una actividad paralela para el desarrollo de otros módulos más rutinarios. (Puede dejar que el módulo madure durante varios meses hasta que sea lo suficientemente bueno como para no tener que intentarlo desde el principio). Creo que esta estrategia es muy efectiva, pero necesita un gerente que confíe en usted y le permita Mantenga un proyecto abierto durante meses. Otro administrador (desconfiado) podría presionarlo para que termine ese módulo lo antes posible (no importa si tendrá que arreglarlo más tarde y si este enfoque finalmente le costará mucho más tiempo en total).

Otro ejemplo: el proyecto es para un producto que solo tendrá una versión. Luego, puede intentar hacerlo rápidamente y confiar en pruebas exhaustivas para asegurarse de que el producto funcione como se espera ( lo suficientemente rápido y sucio ). Por otro lado, si el producto va a tener dos o tres lanzamientos, mejor dedique algún tiempo a diseñarlo, para evitar una extensa reescritura del código para lanzamientos posteriores. (En este caso, rápido y sucio no es lo suficientemente bueno porque el tiempo total de desarrollo durante las tres versiones es mayor).

En pocas palabras, creo que la mala comunicación entre la gerencia y el personal técnico y la falta de una comprensión común de lo que es lo suficientemente bueno para el proyecto en cuestión puede conducir a una presión de programación excesiva, lo que resulta en mala calidad / entrega tardía.

Nunca hay tiempo suficiente para hacerlo correctamente la primera vez, pero siempre hay tiempo suficiente para arreglarlo más tarde.


+1: "Nunca hay tiempo suficiente para hacerlo correctamente la primera vez, pero siempre hay suficiente para arreglarlo más tarde". Esa pregunta ha estado en mi mente acerca de si tomar el doble de tiempo inicialmente para hacerlo bien, más un tiempo moderado para abordar defectos, tiene un TCO sustancialmente menor que un trabajo urgente que lleva menos de la mitad del tiempo inicialmente, y luego enfrentar la música en el consecuencias de un trabajo rápido al principio.
Christos Hayward el

Como señalé, si solo tiene una versión y tiene un buen departamento de pruebas, su producto puede estar bien incluso si ahorra tiempo en la codificación: el código puede ser complicado, pero las pruebas exhaustivas aseguran que funcione como se esperaba. Pero si tiene versiones posteriores en la misma base de código, es posible que deba volver a escribir gran parte del código para la segunda y tercera versión. En el último escenario, puede ahorrar tiempo en varias versiones al diseñar su código con más cuidado la primera vez.
Giorgio
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.