¿Sirve de algo la maquetación de pantallas para la arquitectura de soluciones?

Me he encontrado en mi trayectoria muchos arquitectos de soluciones que menosprecian o no consideran en su evaluación de solución la maquetación de pantallas (cuando existe). Esto suele ser un gesto común pero ¿En realidad no nos aporta valor dar revisión a estos entregables?

Hilando nuestro post anterior «Ciclo de vida de la información» a esta perspectiva, el ciclo de vida de la información tiene muchas dimensiones y una de estas es la presentación.
Al contemplar el flujo de pantallas y los comportamientos esperados, un arquitecto puede proponer una solución u otra, que permita agilizar el sistema o en su caso no exponer información confidencial cuando no se requiere.

Cada flujo o pantalla requiere de información que necesita ser consultada, que ya se ha consultado anteriormente, que necesita ser agregada o necesita ser modificada, en cada uno de estos casos, el Arquitecto de software o el de soluciones puede proponer el uso de algún caché, paso de información por sesión, eliminación de información o end-points que brindan información específica para cada caso, sin exponer más información de la necesaria.

Recordemos algo importante, la visión de un arquitecto de soluciones se limita por el alcance de la información que esta dispuesto a procesar, entender y utilizar a su favor, dicha información no necesariamente proviene de elementos técnicos, sino funcionales, no funcionales, entre muchos otros.

El ciclo de vida de la información, su seguridad y el rendimiento

En el mundo de arquitectura muchas veces olvidamos un punto crucial para sistemas grandes, de alta transaccionalidad, gran operatividad y/o de alta transmisión de datos. Me refiero a la Arquitectura de la información.

Dentro del mundo de arquitectura de información podríamos incluir (aunque no limitarnos a) Big Data, Business Intelligence, Data Science, entre otras disciplinas, pero sin entrar de momento en una de ellas en específico, es un echo que la información cuenta con un ciclo de vida, el cual no necesariamente debe ser el mismo para cada negocio, por ejemplo, lista de enfermedades existentes, aunque la información sea la misma, su ciclo de vida dentro de un entorno de seguros no es el mismo que en un entorno de hospitales de especialidades o en un centro de investigación de enfermedades infecciosas.

Así que tomando lo anterior, el ciclo de vida de la información tiene muchas dimensiones, en función de la utilidad, tecnología, necesidad, tipo de aplicación, rendimiento, etcétera, podemos listar algunas de esas dimensiones como:

  • La presentación de una pantalla
  • Un reporte
  • Transito desde una aplicación a un tercero
  • Reposo (almacenamiento)
  • Reposo largo (respaldos o históricos)
  • Entre muchas otras.

¿Y cómo afecta esto en la seguridad y rendimiento?

Pues bien, en muchas ocasiones se nos hace trivial hacer un sistema sin tener en consideración este tema, y si el sistema es pequeño o interno, quizás ni siquiera se note mucho el déficit de análisis, sin embargo cuando la exposición del sistema es mayor o el número de usuarios se incrementa considerablemente, el no contemplar esto nos lleva a contar con temas como:

  • Fuga de información confidencial
  • Aumento de latencia en respuestas
  • Acceso a información no permitida por perfiles inadecuados
  • Degradación del servicio
  • Alto aumento de costos en infraestructura
  • Entre varios más.

Tratando de ejemplificar cada punto expongo la lista anterior sin ser exhaustivo en todas la problemáticas, pero sí las más comunes:

Fuga de información confidencial
Esto se puede presentar de muchas maneras, pero por ejemplo, re utilización de un servicio que brinda mucha información de algún proceso en un front-end que utiliza mucha menos información de la que se envía, esta información puede claramente ser extraída y referenciada para su mal uso.

Otro ejemplo sería el almacenamiento de la información en cookies o local storage para «agilizar pantallas», pero dicha información se almacena sin cifrado, sin tempo de expiración, sin control de acceso por otros sitios, etc.

Entre otras problemáticas de información que pueden presentarse.

