Todos hemos oído sobre la regla del 80/20, aquella que dice que el 80% de nuestro éxito (efectos) proviene tan solo del 20% de nuestras acciones (causas). Pues bien, esta universal verdad también afecta al desarrollo de software, y en este artículo vamos a desgranar un poco de los fundamentos de esta afirmación.
BPM
Business Process Managment, por su siglas en inglés, es una disciplina de gestión (entre otras cosas) que permite comprender de manera visual los procesos que deben realizarse en un negocio (o en muchos otros lugares). Entre sus cualidades principales está el hecho de poder analizar procesos complejos y hacerlos «simples».
Existen muchas herramientas open source que permiten desarrollar diagramas BPM, la que yo he usado para este artículo es BonitaSoft. Si desean aprender un poco más sobre la gestión de procesos existen muchos tutoriales en internet y libros referentes al tema. Ahora volvamos al tema central.
Proyectos de software
Hoy en día existen muchas metodologías para desarrollar proyectos, están las ágiles, las tradicionales, las mixtas, etc, etc. Un punto que todas tienen en común es la preparación. ¿Qué quiero decir con esto? Que el 80% de tu éxito en este proyecto de software se basará en el primer 20% de todo el proceso, la preparación.
La preparación de un proyecto
Esto es algo lógico que en la realidad se aplica muy poco (como muchas otras cosas lógicas que son ilógicas en la práctica). Cuando hablamos de preparación debemos entender la capacidad de comprender el problema, entender la solución y sobre todo, el proceso que la solución aplica. Una de las cosas que menos se encuentran en proyectos de software poco profesionales es la falta de documentación sobre dicho tema. Esto normalmente aparece en empresas privadas puesto que el deseo de vender supera al proceso de creación.
Como muchos de los que leen estos artículos trabajan o están relacionados con la tecnología, no está de más mencionar que si en algún momento de sus vidas laborales se encuentran con una empresa/proveedor que no cumple con una buena preparación, es casi 80% seguro que el proyecto no va a salir bien.
La abstracción es la clave
Esto es algo que he aprendido de mi tiempo usando GNU/Linux, y que demuestra una y otra vez ser clave en el proceso de creación de software. La capacidad de abstraer problemas para convertirlos en cosas más «simples» es vital para poder generar código elegante, y sobre todo duradero. Y tal vez esta es una de las principales diferencias de los grandes proyectos profesionales y los proyectos que crecen sin control alguno. Los primeros piensan, comprenden y estructuran el proceso mientras que los segundos lo mantienen funcionando sin necesidad de entenderlo.
Stager
Este es el nombre del proyecto que desarrolla el instalador de Gentoo, como pueden imaginar, este es un proceso bastante complejo, puesto que soporta una gran cantidad de arquitecturas. Otro factor a tener en cuenta es la cantidad de configuraciones que soporta, a nivel de kernel, init system, etc. Y les cuento todo esto porque además es mi proyecto de tesis, el cual debo acabar antes de terminar de estudiar. Evidentemente no puedo hacer un programa que contemple absolutamente todas las opciones posibles en tan poco tiempo ( hasta julio del próximo año), pero al menos puedo generar uno que permita instalar de manera muy básica un sistema funcional.
Entendiendo el proceso de instalación
Gracias a las herramientas de BPM, se puede generar un diagrama de proceso que nos permite entender los pasos necesarios para la instalación exitosa de Gentoo en un equipo.
A pesar de contener varios procesos y subprocesos, evidentemente se ha resumido bastante y se puede apreciar que contamos con 18 pasos lineales. Esto es importante porque una aplicación que cuenta con una estructura lineal es sencilla de implementar, y al mismo tiempo se puede generar paralelismo en alguno o varios de los subprocesos en caso de ser necesario.
Otro factor importante es que nos permite abstraer conjuntos de procesos por tipo, por ejemplo, definir un subproceso kernel nos permite saber que existen tareas específicas dentro del mismo que están directamente relacionadas con el proceso de instalación de un kernel de manera exitosa.
De esta manera cada paso «complejo» se convierte en uno «simple» de manera global, sin perder los detalles necesarios. Esto facilita la visibilidad del conjunto sin disminuir el nivel de especificación necesario para cumplir el proceso de manera exitosa. Y tampoco podemos negar que es más sencillo ver la imagen que leer todo el Handbook de golpe
Ahorra tiempo
Otra ventaja evidente es que al no contar con un lenguaje de programación directamente conectado, es posible realizar el análisis de la lógica sin necesariamente perder tiempo en la implementación del lenguaje. Esto es una ventaja comparado con la cantidad de tiempo que se puede invertir en implementar una funcionalidad para al final descubrir que va a ser descartada porque existe una solución más eficiente. Como lo que serían las soluciones en pseudo-código (algo que también es ignorado por muchos «desarrolladores» pero que no debería serlo).
Dirigir proyectos se hace fácil
Teniendo en cuenta estos conceptos, la dirección de proyectos (de cualquier índole) se hace más sencilla, porque enfocamos los esfuerzos donde realmente son necesarios, y si esta parte es hecha de manera correcta, el resto cae por su propio peso. Espero que les ayude a la curiosidad y los motive a investigar sobre el BPM, la algoritmia y quién sabe, tal vez los anime a ayudarme con mi tesis Muchas gracias por llegar hasta aquí y ya nos estamos viendo pronto. Saludos
Hola. Gracias por compartir tus conocinientos. Me parece que es un tema apacionante pero que exige mucho trabajo de investigacion y puesta en practica de los conceptos para poder llegar a interiorizarlos. En un principio el tema es confuso porque uno tiende a asociarlo más por el lado de la identificacion de los requisitos para un sistema y no necesariamente con los procesos de negocio de la empresa, es decir, como funciona la empresa. Al final, creo que trata mas de el papel que desempeñan los desarrolladores de software en la modelación del negocio de la empresa , con el fin de hacer mas eficiente y eficaz la operación del negocio de la misma.
Hola Alexander, muchas gracias por compartir. A decir verdad si es un tema un poco complejo para tratar de resumirlo todo en tan poco espacio, pero si puedo aportar un poco para salir de confusiones con tu comentario 🙂 es cierto que los sistemas deben tratar de resolver requerimientos, eso es el nivel más básico posible de funcionalidad, y en ese punto es verdad que un desarrollador debería centrarse en un nivel más elevado.
El conocimiento de los procesos permite a los desarrolladores presentar sistemas más que suficientes, entendiendo suficiente como algo que cumple al mínimo los requerimientos posibles.
La elegancia del código reside en poder comprender el proceso completo, y generarlo de una manera más profunda, donde se aplica la mejor solución posible, y esto solo es posible al comprender realmente el proceso más que el requerimiento, como tú bien mencionas 🙂
Si lo modelamos un poco en torno al FOSS, implica no solo conocer el requerimiento del software, sino la filosofía que va detrás de este, y saber cómo será mantenido, por quién, y todo ese conocimiento del proceso que no solamente genera una solución eficiente, sino que será posible mantener a lo largo del tiempo 🙂
Muchas gracias de nuevo y saludos.