Lección 6: Flujos de trabajo del mundo real en la práctica
Objetivos de aprendizaje:
- Combinar descomposición de tareas, gestión de estado y manejo de errores para diseñar flujos de trabajo completos
- Entender los patrones de flujo de trabajo detrás de tres escenarios de nivel producción
- Dominar las técnicas de observabilidad y depuración de flujos de trabajo
Requisitos: Lección 5: Manejo de errores y estrategias de reintento
De la teoría a la práctica
A lo largo de las primeras cinco lecciones cubrimos las piezas con las que se arma un flujo de trabajo: pasos, estado, descomposición y manejo de errores. Ahora las vamos a juntar y construir tres flujos de trabajo de nivel producción sacados de escenarios reales.
Los tres flujos de trabajo de esta lección:
- Pipeline de refactorización de código: refactorizar código heredado hacia patrones modernos, cubriendo análisis, planificación, ejecución, pruebas y verificación
- Pipeline de generación de documentación: generar automáticamente documentación de API a partir del código, cubriendo extracción, generación de ejemplos, renderizado y publicación
- Flujo de automatización de pruebas: un flujo de trabajo de pruebas de punta a punta, cubriendo preparación del entorno, pruebas en paralelo, agregación de resultados y generación del reporte
Cada flujo de trabajo muestra:
- Una descomposición completa de la tarea
- El diseño de la gestión de estado y de los puntos de control
- Estrategias de manejo de errores y de recuperación
- Soporte para observabilidad y depuración1
Escenario 1: pipeline de refactorización de código
Requisitos
Refactorizar un proyecto de frontend heredado de 50 componentes, pasándolos de componentes de clase a componentes de función + Hooks.
Desafíos:
- Los componentes dependen unos de otros, así que no puedes refactorizarlos en un orden arbitrario
- La refactorización puede romper el comportamiento, así que necesita verificación con pruebas
- 50 componentes no se pueden terminar en una sola conversación; necesitan procesamiento en paralelo2
Descomposición de la tarea
El flujo de trabajo tiene 6 fases. Las dos primeras pueden procesar componentes en paralelo; las fases posteriores corren en orden de dependencia.
Implementación completa
Puntos clave del diseño
1. Estrategia de puntos de control: guardar cuando termina cada lote, para no volver a refactorizar trabajo ya hecho
2. Ejecución en paralelo: los componentes del mismo lote se pueden refactorizar en paralelo (no dependen entre sí)
3. Mecanismo de reintento: que un componente falle no afecta a los demás; usa Promise.allSettled para recolectar todos los resultados
4. Ciclo de arreglo: ante una falla de pruebas, intenta arreglar automáticamente, hasta 3 veces
5. Observabilidad: cada fase deja registros claros y el estado se persiste en almacenamiento externo3
Escenario 2: pipeline de generación de documentación
Requisitos
Generar documentación de API completa para un servicio con 30 endpoints REST, incluyendo descripciones de los endpoints, ejemplos de petición y respuesta, y explicaciones de los códigos de error.
Descomposición de la tarea (patrón fan-out/agregación)
Características clave:
- Patrón fan-out/agregación: 30 endpoints generan su documentación en paralelo y al final se agrega todo
- Sin estado: la tarea es lo bastante rápida (< 10 minutos) como para no necesitar puntos de control
- Idempotente: puedes volver a correrlo cuando quieras y sobrescribir el archivo de salida1
Escenario 3: flujo de automatización de pruebas
Requisitos
Correr pruebas de punta a punta en varios entornos (local, staging, producción), recolectar los resultados de las pruebas y las métricas de rendimiento, y generar un reporte comparativo.
Implementación completa
Características clave:
- Pruebas en paralelo: varios entornos corren sus pruebas al mismo tiempo, lo que recorta muchísimo el tiempo total
- Tolerancia a fallas: que un entorno falle no afecta a los demás
- Reintento inteligente: las pruebas fallidas se reintentan automáticamente (los tropiezos de red y las fallas transitorias son comunes)
- Análisis de fallas: las sugerencias de arreglo para las fallas se generan automáticamente1
Observabilidad del flujo de trabajo
Un buen flujo de trabajo debería poder responder, en cualquier momento:
- ¿Qué tan avanzado está? (X/Y listos)
- ¿Cuánto más va a tardar, probablemente?
- ¿Con qué errores se topó?
- ¿Dónde están los cuellos de botella de rendimiento?
Si no puedes responder esto, tus registros y tu seguimiento del estado no son lo bastante detallados. Depurar un flujo de trabajo se monta sobre esos registros, no sobre adivinar.
Implementar la observabilidad
Ese pedacito dentro de summary() que ordena por duración e imprime solo los tres pasos más lentos es la forma más simple de perfilado de rendimiento: mide cuánto tardó cada paso y después encuentra el cuello de botella a partir de los datos, en lugar de adivinar qué paso es lento.
Felicidades por terminar el curso de Diseño de flujos de trabajo con agentes.
Ahora manejas:
- Los conceptos centrales de los flujos de trabajo y dónde encajan
- Las tres estrategias de descomposición de tareas
- La gestión de estado y el mecanismo de puntos de control
- El manejo de errores y las estrategias de reintento
- Tres flujos de trabajo de nivel producción salidos de escenarios reales
Próximos pasos:
- Practica un flujo de trabajo simple (< 5 pasos) en alguno de tus proyectos
- Agrega complejidad paso a paso (paralelismo, puntos de control, manejo de errores)
- Comparte tu diseño de flujo de trabajo y recibe comentarios de la comunidad
- Explora temas más avanzados (flujos de trabajo distribuidos, frameworks de orquestación de flujos de trabajo, editores visuales de flujos de trabajo)