Deteccion de Architecture Drift: Manten tu Codigo Alineado con el Diseno - Archyl Blog

El architecture drift es la divergencia silenciosa entre tu diseno documentado y tu codebase real. Esta guia explica que lo causa, como detectarlo y como evitar que tus diagramas de arquitectura se conviertan en ficcion.

Deteccion de Architecture Drift: Manten tu Codigo Alineado con el Diseno

En algun lugar de tu organizacion, hay un diagrama de arquitectura que esta mal. Quiza muestra un microservicio que fue fusionado con otro hace seis meses. Quiza lista Redis como capa de cache cuando el equipo cambio a Memcached durante un incidente en produccion. Quiza describe una arquitectura hexagonal limpia en un servicio que ha acumulado suficientes atajos y soluciones temporales como para parecer spaghetti.

Esto es architecture drift: la divergencia gradual y silenciosa entre como esta documentado tu sistema y como realmente funciona. A diferencia de los bugs, el drift no dispara alertas. A diferencia de las regresiones de rendimiento, no aparece en el monitoreo. Se queda ahi en silencio hasta que alguien toma una decision basada en documentacion desactualizada -- y esa decision resulta ser incorrecta.

El architecture drift es universal. Todos los equipos lo experimentan. La pregunta no es si tu documentacion derivara, sino que tan rapido lo detectaras y que haras al respecto.

Que es el Architecture Drift

El architecture drift ocurre cuando la implementacion real de un sistema de software diverge de su arquitectura documentada o prevista. El termino fue acunado en la comunidad academica de ingenieria de software, pero el concepto es dolorosamente familiar para cualquier ingeniero en ejercicio.

El drift se manifiesta en todos los niveles de la documentacion arquitectonica:

Drift Estructural

La estructura documentada ya no coincide con el codebase:

  • Un servicio documentado como container independiente fue absorbido en un monolito
  • Un componente fue renombrado pero el diagrama todavia muestra el nombre anterior
  • Un nuevo servicio fue creado pero nunca se agrego al modelo de arquitectura
  • Una base de datos fue migrada de MySQL a PostgreSQL pero el diagrama de containers todavia dice MySQL

Drift de Comportamiento

El comportamiento documentado ya no coincide con la realidad:

  • Una llamada API sincrona fue reemplazada por un mensaje asincrono, pero la relacion todavia dice "REST/HTTP"
  • Un flujo de datos fue cambiado para pasar por un API gateway, pero el diagrama muestra comunicacion directa entre servicios
  • Un paso de autenticacion fue agregado que no esta reflejado en el diagrama de contexto del sistema

Drift de Dependencias

Las dependencias documentadas ya no coinciden con las integraciones reales:

  • Una API de terceros fue reemplazada por una solucion interna
  • Una nueva dependencia externa fue agregada (proveedor de pagos, servicio de monitoreo) pero no fue documentada
  • Una integracion fue desmantelada pero todavia aparece en el diagrama de contexto del sistema

Drift de Decisiones

Las decisiones arquitectonicas documentadas ya no se estan siguiendo:

  • Un ADR dice "usar PostgreSQL para todo almacenamiento persistente" pero un equipo comenzo a usar MongoDB
  • Las reglas de conformidad dicen "no acceder directamente a la base de datos desde el frontend" pero alguien agrego una integracion de Supabase en el lado del cliente
  • La arquitectura de despliegue dice "una sola region" pero los servicios fueron desplegados en multiples regiones

Por Que Ocurre el Architecture Drift

Entender las causas del drift es esencial para prevenirlo. El drift generalmente no es malicioso ni siquiera negligente -- es una consecuencia natural de como se desarrolla el software.

Velocidad Sobre Documentacion

Cuando tienes que entregar una funcionalidad para el viernes, actualizar el diagrama de arquitectura es lo primero que se descarta. El cambio en el codigo es el entregable. La actualizacion de la documentacion es overhead. Este es un comportamiento racional a corto plazo y devastador a largo plazo.

