¿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