Aumento de latencia en respuestas
En ocasiones pensamos que brindar toda la información de un solo llamado es lo más eficiente, sin embargo cuando no se analiza correctamente podemos estar saturando la red o la aplicación con mucha información que no se utiliza, o la utilización real es de un 10% de la información el 90% del tiempo, cuando el resto de la información no es necesaria mas que en un 10% de las ocasiones. Eso satura las comunicaciones, servidores, memoria y aumenta significativamente los costos.

Acceso a información no permitida por perfiles inadecuados
De forma similar a la fuga de información, utilizar servicios para distintos perfiles sin una correcta separación de datos puede llevar a que los sistemas entreguen información de más al front-end y dejar la responsabilidad de discriminar dicha información a la capa final, esto produce que cierta información sea accesible por personas inadecuadas.

Degradación del servicio
Cierta información no corresponde a los usuarios sino a otras entidades, como a la aplicación, a la sesión, un entrono específico o al perfil del usuario, pero al no contemplar esto muchos sistemas cargan toda la información a solicitud del usuario lo que provoca que exista multiplicidad de la misma información en memoria del servidor, carga innecesaria de procesamiento en los servidores back o bases de datos, saturaciones de memoria entre otras problemáticas. Estos problemas pueden aumentar conforme aumentan los usuarios y la carga de la aplicación, en muchos casos solventándolo con aumento de infraestructura cuando el problema real puede ser de análisis de información.


De aquí que tener un correcto análisis de información, junto con una buena definición de entidades, dependencias, diccionario de datos, niveles de acceso y determinación del ciclo de vida del dato, es crucial cuando queremos tener aplicaciones altamente escalables, de buen rendimiento y de fácil evolución.

Si es que no sabes si cuentas con alguno de estos problemas, si sabes que los tienes pero no sabes cómo resolverlos o si estás desarrollando y quieres reducir el riesgo de caer en los problemas mencionados, puedes contactarnos y con gusto te podemos ayudar.

¿Qué pasa cuando las tendencias van en contra de la seguridad y/o rendimiento?

Es común que con los cambios generacionales o simplemente con la gran velocidad con la que cambia la tecnología, existan ciertas tendencias que permiten mejorar la usabilidad y visión del mundo tecnológico, de hecho es una de las grandes ventajas que tiene este interesante riel imaginario que nos lleva al crecimiento tecnológico, sin embargo en algunas ocasiones, ciertas tendencias nos llevan a tener un pequeño retroceso o no contemplan todos los alcances que se han tenido anteriormente.

A continuación enumero algunos de los elementos que bajo mi experiencia en arquitectura de soluciones y arquitectura de seguridad son gran tendencia y olvidan ciertas necesidades de seguridad o rendimiento, cabe mencionar que no es una lista exahustiva ni tampoco aplica siempre, pero si es que no eres experto en tecnología y no sabes si es que estas en alguno de los casos descritos o requieres ayuda para detectar otros patrones, con gusto, en olaguibert.com podemos ayudarte.

  • Desarrollo de aplicaciones web basadas en microservicios y no contemplar una sesión aplicativa.
    En este caso La tendencia tecnológica nos ha llevado a entornos elásticos y muy buenos en términos de reusabilidad y escalabilidad, sin embargo muchas veces se olvidan que las aplicaciones, en la mayoría de los casos requieren de flujos funcionales completos, que permitan ser seguros durante todo el flujo y no sólo en el inicio del mismo. En este entendido el desarrollar aplicaciones orientadas 100% a APIs sin estado suele ser un problema, ya que no se permite mantener una sesión entre cliente y servidor, lo que nos lleva a utilizar mecanismos alternos como pasos de tokens de manera programática, olvidándonos de algo llamado «cookies» que han evolucionado durante décadas para ser seguras en la navegación web.
  • Olvidar el robo de sesión
    En el mismo escenario del anterior, algunos casos no olvidamos que necesitamos una sesión, sin embargo mantenemos la misma de manera programática, olvidándonos de las funciones de un servidor que puede realizar estas acciones de una forma mucho más eficiente y segura. En este caso no utilizar las cookies puede generar que la sesión pueda robarse mediante XSS o incluso por paso de parámetros en gateways, recordemos que las tecnologías no por ser «viejas» necesariamente significa que son malas.
  • Problemas de rendimiento por uso de APIs sin estado
    El contar con APIs sin estado es una tendencia del mercado muy marcada y en muchos de los casos benéfica en integraciones con terceros, pero ¿Qué pasa en aplicaciones propias?
    Muchas veces olvidamos que en flujos aplicativos contemplar el ciclo de vida de la información, puede llevarnos a tener grandes optimizaciones, un claro ejemplo sería, cuando requerimos de un catálogo de códigos postales, cuando hacemos uso de APIs sin estado, por definición, por cada petición se requiere consultar y/o transmitir la información, sin embargo en una aplicación este tipo de catálogos sólo podría cargarse una vez ya que esta información no cambia por usuario, y tampoco en cortos periodos de tiempo, por lo que hacer uso de estas APIs sin un correcto análisis nos lleva a generar sobrecargas en servicios o servidores, aumentando innecesariamente los costos.
  • Manejo de almacenamiento en local
    La tecnología nos ha dado muchas ventajas entre ellas, la capacidad de desarrollar aplicaciones en navegador (RIA) con prácticamente todas las capacidades de una aplicaciones de escritorio si así lo quisiéramos, sin embargo las tendencias a veces nos hacen olvidarnos de la seguridad de la información. Las tendencias por optimizar, mejorar respuestas o hacer sentir al usuario que no hay retardos en nuestra aplicación, nos lleva a almacenar mucha información sensible en el «local storage», y aunque la seguridad en este almacenamiento ha mejorado desde su nacimiento, no deja de ser un lugar de fácil explotación y tan heterogénea como usuarios hay.

