miércoles, 13 de marzo de 2019

El arte de diseñar soluciones tecnologicas


En este mes quiero dedicar un espacio para explicar a detalle que es la arquitectura de software y como se ve el trabajo de un arquitecto de software en la vida real, más allá de la teoria y aplicada a las empresas reales que tienen una real arquitectura de software. ¿Por qué usar tanto la palabra real?, porque la arquitectura es uno de esos términos ampliamente usados, y en esta región, en muchos casos y para pesar de quienes somos profesionales en esta área, mal usado y mal interpretado por perfiles tanto técnicos como administrativos de las organizaciones. Hablemos entonces con un ejemplo que se aleja de la tecnología sobre la arquitectura de software, las capas o tipos que tiene, así como su evolución en el tiempo.
Para empresa quisiera hacerles una pregunta que espero contesten para ustedes mismos antes de continuar. Usted tiene el proyecto de construir una nueva casa a su gusto, está considerando nuevas características que requiere pues ahora con dos hijos pequeños, mascotas y a su padre viviendo con usted, las necesidades que tenia cuando compro la casa donde vive ahora han cambiado. Usted requiere alguien para transmitirle las ideas y que pueda hacer un plano de todas sus necesidades y asegurarse que sea estéticamente correcto y estructuralmente también, que considere su presupuesto, su visión a futuro, tal vez una piscina mas adelante con un área de juegos. ¿A que profesional contrataría? (Si alguno quiere dejarme su respuesta en los comentarios es bienvenida).
Pues la respuesta más común es, a un arquitecto. Y es que en el negocio de la construcción esta claramente separado el concepto de arquitecto, así como están el de maestro de obra, constructor, albañil, etc. Lastimosamente esa línea en la tecnología no esta bien definida, en gran parte, por culpa de nosotros, los profesionales en esta área que tampoco la tenemos clara.
Entonces, que es la arquitectura de software: No es otra cosa que un conjunto de patrones que proporcionan un marco de referencia para guiar la construcción del software. Esto quiere decir que para hacer un software TAMBIEN se hacen planos. Ahora, y donde nosotros los que estamos en esta profesión pecamos es en creer que cualquier diagrama con flechas es una arquitectura de software, además tenemos que diferenciarla de la arquitectura de soluciones o de integración por ejemplo. Les quiero mostrar algunos diagramas que he visto con el titulo de arquitectura de software:
               



