Tranquilos, no voy a hablar de política (aunque un “partido modelo” no suena mal 🙂 ). Pero sí que voy a hablar de transparencia. Y es que, en mi opinión, el futuro de la ingeniería de software dirigida por modelos pasa por ser cada vez más transparente. Hablé de esto hace poco en el blog de CodeBots. Este post es la traducción de ese post.

Ya hemos discutido varias veces acerca de los beneficios del modelado y de como nos puede ayudar a ser más productivos al permitir la captura de requisitos y la especificación del sistema evitando entrar demasiado pronto en discusiones ténicas e incluso llegando generar parte del propio sistema a partir de estos modelos. Pero, hay que ser realistas, el modelado se sigue viendo con reticencia por parte de la comunidad de programadores. Lo que ha llevado incluso al invento de nuevos nombres (como low-code) para esconder un poco lo que al final sigue siendo desarrollo dirigido por modelos.

Toda iniciativa que contribuya a popularizar el modelado me parece bien, pero más que esconderlo yo propongo hacerlo más transparente. No cambiando el marketing sino reduciendo la fricción.  A tres niveles.

Transparencia en cuanto a herramientas

Un desarrollador no debería ver una herramienta de modelado como algo separado de su entorno de desarrollo habitual que sólo abre al empezar un nuevo proyecto para hacer algunos dibujitos que después irán a la basura. Al contrario las herramientas de modelado tienen que estar plenamente integradas en el ciclo iterativo del proyecto. Aspectos como los lenguajes de modelado textual, que resultan más familiares a los programadores y se adaptan mejor a los sistemas de control de versiones o un buen “round-trip engineering” (es decir la capacidad de modificar tanto los modelos como el código sin que por eso dejen de estar sincronizados) pueden jugar un papel importante aquí.

Transparencia a nivel de usuario

Nadie se sorprenderá si digo que la usabilidad es uno de los principales defectos de la gran mayoría de herramientas. Demasiados clics para dibujar un modelo. Unos algoritmos de auto-layout que dejan mucho que desear y llegan la pantalla de líneas cruzadas. Se puede decir que estas herramientas son muy eficaces en desesperar al aspirante a diseñador.

Como comunidad, tenemos que darnos cuenta de la importancia de la usabilidad y convertirlo en una dimensión de primer nivel al proponer nuevas herramientas. Sobre todo ahora que muchos otros aspectos técnicos están resueltos (si ya podemos crear lenguajes, metalenguajes, metametalenguajes y así hasta el infinito y más allá). Dar más prioridad a herramientas de modelado en la web sería una opción bien recibida por muchos (¿alguien prefiere instalar Eclipse a modelar online?).  Otros estarían encantados de modelar con herramientas que ya conocen y usan a diario. Sabemos que muchos acaban diseñando con powerpoint u otras herramientas de dibujo. O bien creamos plugins que ayuden a transformar esas herramientas en entornos de modelado más “reales” o, como mínimo, investiguemos como podemos ofrecer interfaces similares en nuestras propias herramientas que disminuyan la barrera de entrada.

Transparencia en cuanto al proceso cognitivo

Modelar no es fácil. Todo lo contrario. Si podemos facilitar la complejidad del propio acto de modelar también estaremos facilitando que más y más gente sea sienta cómoda y capaz de lanzarse a modelar. Una vía a explorar es el uso de los avances en inteligencia artificial para generar modelos parciales a partir de la información y documentos que el cliente nos proporcione. Podríamos reutilizar entrevistas, bases de datos existentes, aplicaciones “legacy”,… para aprender como tendría que ser el sistema y generar un primer modelo que lo represente. Así, los modeladores no empiezan de cero (¡cómo asusta la página en blanco!).

Para dominios muy concretos y conocidos, este modelo podría incluso ser básicamente ya el modelo final y utilizarse para generar el software directamente. Esto es por ejemplo lo que hacemos en Xatkit para eCommerce donde podemos generar bots para tiendas electrónicas sin que el usuario tenga que definir nada. Es lo que yo llamo una no-work experience ya que vamos más allá de lo que hacen las herramientas no-code.

Para dominios más complejos, nos quedaríamos con un modelo parcial que el modelador tendría que refinar. Pero en este caso podríamos también pensar en un asistente virtual con el que podemos hacer “pair programming” o, mejor dicho en este caso, “pair modeling”. Este asistente virtual podría estar entrenado con proyectos antiguos o incluso con modelos en repositorios abiertos para poder sugerir mejoras al modelo que está co-creando con el experto. Hay muchas oportunidades para mejorar la experiencia del modelado y ayudar a los diseñadores a crear más rápidamente mejores modelos.

¿Y a vosotros que os impide modelar más y mejor? ¿Qué otras “mejoras en transparencia” deberíamos tener en cuenta?