¿POR QUÉ ESTE CURSO?
Si trabajas en sistemas reales, probablemente te enfrentas a:
- Modelos que no encajan con la realidad
- Código difícil de evolucionar
- Reglas de negocio implícitas o inconsistentes
- Decisiones técnicas difíciles de justificar Este curso aborda estos problemas con casos que simulan presión, ambigüedad y restricciones reales.
DE QUÉ VA EL CURSO
Durante el programa trabajarás en situaciones como las siguientes:
- Elección entre consistencia fuerte vs eventual condicionadas por UX, costes cloud, SLOs, etc
- Cómo justificar un modelo “imperfecto” en base al time-to-market, coste organizativo, deuda técnica o deuda organizativa
- Cómo evolucionar un modelo sin romper contratos existentes (técnicos u organizativos)
- Cómo identificar modelos deficientes
- Cómo refactorizar modelos anémicos hacia modelos ricos
- Estrategias para gestionar consistencia en sistemas distribuidos
- Modelado conceptual preciso, definición de invariantes y reglas de negocio
- Aplicación práctica de Domain-Driven Design
- Técnicas de diseño para mejorar la mantenibilidad y extensibilidad
- Uso incorrecto de agregados y sobrecarga de servicios de aplicación
- Consistencia vs disponibilidad
- Pureza del modelo vs pragmatismo técnico
ENFOQUE
El curso combina:
- Concept Design y su aplicación práctica en lenguajes como Java
- DDD aplicado
- Ejercicios prácticos tipo “problema real”, con restricciones de deuda técnica, deuda organizativa, Ley de Conway
- Sesiones iterativas: Modelado → feedback → rediseño → implementación (conceptual, pseudocodigo, diagramas)
- Design reviews y comparacion de soluciones entre equipos
En este curso no vamos a implementar código. Es un curso de Diseño y Arquitectura, donde el enfoque es principalmente el desarrollo del criterio para diseñar y evaluar soluciones complejas.
Sesión 1 — Modelado
- Técnicas para descubrir invariantes ocultos en código
- Validación de modelos contra datos y simulación de modelos
- Ejemplos de modelos incorrectos vs correctos
- Conceptos, relaciones, invariantes, detección de ambigüedades
- Detección de “falsos invariantes” por limitaciones técnicas u organizativas
- Evolución de modelos incorrectos
Sesión 2 — Diseño
- Diseño de agregados en sistemas distribuidos
- Mapeo correcto entre contextos, conceptos y cargas de trabajo/sistemas
- Integración entre bounded contexts (context mapping)
- Eventos de dominio, outbox pattern y consistencia eventual
- Agregados, bounded contexts
- Consistencia, disponibilidad, costes. Impacto en UX y OX
- Cuándo no hacer DDD
Sesión 3 — Práctica
- Caso completo end-to-end: Monolito a sistema distribuido en servicios
- Introducción de restricciones reales: tiempo, legacy, presión de negocio
- Caso práctico: Evaluación de decisiones de arquitectura afectadas por UX, DX y OX
- Introducción a la evaluación de riesgos
QUÉ TE LLEVAS
- Mejorar el criterio técnico para diseñar bajo ambigüedad, conflicto y restricciones
- Herramientas para mejorar modelos reales
- Capacidad para detectar problemas estructurales antes de que escalen a incidentes
NIVEL REQUERIDO
Este curso está orientado a:
- Desarrolladores senior
- Tech leads
- Arquitectos
No es adecuado para perfiles junior. Se asume experiencia en producción con Java, SQL/NoSQL, CI/CD y sistemas distribuidos.
RESULTADO ESPERADO
Al finalizar, tendrás herramientas para:
- Modelar dominios complejos bajo restricciones de tiempo, deuda técnica y deuda organizativa
- Definir reglas de negocio explícitas y argumentar su validez ante distintas perspectivas técnicas
- Diseñar sistemas más coherentes desde las perspectivas del UX, DX y OX
- Argumentar decisiones técnicas con claridad utilizando criterios de coste, riesgo y extensibilidad
IMPORTANTE
Este no es un curso de recetas ni de herramientas, frameworks o librerias. El curso está orientado a Diseño y Arquitectura, no a Ingenieria.
Previo a la realización del curso, se hace una encuesta para conocer el nivel de los participantes, y así conocer mejor las fortalezas y puntos de mejora del grupo.
COMO REALIZAR EL CURSO
Escribe un correo a cursos@modernsoftwaredesign.net