Muchos Cambios Pequenos

El drift raramente ocurre en un momento dramatico. Se acumula a traves de cientos de cambios pequenos, cada uno demasiado menor para justificar una actualizacion de documentacion:

  • Renombrar un archivo
  • Agregar un paquete utilitario
  • Cambiar una dependencia de libreria
  • Extraer una funcion en un modulo separado

Ningun cambio individual es lo suficientemente significativo para disparar una actualizacion de documentacion. Juntos, transforman la arquitectura.

Rotacion de Personal

Cuando los ingenieros se van, se llevan el conocimiento implicito consigo. El nuevo equipo hereda el codebase pero no la comprension de por que esta estructurado de esa manera. Hacen cambios basados en lo que ven en el codigo, no en lo que dice la documentacion, ampliando el drift.

Falta de Ciclos de Retroalimentacion

Si nadie verifica si la documentacion coincide con la realidad, el drift es invisible. Sin un mecanismo de deteccion, la unica forma de descubrir el drift es durante un incidente, una auditoria o cuando un nuevo ingeniero senala que el diagrama no coincide con el codigo. Para entonces, el drift puede ser extenso.

Cambios de Emergencia

Los incidentes en produccion a menudo requieren atajos arquitectonicos: una conexion directa a la base de datos en lugar de pasar por la capa API, una configuracion hardcodeada en lugar de usar el servicio de configuracion, un cache temporal que se vuelve permanente. Estos cambios eluden los procesos normales de revision y rara vez se documentan.

El Costo del Architecture Drift

El drift no es solo un problema estetico. Tiene costos concretos y medibles.

Malas Decisiones

Cuando los arquitectos toman decisiones basadas en documentacion desactualizada, esas decisiones pueden estar equivocadas. "Este servicio tiene poco trafico, asi que podemos permitirnos una dependencia sincrona" -- excepto que la documentacion esta obsoleta y el servicio en realidad maneja 10 veces la carga documentada.

Onboarding Lento

Los nuevos ingenieros dependen de la documentacion de arquitectura para construir su modelo mental. Si la documentacion esta mal, construyen modelos mentales incorrectos. Escriben codigo que no encaja en la arquitectura real. Hacen preguntas que revelan su confusion, consumiendo el tiempo de los ingenieros senior.

Respuesta a Incidentes

Durante un incidente en produccion, los diagramas de arquitectura deberian ayudar a los equipos a entender el radio de impacto y las dependencias. Si esos diagramas estan mal, los equipos pierden minutos valiosos rastreando las cadenas de dependencia equivocadas o pasando por alto sistemas upstream criticos.

Fallos de Cumplimiento y Auditoria

En industrias reguladas, la documentacion de arquitectura a menudo es requerida para el cumplimiento (SOC 2, ISO 27001, HIPAA). Si los auditores encuentran que la documentacion no coincide con la realidad, es un hallazgo -- potencialmente grave.

Confusion de los Agentes de IA

A medida que los agentes de programacion con IA se vuelven mas frecuentes, dependen cada vez mas de la documentacion de arquitectura para obtener contexto. Un agente que lee un modelo C4 obsoleto generara codigo que se ajusta a la arquitectura documentada, no a la real. Esto amplifica el drift en lugar de corregirlo.

Como Detectar el Architecture Drift

Revision Manual (Enfoque Tradicional)

El enfoque mas simple es la revision manual periodica: reunir al equipo, repasar los diagramas de arquitectura y verificar si todavia coinciden con la realidad.

Cuando funciona: Equipos pequenos, arquitecturas simples, cadencia trimestral.

Cuando falla: Sistemas grandes, equipos que avanzan rapido, o cuando las personas que mejor conocen el codigo no tienen tiempo para reuniones de revision. La revision manual tambien sufre de sesgo de confirmacion -- la gente tiende a ver lo que espera ver.

Architecture Fitness Functions

