Script vs Pipeline: Por qué tu cronjob no es suficiente
Hoy: la diferencia que cambia todo.

Platform Engineer + CNCF Ambassador, AWS community builder. I design scalable cloud-native platforms and love making teams faster and safer.
Ayer te prometí explicar por qué tus herramientas de Platform Engineering no son suficientes para ML. Pero antes, hablemos de cuando alguien de PE pide automatizar o pregunta si ya esta automatizado, por alguna razón la respuesta es:
Por que? .. porque puedo y porque quiero:
# crontab
20 4 * * * cd /ml && python train.py
"Ya está automatizado", me dicen, no sean así, quieran a us PEs, hay algunos que siguen encerrados en su mundo donde yo mando, donde es mi infra, es mi workflow… pero somos mas los buenos xD.
Hace tiempo, un Data Scientist me mostró su trabajo (Los ilovesomucho a mis compañeros DS, de verdad xD ):
# train.py
import pandas as pd
from sklearn.ensemble import RandomForest
# Leer datos
df = pd.read_csv('data.csv')
# Entrenar
model = RandomForest()
model.fit(df[features], df['target'])
# Guardar
model.save('model.pkl')
```
"Solo ejecuta esto en producción", me dijo.
Yo, ingenuo, pensé: "Easy. Lo meto en un container, un cronjob, y listo", no ?.
3 meses después:
El modelo degradó y nadie sabe por qué
"data.csv" cambió y rompió todo
No sabemos qué versión del modelo está en producción
No podemos reproducir los resultados
Cada retrain es manual y reza para que funcione
¿El problema? Un script no es un pipeline.
La diferencia fundamental:
🔴 Script (train.py):
python train.py
# Todo en un solo archivo
# Sin separación de responsabilidades
# Sin trazabilidad
# Sin recuperación de errores
🟢 Pipeline orquestado:
1. INGEST → Trae datos versionados
2. VALIDATE → Verifica calidad
3. PREPROCESS→ Transforma de forma reproducible
4. TRAIN → Entrena con hiperparámetros trackeados
5. EVALUATE → Valida métricas vs baseline
6. REGISTER → Solo si pasa el threshold
¿Por qué importa?
Con un script:
Si falla en el minuto 45, pierdes todo
No sabes qué datos usaste
No puedes reproducirlo
Debugging = rezar y
print()
Con un pipeline:
Cada paso es independiente y reproducible
Falla el paso 3? Reinicia desde ahí
Trazabilidad completa: datos, código, parámetros
Debugging con logs estructurados de cada etapa
El día que aprendí esto:
Un modelo empezó a fallar en producción.
Con el script: "No sé qué cambió, vuelve a entrenar todo y cruza los dedos"
Con el pipeline: "Ah, los datos de entrada fallaron en validación. El modelo anterior sigue sirviendo. Arreglo los datos y solo re-ejecuto desde INGEST"
Esa es la diferencia entre firefighting y engineering.
Mañana te cuento: Qué hace que un pipeline sea realmente un pipeline (spoiler: no es solo dividir tu script en funciones)
Y te presento a los orquestadores: Airflow, Kubeflow, Prefect, Dagster.
¿Cuál usar? Depende. Mañana vemos por qué.
Pregunta para ti: ¿Tu equipo de ML tiene scripts o pipelines? (Pista: si no lo sabes con certeza, probablemente son scripts)


