Miércoles 27 Julio 2022
Estrategias para la innovación de productos software
Cuando nos enfrentamos a un proyecto software, uno de los retos más relevantes es la incertidumbre que tienen la gran mayoría de estos proyectos, sobre todo en lo que se refiere al negocio (qué debemos construir) y a la tecnología (cómo debemos construirlo). El reto es mayor cuando se trata de un proyecto de I+D donde el objetivo es la obtención de una innovación que permita adquirir una ventaja competitiva. Los proyectos (o las operaciones) software pueden ser de diferente naturaleza, pero no siempre nos planteamos cuál es la estrategia (DevOps, Lean Inception, Personas, XP, Scrum, OKR, etc.) o la combinación de estrategias más adecuada para llevarlos a cabo de forma eficiente y eficaz. En los últimos años, han surgido nuevos enfoques ("low code" y "no code") [1][2] y herramientas (por ej. Appinventor [5] , Budibase [7] , WebRatio [4] , etc.) que permiten construir software con pocos conocimientos tecnológicos, así como herramientas basadas en IA que generan código de forma automática (GitHub copilot [18] o OpenAI [19] basadas en GPT3). Gartner estima que, en 2025, 7 de cada 10 aplicaciones estarán desarrolladas con este tipo de tecnologías (en 2020, el desarrollo con este tipo de tecnologías era menor a un 25%).
Figura 1. Evolución de la demana de perfiles Low-Code en una selección de países europeos (Fuente: [3])
Si la capacidad de construir y explotar productos software aumenta, las empresas más competitivas serán aquellas que tengan una mayor capacidad al explorar o descubrir nuevas innovaciones en forma de productos o servicios. Para entonces será necesario entender qué implica "innovar" y cuál es la estrategia más eficiente y eficaz para conseguirlo.
¿Qué tecnologías existen para automatizar el desarrollo y asistir al desarrollador?
Actualmente existen tecnologías (artefactos o herramientas software) que son ampliamente conocidas y que nos permiten automatizar el desarrollo y asistir a los desarrolladores en actividades de construcción del software. Veamos a continuación, con un poco más de detalle, algunas de estas tecnologías Low Code/No Code y de tecnologías de IA que ya se están usando como asistente o ayuda al desarrollo así como el origen de las mismas.
Low Code / No Code
La generación de código de forma automática no es nueva, tiene más de 30 años, y en función de si es 100% parametrizable (No Code) o no (Low Code), tendría su origen, bien en las técnicas y herramientas desarrolladas en los últimos años sobre las denominadas líneas de productos software [20] (con un enfoque más orientado hacia el No Code) o en la ingeniería guiado por modelos (con un enfoque más orientado hacia el Low Code), que incluye además los trabajos realizados sobre ingeniera web guiada por modelos [21], qué es donde nos centraremos principalmente para entender cómo han evolucionado estas herramientas hasta el día de hoy (principalmente, desde el paradigma de la ingeniería web guiada por modelos).
Figura 2. Comparativa entre segmentos No-Code y Low-Code(Fuente: [3])
En Rossi Et Al 2016 se describe el estado del arte de técnicas y herramientas que permiten, a partir de modelos, generar código. Durante todo este tiempo, surgieron técnicas y herramientas con diferentes características, unas se centraban más en el modelo de datos, otras se centraban en el modelo de navegación, otras tantas en el modelo de presentación o la interfaz. Pocas han sido las técnicas y herramientas que han sobrevivido, el tiempo, sin duda, actúa de filtro, y algunas de ellas de las mencionadas en RossiEtAl parecen haber sobrevivido a todos estos años. Prueba de ello es la herramienta Web Ratio que ofrece soporte a las técnicas que se han investigado y que han conseguido ser explotadas como productos/servicios en el mercado. En el año 2000, surge WebML que terminó evolucionando hacia una técnica denominada IFML (estándar de la OMG [22]) y que incluían una serie de ventajas que lograron sobrevivir hasta el día de hoy. Ya no se habla de métodos de ingeniería web guiados por modelos, sino de “Low-code”. El concepto es el mismo, solo ha cambiado el nombre. Quizás fruto de esa exposición al mercado con una herramienta comercial como WebRatio, podría ser el motivo por el cual, la herramienta posee una serie de características que le dan ciertas ventajas competitivas. La mayoría de estas características pueden consultarse en la web de la propia herramienta [4], donde puede observarse una dinámica de trabajo iterativa-incremental muy orientada hacia las siguientes actividades: (1) Diseño de un prototipo, (2) Validación del prototipo con usuarios, si es validado, se diseñan el resto de modelos, (3) Generación del software a partir del prototipo, (4) Integración con otros sistemas empresariales (si es necesario), (5) Vuelta a la actividad 1. En este contexto, como si se tratara de un proceso de selección natural, en los últimos años han surgido una gran diversidad de herramientas relacionadas (Appinventor [5], Budibase [7], WebRatio[4], Mendix [8], Zoho [12], Saltcorn [6], Velneo [9], Appian [13], Microsoft PowerApps [10], Convertigo [14], Oracle VisualBuilder [11], Joget [15], Figma [16], Debuild [17]) que tienen características comunes a WebRatio. La mayoría de las herramientas existentes se centran principalmente en el diseño de las interfaces y el uso de componentes funcionales. En todas ellas se utilizan interfaces gráficas y configuraciones fáciles de usar para crear las soluciones. No obstante, si la solución que queremos diseñar y construir es 100% parametrizable (No Code), entonces nos permiten generar una versión completamente funcional de forma automática. En cambio, si la solución incluye funciones más complejas (Low Code), requerirán que llevemos a cabo trabajos manuales de diseño y desarrollo de código. Aún así, ¿Existen herramientas que nos ayuden a generar estos diseños y la construcción de código?
IA como assistente:
En la sección anterior, hemos hablado de técnicas y herramientas que nos permiten generar software de forma automático. No obstante, cuando las soluciones no son 100% parametrizables, aún es necesario que llevemos a cabo trabajos de diseño y desarrollo del código de forma manual. Sobre esto, ya existen herramientas que nos ayudan en estas labores. Prueba de ello es Github copilot, que es una herramienta desarrollada por Github y OpenAI que, basadas en el modelo de inteligencia artificial GPT3, permite a asistir a los desarrolladores en entornos de desarrollo como Visual Studio Code, Visual Studio, Neovim o JetBrains. En la web oficial de GitHub se indica que la productividad aumenta entorno al 30% y que, de media, los usuarios aceptan el 26% de todas las finalizaciones mostradas por GitHub Copilot y más del 27% de los archivos de código que genera la herramienta. Además, en ciertos lenguajes como Python puede llegar incluso al 40%. En esta misma línea, hay lenguajes donde estos porcentajes son similares. Puedes encontrar más información en la web oficial de GitHub Copilot [18].
Además, OpenAI dispone de una API (versión beta) que es capaz de generar cualquier cosa que necesitemos de forma automática. Por ej. puedes pedirle que te genere la función de Fibonacci o, por ejemplo, una lista de preguntas para un seminario sobre estrategias de innovación.
Figura 3. Ejemplo de uso de la API de OpenAI (Fuente: elaboración propia)
Y si todo esto parece ya increíble, nos encontramos ya con soluciones que integran los motores anteriores de inteligencia artificial con las herramientas Low Code y No Code anteriores, siendo capaces de generar un prototipo o un conjunto de interfaces a partir de una descripción sobre la misma. Prueba de ello son los plugins desarrollados para la herramienta Debuild (ver Figura 4) o Figma [23].
Figura 4. Generación de interfaces con Debuild (Fuente: [17])
Si lo anterior no fuera suficiente, una red neuronal denominado DALL-E [24], ya es capaz de crear una gran variabilidad de imágenes solo partir de conceptos que sean expresados en lenguaje natural. Además, Microsoft también está apostando por este tipo de tecnologías, prueba de ello es su modelo NUWA INFINITY [27], que es capaz incluso de generar videos a partir de imágenes. Por tanto, podría esperarse que pronto, todas estas herramientas pudieran ayudarnos a generar una gran variabilidad de prototipos. Por supuesto, la validación de los mismos (decidir qué versión del prototipo aporta más valor), todavía queda reservada a los humanos.
Por los resultados obtenidos en algunos trabajos de investigación [25][26], parece que todavía queda trabajo por hacer para que podamos sacarle el máximo partido a estas herramientas, principalmente en cuanto a mejorar la calidad del código (o de los datos) que se usa para entrenar estos modelos. Al parecer, son capaces de reconocer algoritmos fundamentales y generar código óptimo pero siempre que las descripciones sean cortas y concisas. En algunos casos: (1) todavía se necesita invocar varias veces al algoritmo para recibir soluciones correctas, y además (2) también generan código innecesariamente complicado para algunas descripciones sencillas.
Conclusiones
Por último, finalizaremos con las conclusiones más relevantes:
- Las tecnologías Low Code y No Code nos permiten automatizar el desarrollo. La mayoría de estas herramientas tienen un enfoque de diseño centrado en el usuario (diseño de interfaces que pueden ser validadas por los usuarios y uso de componentes funcionales). Se utilizan interfaces gráficas y configuraciones fáciles de usar para crear las soluciones:
- Si la solución que queremos diseñar y construir es 100% parametrizable (No Code)
- Si la solución incluye funciones más complejas (Low Code), requerirán que llevemos a cabo trabajos manuales de diseño y desarrollo de código.
- Además, existen herramientas tecnológicas de IA que pueden usarse como asistente en las tareas de diseño y desarrollo de código. No obstante, todavía queda trabajo por hacer para que podamos sacarle el máximo partido a estas herramientas.
Referencias
[1]. El País, “Low Code cómo aparender a programar sin saber programar”, accesible online: https://elpais.com/tecnologia/2022-05-06/low-code-como-aprender-a-programar-sin-saber-programar.html, último acceso: Julio 2022
[2]. ITUSER, ”Estos son los principales beneficios del lowcode en el desarrollo de aplicaciones”, accesible online: https://www.ituser.es/actualidad/2022/05/estos-son-los-principales-beneficios-del-lowcode-en-el-desarrollo-de-aplicaciones, último acceso: Julio 2022
[3]. Mobile World Capital Barcelona (MWCapital) y NTT Data, en el marco Barcelona Digital Talent, “Análisis del low-code: nuevo paradigma en el desarrollo del software”, accesible online: https://barcelonadigitaltalent.com/report/analisis-low-code/, último acceso: Julio 2022
[4]. WebRatio, accessible online: https://www.webratio.com/site/content/es/plataforma-de-desarrollo, ultimo acceso: Julio 2022
[5]. MIT Appinventor, accesible online: https://appinventor.mit.edu, ultimo acceso: Julio 2022
[6]. Saltcorn, accesible online: https://github.com/saltcorn/saltcorn, ultimo acceso: Julio 2022
[7]. BuidBase, accesible online: https://budibase.com, ultimo acceso: Julio 2022
[8]. Mendix, accesible online: https://www.mendix.com, último acceso: Julio 2022
[9]. Velneo, accesible online: https://velneo.es, último acceso: Julio 2022
[10]. Microsoft PowerApps, accesible online: https://powerapps.microsoft.com, ultimo acceso: Julio 2022
[11]. Oracle Visual Builder, accesible online: https://developer.oracle.com/es/visual-builder/, ultimo acceso: Julio 2022
[12]. Zoho, accessible online: https://www.zoho.com/es-xl/creator/, último acceso: Julio 2022
[13]. Appian, accesible online: https://appian.com/platform/overview.html, ultimo acceso: Julio 2022
[14]. Convertigo, accesible online: https://es.www.convertigo.com, último acceso: Julio 2022
[15]. Joget, accesible online: https://www.joget.org, ultimo acceso: Julio 2022
[16]. Figma, accesible online: https://www.figma.com/, último acceso: Julio 2022
[17]. Debuild, accessible online: https://debuild.app/, ultimo acceso: Julio 2022
[18]. GitHub copilot, accesible online: https://github.com/features/copilot, ultimo acceso: Julio 2022
[19]. OpenAI examples, accesible online: https://beta.openai.com/examples/, útlimo acceso: Julio 2022
[20]. Automated analysis of feature models 20 years later: A literature review. Information systems, 35(6), 615-636.
[21]. 25 years of model-driven web engineering. what we achieved, what is missing. CLEI Electronic Journal, 19(3), 5-57.
[22]. IFML: The interaction Flow Modeling Language, accessible online: https://www.ifml.org/, ultimo acceso: Julio 2022
[23]. GPT3 + FIGMA, accessible online: https://gpt3demo.com/apps/gpt-3-figma-plugin, ultimo acceso, Julio 2022
[24]. DALL-E by OpenAI, accessible online: https://gpt3demo.com/apps/openai-dall-e, ultimo acceso, Julio 2022
[27]. Microsoft NUWA INFINITY, accesible online: https://nuwa-infinity.microsoft.com/#/, ultimo acceso: Julio 2022