Éstos son sólo algunas de las tendencias que por experiencia suelen ir en contra de la seguridad o rendimiento, pero no son todas las que conocemos ni las que existen.

Problemas de rendimiento

En el mundo de sistemas, as aplicaciones son desarrolladas para alcanzar ciertos objetivos, pero en ocasiones ya sea por el crecimiento empresarial o porque no se contempló algún escenario, el rendimiento de las aplicaciones no es el esperado.

Muchas veces aunque los desarrollos son propios no se identifican las causas de que no se pueda escalar la aplicación o que no nos de los resultados esperados.

Existen problemas de rendimiento en distintas partes del ciclo de vida de la aplicación por lo que cada caso es diferente y puede requerir conocimiento especializado, más si no se quiere hacer una reestructura global de la aplicación o no se cuenta en ese momento con el presupuesto para hacerlo. Los problemas de rendimiento pueden aparecer en:

  • Tiempo de desarrollo de la aplicación
    Nos damos cuenta de que la aplicación que estamos desarrollando no cumplirá con los objetivos que se plantearon inicialmente o los objetivos han cambiado.
  • Tiempo de despliegue
    Muchas aplicaciones tardan mucho en desplegar o iniciar lo que en algunos casos provoca problemas tanto de mantenimiento y/o disponibilidad de cara al cliente o la operación del negocio
  • Tiempo de operación del negocio
    Algunas aplicaciones generan una degradación del servicio operativo con forme más tiempo están activas, por lo que se hace necesario reiniciarlas constantemente, esto provoca tener tiempos de no disponibilidad aplicativa ya sea para la operación
  • Crecimiento del negocio
    Una de las más comunes es que el crecimiento del negocio supera las expectativas aplicativas y en ese escenario la aplicación ya no tiene la capacidad de atender a todos los usuarios que han aumentado, muchas veces se resuelve con aumento de hardware, pero no siempre es la mejor decisión.
  • Actualización tecnológica
    La gran velocidad con la que la tecnología avanza provoca que en ocasiones ciertos componentes sean obsoletos y no cuenten con soporte o que una actualización estrictamente necesaria provoca problemas de rendimiento en la aplicación, por lo que no hay vuelta atrás y se requiere de corregir el problema de rendimiento.

Entre otras causas los problemas de rendimiento son temas que suelen darnos dolores de cabeza y se requiere de un ojo experto que permita alinear objetivos de empresa, presupuesto y solución para que la empresa evolucione sin tanto dolor.

En olaguibert.com tenemos experiencia en todo este tipo de problemas y podemos ayudarte a resolverlos.