No solo son incorrectos, sino que no existe un único diagrama para describir una arquitectura, existen distintas vistas que permiten en realidad diseñar un software, como el modelo de 4+1 views de Kruchten por ejemplo. Claro, estos modelos algunos demasiado teóricos se alejan de lo que debería de hacerse realmente en una organización, y como todo no es una receta mágica, pero puedo compartirles cuales son aquellas vistas de una solución tecnológica que generan más valor:
1.       Diagrama de arquitectura de solución: Este diagrama permite entender la solución como un todo, mostrando normalmente componentes tecnológicos como cajas negras. Este es un diagrama muy general que por si solo no expresa la totalidad de una arquitectura. En este tipo de diagramas pueden evidenciarse patrones de alto nivel como, patrones de integración, patrones de consumo de datos, etc.
2.       Diagrama de arquitectura de software: Normalmente este describe como esta construido un sistema, y evidencia su patrón de arquitectura, podemos observar mas de uno, alguna parte con tubos y filtros, otra usando algo tipo MVC o en capas, etc. Este debe describir todos los componentes a alto nivel de un sistema y sus interrelaciones. Y es este uno de los que menos he visto en los últimos años, pues ya nos acostumbramos a pintar nuestras soluciones tecnológicas como cajas negras y a dejar por dentro aun códigos monolíticos corriendo sobre “Arquitecturas de últimas tendencias”, esto sobre todo por temor a decir que aun nuestra arquitectura, en la nube y todo en muchos casos, sigue siendo monolítica. Es así como nos atrevemos a construir un conjunto de apis usando por ejemplo .net y hacer que estas no sean mas que fachadas que en realidad siguen invocando un sistema monolítico, entonces la velocidad, independencia y posibilidad de desplegar las apis como verdaderos microservicios se pierden, pero claro, esto no lo vemos en un diagrama general de cajas negras, es así como quienes no conocen esto a profundidad son engañados por las nuevas invenciones y “evoluciones” de sus contextos tecnológicos.
3.       Diagrama de arquitectura de infraestructura: Este diagrama muestra todo el mapa a detalle del contexto de hardware que ayudara a soportar la solución de software, y siguen necesitándose así la solución este en la nube, es bueno saber, por ejemplo de ser una solución Amazon, en que tipo de instancias estas desplegado, como usaste los módulos EBS de persistencia entre otros, además de los componentes de red, luego no nos asombremos cuando implementamos un software  y no funciona al inicio pues se nos olvido abrir puertos en el firewall entregar permisos entre otros, ese tipo de solicitudes se visualizan con este diagrama.
4.       Diagrama de despliegue: Es importante siempre poder relacionar el hardware y el software y este diagrama lo permite, identificar que esta desplegado en cada componente de infraestructura y como están conectados, protocolos, seguridad entre otros.
5.       Diagrama de integración: Ha tomado muchísima relevancia con los nuevos esquemas de integración y la desaparición de los sistemas (todo en uno), ahora prevalece el tener pequeños componentes de software que se conectan y por lo tanto tener un diagrama que permita conocer esas interrelaciones y acceder a los contratos o descripciones de métodos y variables entre las integraciones es fundamental, esto puede administrar por ejemplo de ser el caso usando un api management. Además si está usando microservicios contenerizados, le permitirá junto al diagrama anterior, entender como están desplegados sus microservicios y en que contendedores y donde residen.
6.       Diagrama de Arquitectura de datos: Y ojo que esto no es el diagrama entidad relación, es más, en esta entrada no estoy para nada hablando de diagramas de diseño detallado, eso puedo tocarlo después, estoy hablando de la descripción de sus fuentes de datos, gobierno de información, migración de data histórica, etc. La data hoy en día es lo que finalmente más valor genera, pero es raro ver a un “arquitecto” diagramando esta vista.

¿Parece mas complicado que pintar cajas negras o servidores con flechas?, claro que lo es, por eso es arquitectura, por eso es una profesión especifica dentro de la rama de tecnología, por eso no todos podemos simplemente hablar de las arquitecturas si no tenemos claro que son los patrones, que son los atributos de calidad y como funcionan en son de las arquitecturas y de las necesidades del usuario. También debemos como profesionales ser sinceros y decir lo que tenemos y lo que no tenemos, si construimos un “microservicio”  que invoca 5 procedimientos almacenados de una base de datos, la cual funciona con una arquitectura monolítica no estoy haciendo microservicios, es más ni siquiera podre desplegarlos en un contenedor, debemos de dejar de usar los términos de manera incorrecta, vender información falsa, llenar la cabeza de nuestros CEO’s con datos incorrectos que después frente a una sala de personas expertas los harán quedar como unos ignorantes en el tema. Las arquitecturas de software así como las arquitecturas de las casas han evolucionado, pasamos de sistemas monolíticos a arquitecturas orientadas a servicios y ahora estamos hablando de microservicios, no todo aplica para todos y no todo debe hacerse por ejemplo con microservicios porque es lo último. Pero tampoco es cierto que, si a su casa de los años 20 le cambia la pintura de la fachada, sus cimientos y tuberías no seguirán siendo de los años 20.

Por favor, para hacer arquitectura de tecnología, así como lo haría para su casa, contrate a un arquitecto de tecnología, esto hace diferente que sea tan difícil hacer un cambio en un sistema, o que para hacer un cambio debe hacerse en la madrugada porque hay que apagar todo  o que cuando corren procesos grandes todo se pone lento, o que cuando se va a hacer algo nuevo debe de lidiar con la obsolescencia y problemas de lo viejo, es lo único que asegura software de calidad, testeable, durable, escalable, adaptable… moderno!!!

¡¡¡Feliz semana!!!