Introducción
DDD en la Banca.
Domain-Driven Design (DDD) es un enfoque poderoso para el desarrollo de software que alinea la implementación técnica con los dominios del negocio. Sin embargo, aplicar DDD en la banca—especialmente en entornos altamente regulados y con sistemas heredados—está lleno de desafíos.
Los bancos operan bajo restricciones estrictas: cumplimiento normativo, seguridad, gestión de riesgos y sistemas transaccionales complejos. Estas limitaciones hacen que la adopción de DDD sea difícil pero no imposible. Peor aún, algunos bancos creen erróneamente que adoptar estándares como BIAN (Banking Industry Architecture Network) resuelve sus problemas de modelado de dominio—especialmente en Latinoamérica, donde los dominios de servicio eurocéntricos de BIAN suelen chocar con las realidades locales.
En esta publicación, exploraré:
- Por qué DDD es difícil en la TI bancaria.
- Los riesgos de implementaciones de DDD a medias.
- Por qué BIAN no es un atajo para el modelado de dominio en Latinoamérica.
- Ejemplos reales de éxitos y fracasos.
Por qué DDD es difícil en la TI bancaria
Carga Regulatoria.
Los bancos operan en una de las industrias más reguladas. Cada sistema debe cumplir con:
- Basilea III (adecuación de capital).
- Normas AML/LD (anti-lavado de dinero).
- GDPR/Datos Personales (protección de datos).
- Leyes bancarias locales (ej. Dodd-Frank, SOX).
Problema: Las regulaciones suelen dictar el comportamiento del sistema, dificultando el modelado de dominios de negocio puros. Por ejemplo, un "Cliente" en términos de DDD podría dividirse en:
- Cliente-KYC (entidad de cumplimiento).
- Cliente-Transaccional (banca central).
- Cliente-Marketing (CRM).
Esta fragmentación conduce a modelos de dominio anémicos donde la lógica de negocio se filtra a servicios en lugar de residir en las entidades.
Sistemas heredados y Conflictos de Contextos Delimitados.
La mayoría de los bancos funcionan con:
- Mainframes (COBOL, CICS)
- Sistemas monolíticos de banca central (Temenos, Finacle, Flexcube)
- Flujos de procesamiento por lotes
Ejemplo: Un banco europeo intentó implementar DDD para un nuevo sistema de originación de préstamos, pero tuvo que integrarse con un mainframe de 30 años. El dominio "Préstamo" en el nuevo sistema tuvo que reconciliarse con:
- Una tabla de préstamos heredada (desnormalizada, actualizada por lotes)
- Un servicio de evaluación de riesgo (tiempo real, basado en motor de reglas)
- Un módulo de reporte regulatorio (base de datos separada)
Silos Organizacionales.
La TI bancaria suele estar dividida en:
- Banca Central (transacciones, libros contables)
- Riesgo y Cumplimiento
- Front Office (Ventas, CRM)
- Pagos y Tarjetas
Cada silo tiene sus propios modelos de datos, llevando a rupturas del lenguaje ubicuo. Por ejemplo:
- "Cuenta" significa un asiento contable en Banca Central pero un producto comercial en Banca Minorista.
- "Transacción" podría significar un pago, una operación bursátil o un ajuste de comisión.
Sin un mapeo claro de contextos, los equipos terminan con sistemas desorganizados y complejos.
Riesgos de Implementaciones Deficientes de DDD en Banca
Sobreingeniería con Patrones Tácticos.
Algunos equipos adoptan precipitadamente Agregados, Objetos-Valor y Event Sourcing sin comprender el dominio central.
Caso real: Un banco latinoamericano intentó implementar Event Sourcing para su sistema de pagos pero no consideró:
- Requisitos de conciliación (los bancos deben cuadrar libros diariamente).
- Trazas de auditoría regulatorias (los eventos por sí solos no eran suficientes).
Terminaron con dos sistemas: uno con Event Sourcing para procesamiento en tiempo real y otro basado en SQL para reporting. Doble costo de mantenimiento.
Contextos Delimitados Desalineados.
Si los contextos no están bien definidos, ocurre:
- Validaciones duplicadas (verificaciones KYC en múltiples sistemas).
- Datos inconsistentes (direcciones de clientes en CRM vs. Banca Central).
- Alto acoplamiento (cambios en un sistema rompen otro).
Ejemplo: Un banco construyó un contexto delimitado de "Onboarding de Clientes" pero no lo segregó adecuadamente de "Scoring Crediticio". Cuando cambiaron las regulaciones, ambos sistemas tuvieron que modificarse - frustrando el propósito del DDD.
El Error Conceptual sobre BIAN en Latinoamérica
Por qué se creó BIAN (para bancos globales).
BIAN es una arquitectura de referencia diseñada para estandarizar capacidades bancarias (ej. "Onboarding de Clientes", "Procesamiento de Préstamos") en dominios de servicio reutilizables. Busca:
- Reducir redundancias en software bancario.
- Mejorar interoperabilidad entre sistemas.
- Acelerar la transformación digital.
Por qué no resuelve los problemas de Latinoamérica.
Aunque BIAN provee una taxonomía útil, los bancos latinoamericanos enfrentan desafíos únicos:
-
Conflictos con regulaciones locales
-
El dominio "Evaluación de Riesgo de Partes" de BIAN asume normas tipo GDPR, pero los bancos latinoamericanos deben manejar:
- La LGPD de Brasil + circulares del Banco Central.
- Reportes UIF de Argentina (más estrictos que FATF).
- Ejemplo: Un banco mexicano adoptó el dominio "Acuerdo con Cliente" de BIAN pero debió extenderlo para incluir banderas de consentimiento del SAT—un requerimiento local.
-
El dominio "Evaluación de Riesgo de Partes" de BIAN asume normas tipo GDPR, pero los bancos latinoamericanos deben manejar:
-
Incompatibilidad con sistemas heredados:
-
BIAN asume servicios modulares, pero los bancos latinoamericanos suelen depender de:
- Sistemas centrales monolíticos (ej. Cobis, BancoPro).
- Chequeos de fraude personalizados (ej. base de fraudes del BACEN en Brasil).
- Caso real: Un banco colombiano mapeó el dominio "Ejecución de Pagos" de BIAN a su motor de pagos heredado... solo para descubrir que no manejaba conversiones de bolívares venezolanos (requerimiento ad-hoc frecuente).
-
BIAN asume servicios modulares, pero los bancos latinoamericanos suelen depender de:
-
Matices culturales en productos bancarios:
- El dominio "Cuenta de Depósito" de BIAN no considera:
- Las "Poupanças" brasileñas (ahorros ajustados por inflación).
- Los "Plazos Fijos UVA" argentinos (plazos fijos indexados al dólar).
Falsa esperanza: Algunos bancos creyeron que BIAN:
- Eliminaría el trabajo de modelado de dominio (pero BIAN es un marco, no un modelo de dominio).
- Reemplazaría la lógica de negocio local (pero siempre aparecen reglas locales de impuestos/divisas).
Lección: BIAN es una guía de referencia, no una solución lista para usar.
Cómo implementar DDD correctamente en banca
Usa BIAN como punto de partida no como dogma.
- Ejemplo: Mapea el dominio "Aprobación de Préstamos" de BIAN a tus reglas de suscripción, pero agrega modelos de riesgo locales (ej. scoring SCR de Brasil).
Combina BIAN con Contextos Delimitados Locales.
- El "Acuerdo con Cliente" de BIAN → "Cliente + Cumplimiento Tributario" en LatAm (nuevo contexto)
Prioriza dominios centrales sobre cumplimiento con BIAN.
- Si los pagos transfronterizos son tu diferenciador, modelalos primero—aunque el dominio "Orden de Pago" de BIAN parezca restrictivo.
Conclusión
DDD en banca es complejo, y BIAN—aunque útil—no es una solución mágica.
Los bancos latinoamericanos deben:
- Adaptar BIAN a realidades locales (no asumir correspondencias 1:1).
- Modelar explícitamente particularidades regulatorias (¡son parte del dominio!).
- Evitar tratar BIAN como reemplazo de DDD (es un complemento).
Reflexión final: BIAN es como una navaja suiza—útil, pero aún necesitarás un machete para la jungla latinoamericana.