Los constantes y arriesgados avances en el mundo nunca antes habían sido acompañados, hasta ahora, desde profundos y complejos actos de fe. Otrora, si bien los actos de fe eran preconcebidos o utilizados para bloquear el progreso, hoy en día quizá pudieran considerarse como una herramienta para conducir un avance mundial tan inevitable como peligroso en todas las áreas que se quieran considerar, en especial, y tema que nos atañe, el novel mundo de la tecnología(…)
Es necesario comenzar nuestro viaje con la búsqueda más sencilla y pragmática de este término. En Wikipedia [1], un acto de fe, no es más que «la confianza o creencia en algo o alguien». Es una especie de «aceptación de un enunciado declarado por alguien con determinada autoridad, conocimiento o experiencia». Y muy importante: «(…) va de la mano con la confianza».
Dicho esto, y más allá de debates meramente filosóficos, que no me corresponden a mí juzgar, cuando cogemos un avión, un tren, un vehículo, vamos de compras y un probablemente infinito etcétera, estamos haciendo actos de fe. De la misma forma y en la misma medida, cuando compramos por internet, revisamos el correo electrónico o comprobamos nuestras cuentas bancarias, seguimos haciendo actos de fe. Si bien es cierto, aunque muchas de estas acciones se amparan bajo estudios y pruebas científicamente comprobadas o rigurosamente legales, no están exentas de fallos, y todos conocemos lo relativo que puede resultar a veces cualquier afirmación.
En el mundo existente entre los negocios y la ingeniería del software, nada más cierto que los actos de fe. Esto, en gran medida, proviene de de la relación entre la complejidad del software y la complejidad de las reglas de los nuevos negocios y mercados.
Pareciera que con el aumento de las nuevas formas de hacer negocio, y por ende las nuevas necesidades de soporte tecnológico, el software se ha convertido en una tarea de contrucción y gestión compleja. Pero además, se puede observar un fenómeno aún más interesante:
Podemos ver que aún cuando la complejidad del software comienza a disminuir, la complejidad del negocio sigue aumentando. Por tanto, mientras las nuevas formas de negocio conducen a que el software sea más complejo, por otro lado, los ingenieros mediante abstracciones, servicios, metodologías, herramientas, y frameworks, logran reducir la complejidad. Pero a su vez esto promueve negocios más exigentes, por ende, más complejos.
De estos comportamientos puede desprenderse una aproximación: a pesar de que la complejidad del software varíe, la tendencia de la complejidad de negocio parece encontrarse siempre en crecimiento.
Para ilustrar, recordemos por ejemplo, los desarrollos de sitios web que comenzaron en el año 2000. Durante el comienzo, se desarrolló pensado en cubrir las espectativas necesarias para aquel entonces: páginas estáticas, gestión de contenidos, alguna que otra lógica de negocio usando bases de datos relacionales, y aunque con excepciones, poco más. La ingeniería del software comenzó el desarrollo de frameworks web para dar respuesta y soporte a estas necesidades. De aquí nacieron frameworks como Spring, Simfony, Zend, Rails, Django, y un largo etcétera. Lejos de pensar que se había encontrado la panacéa para lidiar con el mundo del desarrollo web, los requerimientos del negocio se tornaron más complejos: comercio electrónico, redes sociales, cloud-computing, servicios REST, etc. Cuando en el 2008, era toda una azaña hacer login con alguna red social y usar sus servicios, hoy en día es prácticamente lo mínimo que debe tener una web. Otra prueba más de que tal como decía Pressman[2], el software se deteriora, no se desgasta.
Esta importante relación entre la complejidad de los negocios y la complejidad del software, ha dado lugar a la construcción de frameworks que se abstraen de tal manera, que resulta imposible conocer todas las partes que lo componen y lo hacen funcionar.Como si se tratase un acto de mágia o un acto de fe, los desarrolladores debemos creer y confiar en desarrollos de terceros, y debemos hacerlo, porque de otra manera el coste-beneficio de un desarrollo sin frameworks, en muchas situaciones, se aproximaría a lo absurdo. Además, por aquello de que “dos cabezas piensan más que una”, generalmente las soluciones de terceros suelen ser más robustas. Así, pareciera que hacer uso de estas herramientas –paquete de fe incluido– es la solución, pues nos abstraen de los problemás técnicos y nos permiten enfocarnos en el valor negocio, aveces muy sobrevalorado, dicho sea de paso.
¿Pero qué sucede cuando aparece un error del que no somos responsables o no tenemos control? ¿Hasta qué punto se puede absolutizar la robustez de pruebas de aplicaciones de terceros? ¿Son actos de fe lo que hacemos cuando usamos frameworks? ¿Están justificados? ¿ Se ha vuelto la ingeniería del software, en cierta medida, un acto de fe?¿ Siempre lo fue?
En este encrucijada, nos encontramos constantemente muchos ingenieros del sotware, luchando entre las consecuencias imprevistas y los actos de fe, como si de algo científico se tratase. Buscando respuestas, donde solo nacen preguntas.
REFERENCIAS
[1] http://es.wikipedia.org/wiki/Fe
[2] Pressman, Roger. Software Engineering: A Practitioner’s Approach.(2009)
Nota: Los gráficos y la información relacionada con la complejidad del software VS la complejidad del negocio, han sido basados en experiencias personales y consultas en fuentes no oficiales.