Las fitness functions, popularizadas por Neal Ford y el libro "Building Evolutionary Architectures", son tests automatizados que validan propiedades arquitectonicas:

// Ejemplo: Asegurar que no haya importaciones directas de base de datos en paquetes handler
func TestNoDatabaseImportsInHandlers(t *testing.T) {
    packages := analyzeImports("./internal/handler/...")
    for _, pkg := range packages {
        for _, imp := range pkg.Imports {
            assert.NotContains(t, imp, "database/sql",
                "Handler %s imports database/sql directly", pkg.Name)
            assert.NotContains(t, imp, "gorm.io",
                "Handler %s imports GORM directly", pkg.Name)
        }
    }
}

Las fitness functions son poderosas para hacer cumplir reglas especificas, pero requieren esfuerzo inicial para escribirlas y mantenerlas. Verifican restricciones, no el modelo completo.

Herramientas de Analisis Estatico

Herramientas como ArchUnit (Java), Deptrac (PHP) y go-arch-lint (Go) analizan la estructura del codigo y hacen cumplir reglas de dependencia:

// configuracion de go-arch-lint
components:
  handler:
    in: ./internal/handler/
  service:
    in: ./internal/service/
  repository:
    in: ./internal/repository/

rules:
  handler:
    can_depend_on: [service]
  service:
    can_depend_on: [repository]
  repository:
    can_depend_on: []

Estas herramientas son excelentes para hacer cumplir arquitectura por capas dentro de un solo codebase. No abordan el drift entre servicios ni validan que el modelo de arquitectura coincida con el codigo.

Drift Scoring Automatizado

Este es el enfoque que toma Archyl. En lugar de verificar reglas especificas, valida todo el modelo de arquitectura contra el codebase:

  • ¿Cada sistema documentado coincide con un repositorio?
  • ¿Cada container documentado coincide con un directorio en el codebase?
  • ¿Cada elemento de codigo documentado hace referencia a un archivo que todavia existe?
  • ¿Ambos extremos de cada relacion documentada siguen siendo validos?

El resultado es un drift score (0-100) y un desglose detallado que muestra exactamente que ha derivado. Este es el enfoque mas completo porque valida el modelo completo, no solo restricciones especificas.

Las decisiones clave de diseno en la deteccion de drift de Archyl:

Ligero. No se consumen tokens de IA, no se lee contenido de archivos. Solo verificaciones de existencia de rutas de archivos contra la API del proveedor Git. Esto significa que el drift scoring toma segundos, no minutos.

Determinista. Mismo codebase, mismo modelo, mismo score. Sin variabilidad por temperatura del LLM o ingenieria de prompts.

Economico. Ejecutalo en cada push sin preocuparte por los costos. Cien calculos al dia esta bien.

Accionable. El desglose muestra exactamente que elementos derivaron, asi que sabes que corregir.

Como Prevenir el Architecture Drift

La deteccion es necesaria pero no suficiente. El objetivo es prevenir que el drift se acumule en primer lugar.

Haz que las Actualizaciones de Documentacion Sean Parte de la Definicion de Terminado

Si un cambio de codigo modifica la arquitectura, el PR deberia incluir una actualizacion de documentacion. Agrega una casilla de verificacion a tu plantilla de PR:

## Checklist
- [ ] Tests pasan
- [ ] Codigo revisado
- [ ] Documentacion de arquitectura actualizada (si aplica)

Esto no atrapa todo, pero establece la expectativa de que la documentacion es un entregable de primera clase.

Automatiza la Deteccion de Drift en CI

El mecanismo de prevencion mas efectivo es un gate de CI que falla cuando el drift supera un umbral:

on:
  push:
    branches: [main]

jobs:
  drift:
    runs-on: ubuntu-latest
    steps:
      - uses: archyl-com/actions/drift-score@v1
        with:
          api-key: ${{ secrets.ARCHYL_API_KEY }}
          organization-id: ${{ secrets.ARCHYL_ORG_ID }}
          project-id: 'your-project-uuid'
          threshold: '70'

