ESI UCLM
HomeOpiniónSoftware antifrágil

Software antifrágil

Software antifrágil

Por David Vallejo Fernández (Profesor Titular de Universidad).

Cuenta Taleb, en su libro Antifrágil, que las cosas se clasifican en tres columnas: frágiles, robustas y antifrágiles. Las cosas frágiles aman la tranquilidad y son fáciles de romper, como una fina copa de cristal en una celebración de fin de año. Las cosas robustas, o resilientes, aguantan los choques cuando surge alguna turbulencia y mantienen su estado, como la pequeña empresa que diversifica y mantiene una amplia cartera de clientes. Las cosas antifrágiles van más allá que las robustas, e incluso se benefician de la incertidumbre, el riesgo o la volatilidad, como la madre naturaleza. Taleb ofrece un ejemplo muy visual, recurriendo a la mitología griega, para entender la diferencia entre estas tres cualidades. Damocles es un personaje frágil, puesto que solo es cuestión de tiempo hasta que el pelo de caballo que sujeta la espada que tiene sobre su cabeza se rompa y acabe con su vida. El ave Fénix es una criatura robusta, porque es capaz de renacer de sus cenizas cuando muere. La Hidra, un ser mitológico con forma de serpiente y muchas cabezas, se beneficiaba de situaciones negativas, ya que cada vez que le cortaban una cabeza le nacían dos nuevas.

Resulta interesante reflexionar acerca de esta clasificación en el contexto del software. El desarrollo de software es un proceso complejo, donde el número de interdependencias existentes es elevado, incluso a veces difícil de detectar, y la aparición de un error o bug puede causar respuestas no lineales. Desafortunadamente, a los humanos nos cuesta entender la no linealidad, ya que tendemos a pensar en términos lineales. Si la manifestación de un bug en un sistema informático genera una disminución de un 10% en su funcionalidad, la aparición de dos bugs, relacionados o no, podría generar un efecto mucho mayor, o mucho menor, que el doble del efecto inicial (es decir, que el doble de ese 10%).

El software frágil, al igual que Damocles, vive esperando un fallo que, inevitablemente, aparecerá. El software frágil es enemigo del tiempo. Del mismo modo que la deuda pública de un país lo debilita a la hora de negociar con sus socios, los intereses derivados de un software con deuda técnica provocarán, a largo plazo, mayores costes de mantenimiento. La entropía del software aumentará conforme su mantenimiento se hace más complejo, impactando sobre un diseño inicial que ha de verse modificado eventualmente. 

El software robusto, por otro lado, se diseña considerando que debe enfrentarse al paso del tiempo y que, al mismo tiempo, debe responder adecuadamente ante la presencia de errores. Las pruebas y la depuración de código son las técnicas de referencia para aumentar la robustez del software. Dijkstra afirmó que si la depuración es el proceso de eliminar los errores del software, entonces la programación debe ser el proceso de introducirlos. El código libre de errores no existe. No podemos predecir cuándo se manifestarán con consecuencias indeseables. A veces, lo robusto no es lo suficientemente robusto, y resulta muy complicado, si no imposible, estimar la probabilidad y el impacto asociado a un posible fallo software. La gestión de riesgos ofrece una falsa sensación de seguridad.


Atendiendo a la naturaleza de la antifragilidad, la creación de software antifrágil se beneficiaría de la introducción de estresores o elementos aleatorios. La filosofía de release early, release often, popularizada por Eric S. Raymond en su ensayo La Catedral y el Bazar e inspirada en el modelo de desarrollo del kernel Linux, encaja con esta idea. No todas las catedrales de software se deben construir de forma perfectamente orquestada. El bazar es dinámico, bullicioso, cambiante y está lleno de mercaderes con diferentes enfoques y objetivos individuales. Disponer de usuarios desde el principio incrementa el progreso de un desarrollo moldeado progresivamente a través de un uso aleatorio del software, mejorando la calidad del resultado final. Esta filosofía, que elimina el riesgo de crear software que nadie acabe usando, es uno de los principios del Open Source. El software de código abierto evoluciona gracias al esfuerzo colaborativo de sus programadores, y resiste al paso del tiempo siempre y cuando siga aportando un valor real a sus usuarios.

G. Moreau: Hércules y la Hidra de Lerna (1876)
Comparte con:
Valora este artículo