No history yet

Atributos de Calidad

Más Allá del Código Funcional

Como programador, tu enfoque principal es hacer que el código funcione. Escribes una función, procesa una entrada y produce la salida correcta. El trabajo del arquitecto de software es diferente. Se preocupa menos por la lógica de una función individual y más por cómo se comporta el sistema en su conjunto bajo diversas condiciones.

La arquitectura define la estructura fundamental de un sistema: los componentes principales y cómo interactúan. Es el plano de la casa. Determina si tendrá uno o cinco pisos, dónde estarán los muros de carga y cómo fluirá la plomería. El diseño, por otro lado, se ocupa de los detalles de implementación dentro de esa estructura. Es la elección de los azulejos del baño o el color de la pintura de la cocina. Ambos son cruciales, pero operan a diferentes niveles de abstracción.

La arquitectura sienta las bases para las cualidades del sistema, mientras que el diseño construye sobre esas bases.

Los Atributos de Calidad

Esas "cualidades del sistema" son lo que llamamos Atributos de Calidad o Requerimientos No Funcionales (NFRs, por sus siglas en inglés). Son los adjetivos que describen el comportamiento del sistema, las famosas "-ilidades". No describen qué hace el sistema, sino cómo lo hace.

Los más comunes incluyen:

  • Disponibilidad: ¿El sistema está operativo y accesible cuando los usuarios lo necesitan? Se mide a menudo en porcentajes, como el famoso "99.999% de tiempo de actividad".
  • Escalabilidad: ¿Puede el sistema manejar un aumento en la carga de trabajo (más usuarios, más datos) de manera eficiente? No se trata solo de funcionar, sino de mantener el rendimiento a medida que la demanda crece.
  • Mantenibilidad: ¿Con qué facilidad podemos corregir errores, agregar nuevas funcionalidades o adaptar el sistema a nuevos requerimientos? Un sistema con alta mantenibilidad reduce los costos y el tiempo de desarrollo a largo plazo.

Mantenibilidad

noun

Una medida de la facilidad con la que un sistema de software o componente puede ser modificado para corregir fallos, mejorar el rendimiento u otros atributos, o adaptarse a un entorno cambiante.

Otros atributos importantes son la seguridad, el rendimiento, la usabilidad y la testeabilidad. La tarea del arquitecto es entender cuáles de estos son críticos para el éxito del negocio y diseñar un sistema que los cumpla.

De lo Abstracto a lo Concreto

Decir "el sistema debe ser escalable" es vago e inútil para un arquitecto. ¿Qué significa "escalable"? ¿Para cuántos usuarios? ¿Bajo qué condiciones? Para que los atributos de calidad sean accionables, debemos definirlos de forma precisa y medible. Aquí es donde entran los Escenarios de Atributos de Calidad (QAS, por sus siglas en inglés).

Un QAS descompone un requisito ambiguo en seis partes concretas:

Veamos un ejemplo para la escalabilidad de una tienda en línea.

ComponenteDescripción
Fuente del EstímuloUn gran número de usuarios finales.
EstímuloLas peticiones de página por segundo aumentan de 500 a 5,000 durante una venta.
ArtefactoLa infraestructura de la aplicación (servidores web, base de datos).
EntornoEl sistema está en operación normal.
RespuestaEl sistema escala sus recursos para manejar la carga.
Medida de la RespuestaEl tiempo de respuesta promedio por página se mantiene por debajo de 500ms.

Con esta definición, el requisito de "ser escalable" se convierte en un objetivo técnico claro y verificable. Ahora sabemos qué medir y bajo qué condiciones el sistema debe tener éxito.

El Arte del Intercambio

Rara vez podemos maximizar todos los atributos de calidad a la vez. Mejorar uno a menudo degrada otro. Esta es la realidad fundamental de la arquitectura de software: todo es un intercambio o trade-off.

Por ejemplo, para aumentar la disponibilidad, podrías duplicar tus servidores en diferentes regiones geográficas. Esto crea redundancia. Si un servidor falla, el otro toma el relevo. Sin embargo, esta decisión aumenta la complejidad (y por lo tanto, reduce la mantenibilidad) y eleva los costos operativos. ¿Vale la pena?

Otro ejemplo clásico es la seguridad frente al rendimiento. Encriptar cada dato en la base de datos mejora la seguridad, pero el proceso de encriptación y desencriptación consume ciclos de CPU, lo que puede ralentizar el sistema y afectar el rendimiento.

Lesson image

Un buen arquitecto no busca la solución "perfecta". Busca el balance correcto para un contexto específico. Su trabajo es identificar estos trade-offs, analizarlos y tomar una decisión informada que se alinee con las prioridades del negocio. ¿Es más importante para nuestros clientes que el sitio sea ultrarrápido o que nunca se caiga?

La respuesta a esa pregunta determina qué requerimientos son arquitectónicamente significativos. No todos los NFRs son iguales. Un Requerimiento Arquitectónicamente Significativo (ASR, por sus siglas en inglés) es un atributo de calidad que, si no se cumple, podría causar el fracaso del proyecto. Estos son los requerimientos que deben guiar las decisiones más importantes de la arquitectura.

En lugar de buscar un diseño impecable desde el principio, recorre las posibles alternativas (p. ej., microservicios frente a monolito, NoSQL frente a SQL) y explica los pros y los contras de cada una.

Entender los atributos de calidad y sus intercambios es el primer gran paso para dejar de pensar como programador y empezar a pensar como arquitecto. Se trata de pasar de construir piezas individuales a diseñar un todo cohesivo y robusto que satisfaga las necesidades del negocio, no solo hoy, sino también en el futuro.