Cuando el build falla porque el drift score bajo, alguien tiene que corregirlo antes de fusionar. La precision de la documentacion se vuelve tan innegociable como pasar los tests.

Comienza con un umbral bajo (50-60%) y aumentalo gradualmente a medida que el equipo construye el habito.

Usa Architecture as Code

Cuando tu modelo de arquitectura esta definido en un formato basado en texto (Structurizr DSL, Archyl YAML), puede versionarse junto con tu codigo. Esto significa:

  • Los cambios de arquitectura aparecen en pull requests
  • Los cambios son revisados por el equipo
  • El historial de la evolucion arquitectonica queda capturado en Git

Esto es significativamente mejor que la arquitectura definida en una herramienta GUI donde los cambios son invisibles e irrevisables.

Configura Alertas de Drift

Archyl soporta alertas por webhook para eventos de drift:

  • drift.score_computed: Se dispara en cada calculo de drift. Publica en un canal de Slack para visibilidad.
  • drift.score_degraded: Se dispara cuando el score baja 10+ puntos. Este es tu sistema de alerta temprana.

Configura estas alertas a un canal que tu equipo monitoree. La consciencia es el primer paso hacia la accion.

Realiza Revisiones de Arquitectura

Las revisiones de arquitectura mensuales o trimestrales cumplen multiples propositos:

  • Validar que la arquitectura documentada todavia coincide con la realidad
  • Identificar drift que las herramientas automatizadas no detectaron (drift de comportamiento, por ejemplo)
  • Discutir si los componentes que han derivado deben actualizarse en el codigo o en la documentacion
  • Revisar y actualizar ADRs para decisiones que puedan necesitar reconsiderarse

Adopta Reglas de Conformidad

Las reglas de conformidad definen restricciones arquitectonicas que siempre deberian ser verdaderas:

  • "El container frontend no debe depender del container de base de datos"
  • "Todas las APIs publicas deben pasar por el API gateway"
  • "Cada servicio debe tener su propia base de datos (sin bases de datos compartidas)"

En Archyl, las reglas de conformidad se definen en la plataforma y se hacen cumplir a traves de la funcion de verificacion de conformidad. Los agentes de IA pueden leer estas reglas via MCP y respetarlas al generar codigo.

Las reglas de conformidad son complementarias a la deteccion de drift. La deteccion de drift verifica si tu modelo coincide con la realidad. Las verificaciones de conformidad verifican si la realidad sigue tus reglas.

Architecture Drift vs. Architecture Erosion

Estos terminos estan relacionados pero son distintos:

Architecture drift es la divergencia entre documentacion e implementacion. El codigo puede estar perfectamente bien -- la documentacion simplemente esta mal.

Architecture erosion es la degradacion de la arquitectura en si. El codigo viola principios arquitectonicos, acumula deuda tecnica y se vuelve mas dificil de mantener. La erosion es un problema de calidad de codigo. El drift es un problema de precision de la documentacion.

A menudo coexisten. Cuando la documentacion deriva, los equipos pierden consciencia de la arquitectura prevista. Sin esa consciencia, hacen cambios que erosionan la arquitectura. El drift habilita la erosion.

Por eso la deteccion de drift importa mas alla de la precision de la documentacion. La documentacion precisa sirve como referencia que previene la erosion. Cuando todos pueden ver la arquitectura prevista, es mas probable que la mantengan.

Medir y Rastrear el Drift a lo Largo del Tiempo

Un drift score individual es util. Una tendencia es poderosa.

Establece una Linea Base

Ejecuta tu primer calculo de drift para establecer donde estas. No entres en panico si el score es bajo -- la mayoria de los equipos que no han mantenido activamente la documentacion de arquitectura veran scores entre 40-70%.

Define Objetivos

Establece objetivos realistas de mejora:

  • Mes 1: Mejorar de la linea base a 60% corrigiendo el drift mas obvio
  • Mes 3: Alcanzar 75% incorporando actualizaciones de documentacion en el flujo de trabajo
  • Mes 6: Mantener 80%+ a traves de gates de CI y revisiones regulares

