Módulo 5: Scheduling y Tiempo

Scheduling Dependiente: Workflows en Cadena

Descripción de la cápsula

A veces no quieres workflows independientes — quieres workflows que se ejecutan en cadena, donde el segundo espera a que el primero termine. Ejemplo: workflow A genera datos a las 6am, workflow B procesa esos datos a las 7am (asumiendo que A ya terminó), workflow C envía reporte a las 8am.

Hay varias formas de hacer scheduling dependiente. En esta cápsula vas a ver las 3 estrategias principales, sus trade-offs, y cuándo usar cada una.


Lo que vas a aprender

  • Estrategia 1: Schedule offset — workflows con horarios escalonados
  • Estrategia 2: Execute Workflow al final — chain explícita
  • Estrategia 3: Webhook + Schedule mixto — más robusto
  • Decidir entre las 3 según el caso

Estrategia 1: Schedule offset (más simple)

Workflows independientes con schedules escalonados que dejan tiempo entre cada uno.

A: 6:00 AM (estimas tarda 30 min)
B: 7:00 AM (asume A terminó)
C: 8:00 AM (asume B terminó)

Pros

  • Simple — sin coupling entre workflows
  • Workflows independientes (puedes desactivar uno sin afectar otros)

Contras

  • Frágil: si A tarda más de esperado, B inicia con datos incompletos
  • Ineficiente: B espera aunque A terminó en 10 min
  • No hay verificación real de que A completó

Cuándo usar

  • Workflows con duración predecible y estable
  • No crítico que B inicie inmediatamente después de A
  • Bajo volumen / sin urgencia

Estrategia 2: Execute Workflow al final (chain)

Workflow A termina llamando explícitamente a Workflow B.

Workflow A:
[Schedule 6am] → [procesamiento] → [Execute Workflow: B]

Workflow B:
[Execute Workflow Trigger] → [procesamiento] → [Execute Workflow: C]

Pros

  • Garantía: B solo corre después de A
  • Eficiente: no hay esperas innecesarias
  • Explícito: la cadena es visible en el código

Contras

  • Coupling: A "conoce" a B. Si renombras B, A se rompe
  • Sub-workflows deben estar configurados como callable

Cuándo usar

  • Workflows que siempre corren en cadena
  • Duración variable de A
  • Necesitas garantía de orden

Estrategia 3: Webhook + Schedule (más robusto)

Workflow A al terminar manda un webhook que dispara Workflow B.

Workflow A:
[Schedule 6am] → [procesamiento] → [HTTP POST a webhook de B]

Workflow B:
[Webhook Trigger] → [procesamiento]

Pros

  • Desacoplado: B no sabe de A directamente
  • Escalable: múltiples workflows pueden disparar B
  • Flexible: B puede dispararse desde cualquier lugar que conozca su webhook URL

Contras

  • Más complejo de configurar
  • Auth del webhook crítico
  • Si A falla a mitad, B nunca se dispara (a diferencia de Schedule fixo)

Cuándo usar

  • Workflows que podrían correr en cadena pero también independientes
  • Sistemas con múltiples triggers
  • Setup más serio / productivo

Comparación rápida

EstrategiaSimpleGarantía ordenAcoplamientoEficiente
Schedule offset
Execute Workflow⚠️⚠️
Webhook + Schedule✅ desacoplado

Patrón híbrido: Schedule + verification

Una variante de Estrategia 1 más robusta:

Workflow B:
[Schedule 7am]
   │
[Verificar: ¿A terminó OK hoy?] ← lectura de un flag/Sheet
   │
[IF: A completó]
├─ TRUE → procesar
└─ FALSE → [Wait 15 min] → re-verificar (o alertar)

B verifica que A completó antes de procesar. Si A no ha terminado, espera o alerta.

Workflow A debe escribir un flag al terminar (Sheet append, write file, set var compartida).


Caso de uso: pipeline diario

Escenario:

  1. A: Sync de datos desde CRM externo a Sheet local (6:00am, ~30 min)
  2. B: Limpia/normaliza los datos (~tras A)
  3. C: Genera reportes y manda Slack (~tras B)

Implementación con Estrategia 2

Workflow A:
[Schedule 6am]
   │
[Sync con CRM]
   │
[Execute Workflow: B]


Workflow B:
[Execute Workflow Trigger]
   │
[Normalizar datos]
   │
[Execute Workflow: C]


Workflow C:
[Execute Workflow Trigger]
   │
[Generar reportes]
   │
[Slack]

Cadena explícita. Si A tarda 50 min, B inicia a las 6:50am sin problema.


Cuándo dependencia es overkill

A veces tu cadena no requiere ser estricta. Casos:

  • A y B independientes en datos: pueden correr a la vez
  • B puede leer datos viejos de A si están disponibles: falla soft
  • Workflows que tocan distintos sistemas sin overlap

Si no hay dependencia real, mantén workflows independientes con Schedule independientes. Menos complejidad.


Trampas comunes

Trampa 1: Asumir tiempo fijo (Estrategia 1)

Qué pasa: Configuras A 6am, B 7am asumiendo A tarda 30 min. Un día A tarda 70 min por volumen alto. B procesa datos parciales.

Cómo evitar: Verificar empíricamente la duración. Si varía, usar Estrategia 2 o 3.


Trampa 2: Chain demasiado larga

Qué pasa: A → B → C → D → E → F en cadena. Si falla en B, no llegan a C-F. Difícil de debuggear.

Cómo evitar:

  • Limitar chains a 3-4 workflows
  • Considerar consolidar en menos workflows si todos hacen parte del mismo pipeline lógico

Trampa 3: Loop accidental (A → B → A)

Qué pasa: Configuras A llama B, después accidentalmente B llama A. Loop infinito.

Cómo evitar: Diseñar la cadena con dirección clara antes de implementar. Revisar.


Trampa 4: B asume A pero A no escribe flag

Qué pasa: B verifica que A completó leyendo un flag. A nunca escribe el flag al final. B siempre cree que A falló.

Cómo evitar: En A, asegurar que el flag se escribe al final (después del procesamiento exitoso), no al inicio.


Ejercicio: diseñar pipeline

Caso:

  • A: descargar nuevos pedidos de Shopify (cada 4 horas)
  • B: para cada pedido, generar factura (debería iniciar después de A)
  • C: enviar emails de facturación (después de B)

¿Qué estrategia usarías? ¿Por qué?

Solución sugerida

Estrategia 2 (Execute Workflow) o Estrategia 3 (Webhook).

  • Cadena clara A → B → C
  • Duración variable (depende de cuántos pedidos)
  • Necesita garantía de orden (factura antes que email)

Estrategia 1 (Schedule offset) sería frágil — pedidos picos llevarían B a iniciar con datos incompletos.


Resumen

  • 3 estrategias de scheduling dependiente: offset, Execute Workflow, Webhook
  • Schedule offset simple pero frágil
  • Execute Workflow garantiza orden con acoplamiento ligero
  • Webhook más robusto y desacoplado pero más complejo
  • Patrón híbrido: Schedule + verification para casos intermedios
  • 4 trampas: tiempo fijo asumido, chain larga, loop, flag mal escrito

Lo que sigue: DST y edge cases — los detalles que importan en producción.


Creado: Mayo 11, 2026 Versión: 1.0