Velocidad de iteración vs Calidad de iteración
Estoy leyendo
Simple Architectures for Complex Enterprises de Roger Sessions. No me queda mucho así que en breve espero que tengáis una reseña sobre el libro aquí, pero hoy voy ha hablaros de una cuestión que el libro trata de manera muy amena: la velocidad de iteración vs la calidad de iteración.
Cuenta Roger Sessions en su libro una curiosa historia para ilustrar la diferencia que existe en el desarrollo de software entre iterar buscando la mayor velocidad de iteración o iterar buscando la mayor calidad de iteración. Este es un tema que ya he tratado con anterioridad en este blog: No persigas tu cola..., pero la historia que cuenta Roger Sessions es realmente ilustrativa.
El Coronel Jhon Boyd, uno de los grandes pilotos de la época de los primeros reactores de combate y estratega reconocido, estudio una anomalía en la luchas aéreas entre los dos grandes cazas de la década de los 50. Cito aquí la historia tal y como Roger Sessions la cita en su libro, traducida al español lo mejor que he sido capaz, además añado un video sobre el tema (en inglés), que no solo de informática vive el hombre:
"El Coronel John Boyd estaba interesado no solo en cualquier lucha aérea, sino específicamente en los combates entre el MiG-15s y el F-86s. Como ex-piloto y consumado diseñador de aeronaves, Boyd conocía estos dos aviones perfectamente. Él sabía que el MiG-15 era mejor técnicamente que el F-86. El MiG-15 podría subir más rápido que el F-86. El MiG-15 puede girar más rápidamente que el F-86. El MiG-15 tenía una mejor distancia de visibilidad. El F-86 tenía dos puntos a su favor. En primer lugar, tenía una mejor visibilidad lateral. Mientras que el piloto de MiG-15 podía ver más lejos, el piloto de F-86 podría ver un poco más por los laterales. En segundo lugar, el F-86 tenía un control de vuelo hidráulico. El MiG-15 tenía control de vuelo manual.
La hipótesis más común por parte de los diseñadores aéreos era que la maniobrabilidad era el componente clave a la hora de ganar duelos aéreos. Evidentemente, el MiG-15, con su giro más rápido y su capacidad para escalar más rápido, podía mejorar la capacidad de maniobra del F-86.
Pero hubo un pequeño problema con todo esto. A pesar de que el MiG-15 era considerado un avión superior por los diseñadores de aviones, el F-86 era preferido por los pilotos. La razón por la que era preferido por los pilotos fue simple: en los duelos uno-a-uno entre MiG-15 y F-86, el F-86 ganó nueve de cada diez veces."
¿Cómo un avión inferior puede ganar de manera consistente a un avión superior? Era la pregunta que surge rápidamente. Boyd, tenía una teoría:
"Boyd concluyo que la cuestión determinante a la hora de ganar un duelo aéreo no era observar, orientarse, planear o actuar mejor. La cuestión determinante para ganar un duelo aéreo era observar, orientarse planear y actuar más rápido. En otras palabras, como de rápido uno podía iterar. La velocidad de iteración, sugirió Boyd, bate a la calidad de iteración.
La siguiente pregunta que se realizo Boyd es esta: ¿por qué el F-86 iteraría más rápido?. La razón, concluyo, era algo que nadie había pensado que fuese particularmente importante, el hecho de que el F-86 contase con un mando de vuelo hidráulico mientras que el MiG-15 tenía un mando de vuelo manual. Sin ayuda hidráulica, costaba un poco más mover el mando de vuelo del MiG-15 que el del F-86. Aunque el MiG-15 girase más rápido (o pudiese llegar más alto) cada vez que el mando era movido, la cantidad de energía necesaria para mover el mando era mayor para el piloto del MiG-15. Con cada iteración, el piloto del MiG-15 sufría un poco más de fatiga que el piloto del F-86. Según se iba fatigando un poco más, tardaba un poco más en completar su ciclo de observar, orientarse, planear y actuar. El piloto del MiG-15 no perdía por que pilotase peor. Perdía por que completar el ciclo de lucha cada le costaba más tiempo."
De esta observación se deriva la Ley de la Iteración de Boyd: la velocidad de iteración bate a la calidad de iteración.
Hoy en día todas las metodologías de desarrollo son iterativas. No hay otra manera de desarrollar software que en iteraciones en las que se repite la secuencia de combate del desarrollo de software: conocer el problema, analizarlo, implementar la solución, construir, probar (con diferentes variantes). La diferencia es que unas metodologías ponen el peso en la calidad de iteración (CMMI, RUP) mientras que otras ponen el peso en la velocidad de iteración (XP, Scrum). ¿Alguien duda de quien está ganando más combates?. La idea es clara, si te vas a equivocar, equivócate pronto, rectifica rápido en lugar de tratar de no equivocarte por todos los medios y quedarte sin tiempo para rectificar. A veces se describe esto como dinero por flexibilidad en lugar de dinero por información. Las metodologías guiadas por un plan, consumen muchos recursos trantando de asegurar las maniobras adecuadas, las metodologías ágiles tratan de realizar las maniobras de manera rápida y razonablemente adecuada. Si hay problemas siempre se puede rectificar… si el coste de rectificar es razonable y si tienes la ágilidad necesaria para no morir en el intento.
La esencia del software es iterativa, como la esencia del combate aéreo y no deja de ser curioso como ese énfasis en la iteración rápida aparece en todas las buenas practicas de la ingeniería del software, igual que en combate aéreo. Perseguimos encontrar rápido los errores, intentamos incorporar temprano el feedback de los usuarios, intentamos construir el software de manera frecuente y minimizando el coste de construirlo, etc…
¿Qué opinión os merece esta reflexión? ¿Mejor primar la velocidad de iteración o la calidad de iteración?