Sigue la Tendencia

Archyl almacena cada calculo de drift con su desglose completo. La vista de historial de drift muestra una linea de tiempo de scores, para que puedas ver:

  • ¿El drift esta mejorando o empeorando con el tiempo?
  • ¿Un sprint o release especifico causo una caida significativa?
  • ¿El umbral de CI esta previniendo la degradacion?

Celebra las Mejoras

Cuando el equipo mejora el drift score, reconocelo. La documentacion de arquitectura es un trabajo poco agradecido. Hacer el progreso visible y reconocido refuerza el comportamiento.

El Rol de la Deteccion de Drift en el Desarrollo Asistido por IA

El auge de los agentes de programacion con IA hace que la deteccion de drift sea mas importante que nunca.

Los agentes de IA dependen cada vez mas de la documentacion de arquitectura para obtener contexto. A traves de protocolos como MCP, los agentes pueden leer tu modelo C4, ADRs y reglas de conformidad antes de generar codigo. Esto los hace mas efectivos -- generan codigo que se ajusta a tu arquitectura en lugar de adivinar.

Pero esto solo funciona si la documentacion es precisa. Un agente que lee un modelo C4 obsoleto y genera codigo basado en el producira codigo que se ajusta a la arquitectura equivocada. El agente amplifica el drift en lugar de prevenirlo.

La deteccion de drift crea el ciclo de retroalimentacion que mantiene honestos a los agentes de IA:

  1. El agente lee la arquitectura via MCP
  2. El agente genera codigo que se ajusta a la arquitectura documentada
  3. El codigo se fusiona, potencialmente cambiando la arquitectura real
  4. Se ejecuta la deteccion de drift y detecta cualquier divergencia
  5. El gate de CI falla si el drift supera el umbral
  6. El equipo actualiza la documentacion para reflejar la realidad
  7. El agente lee la arquitectura actualizada -- el ciclo se cierra

Sin el paso 4, el ciclo esta abierto. La documentacion se vuelve cada vez mas ficticia. Los agentes generan cada vez mas codigo que se ajusta a una arquitectura fantasiosa. La brecha se amplia con cada commit.

La deteccion de drift es el mecanismo que cierra este ciclo.

Como Empezar con la Deteccion de Drift

Si No Tienes Documentacion de Arquitectura

Comienza con el descubrimiento con IA. Conecta tu repositorio a Archyl, ejecuta el descubrimiento y revisa el modelo C4 generado. Esto te da un modelo base que es aproximadamente 70-80% preciso. Luego configura la deteccion de drift para mantener esa precision.

Si Tienes Documentacion Existente

Importa o recrea tu modelo de arquitectura en una herramienta que soporte deteccion de drift. Ejecuta el primer calculo de drift. El score te dira exactamente que tan precisa es tu documentacion actual -- y el desglose te mostrara que corregir primero.

Si Ya Estas Rastreando el Drift

Integra la deteccion de drift en CI. Define un umbral. Configura alertas. Comienza a rastrear tendencias. Haz del drift una metrica de equipo, no una auditoria puntual.

Sin Importar Donde Empieces

Lo mas importante es empezar. El architecture drift es como la deuda tecnica -- se acumula con el tiempo. Cuanto mas esperes para abordarlo, mas trabajo costara ponerse al dia. Pero a diferencia de la deuda tecnica, la deteccion de drift puede configurarse en minutos y proporciona valor inmediato.

Tu documentacion de arquitectura esta reflejando la realidad o no. Ahora puedes medir cual de las dos opciones es.


Mas informacion sobre el mantenimiento de la documentacion de arquitectura: Architecture Drift Score: Como Funciona | ¿Que es el modelo C4? | Documentacion de Arquitectura con IA. O prueba Archyl gratis y calcula tu primer drift score en minutos.