La arquitectura que nadie pidió

La arquitectura que nadie pidió

Autores: María Patricia Serrano Ramírez; Adler Alejandro Pérez Asensio

Palabras clave: Arquitectura de software, Decisiones arquitectónicas, Requisitos de software, Sobreingeniería, Atributos de calidad.

Página 21 de 52

Introducción

¿De qué sirve construir una arquitectura técnicamente impecable si nunca fue necesaria para

resolver el problema? En el desarrollo de software, una decisión arquitectónica debe surgir

siempre de las necesidades y las restricciones que definen el sistema. Ignorar esto puede

convertir lo que era una solución sencilla en una compleja generando un aumento de costos y

esfuerzo.

Por ello, los requisitos funcionales​ y los atributos de calidad deben construir la base para

determinar qué arquitectura es adecuada para el sistema. El verdadero desafío al diseñar un

sistema no es generar la arquitectura más sofisticada sino lograr justificar aquella que responda

de manera efectiva al problema.

De la necesidad a la decisión arquitectónica

¿Qué pasaría si la arquitectura de un sistema fuera la respuesta a una pregunta que nunca se

hizo? En el desarrollo de software, el adoptar tecnologías antes de lograr comprender

correctamente el problema hace que una solución sencilla se vuelva una estructura

innecesariamente compleja. Por ello, las decisiones deben ser fundamentadas por los requisitos

del sistema y no por la popularidad de las tecnologías.

Tanto los requisitos funcionales como los atributos de calidad, rendimiento, seguridad,

disponibilidad y escalabilidad deben orientar las decisiones de arquitectura (Lago, Avgeriou, and

Hilliard 2010). Cada componente que se incorpora al sistema debe responder a una necesidad

concreta y debe aportar un beneficio que se pueda justificar.

Cuando la arquitectura supera al problema

La Sobre Ingeniería ocurre cuando la solución técnica que se plantea es mucho más compleja del

problema a resolver. Un ejemplo es adoptar una arquitectura distribuida para una aplicación

sencilla. Aunque estas decisiones pueden parecer preparación futura, genera una consecuencia

medible al chocar con los atributos de calidad, disparando costos de mantenimiento, pruebas y

dificultades que no existían sin un beneficio que lo justifique (Kazman, Klein, and Clements

2000).

Esto no significa que la complejidad sea negativa ya que hay sistemas que si lo necesitan como

los sistemas que procesan datos sensibles o las plataformas con miles de usuarios. En estos

casos, estas arquitecturas generan beneficios reales. El problema surge cuando una solución

compleja se adopta sin tener un requisito que la justifique. La complejidad deja de ser una

inversión cuando no se responde a las necesidades reales del sistema convirtiéndose en una

complejidad accidental, introducida por tendencias, imitaciones o expectativas poco realistas.

Un mismo problema, diferentes soluciones

Bien, para verlo de mejor manera se plantea el caso: “Desarrollo de sistema para la gestión de

citas de un veterinario particular”, contemplando registrar usuarios, agendar cita, consultar

disponibilidad, cancelar cita, entre otras. Para darle solución al problema veremos dos

posibilidades, una de ella utilizando un monolítico y una arquitectura basada en microservicios.

Página 22 de 52

Figura 1. Comparación de una arquitectura monolítica y una arquitectura basada en microservicios para un mismo sistema de gestión. Fuente: elaboración propia.

Tal como lo presenta la Figura 1, una arquitectura basada en microservicios representaría

aproximadamente el triple de despliegues a mantener, pues se observan 3 servicios, que precisamente en el caso planteado, cuentan con un sistema de persistencia cada uno, frente a una

aplicación global y una base de datos que representaría un monolítico. Ojo, que no

automáticamente significa que está mal, pero estamos hablando de un “Sistema para la gestión

de citas de un veterinario particular”, no hay ningún driver, como alta disponibilidad o

escalamiento masivo que justifique la implementación de un proyecto de tal magnitud.

Conclusión

Para diseñar una arquitectura es importante tener en cuenta que no se construye un sistema para

relucir conocimientos técnicos, o para dar a conocer habilidades. Esos dos factores son

esenciales, pero no son la prioridad; la prioridad en todo momento es buscar la mejor solución al

problema inicial y satisfacer las necesidades del usuario. Por supuesto, la propuesta tiene que

tener fundamento técnico y tiene que ser hecha a la medida, y en esta parte es donde se tiene que

demostrar cuán capacitado está un arquitecto, porque esto no va de suponer que estilo

arquitectónico es mejor valorado, o más difícil de implementar, consiste en buscar una solución

apta. Basar la arquitectura en la definición de “architecture drivers” es una práctica

indispensable, pues estos ponen restricciones, límites, y alcances que condicionan la elaboración

y planificación de un proyecto, esta práctica ayuda a que el producto final sea una solución real.

https://pure.rug.nl/ws/files/2632678/2010IEEESoft wareLago.pdf.

2.​ Kazman, Rick, Mark Klein, and Paul Clements. 2000. ATAM: Method for Architecture

Evaluation, CMU/SEI-2000-TR-004. Pittsburgh, PA: Software Engineering Institute,

Carnegie Mellon University.

https://www.sei.cmu.edu/documents/629/2000_00 5_001_13706.pdf.

3.​ Gonzalez, Rodrigo Alejandro, Sergio Agustín Giménez, Numa Roy Molina Pualuk, and

Rodrigo Zalazar. 2024. “¿Son Los Microservicios La Mejor opción? Una evaluación De

Su Eficacia Y Eficiencia Frente a Los Monolitos”. JAIIO, Jornadas Argentinas De

Informática 10 (5). https://revistas.unlp.edu.ar/JAII O/article/view/17980.

Ver diseño original de las páginas
Página 21 de la Revista ECYS XXIX
Página 22 de la Revista ECYS XXIX