Volver a proyectos

Motor de recurrencia y orquestación asíncrona de tareas

Buk, 2025 — De encuestas manuales y puntuales a automatización 100% recurrente con un motor de reglas reutilizable en toda la plataforma

S

Situación

En la plataforma SaaS de gestión de RR. HH. de Buk (con presencia en múltiples países de Latinoamérica y miles de usuarios concurrentes), el módulo de clima laboral requería automatizar la recolección continua de feedback. Hasta ese momento, las encuestas solo podían ejecutarse de forma puntual o manual, lo que limitaba la capacidad de las empresas para medir el pulso de sus equipos de forma periódica a lo largo del tiempo.

T

Tarea

Como champion/líder del proyecto, debía diseñar un motor de recurrencia desacoplado y reutilizable (capaz de manejar reglas complejas de repetición al estilo de Google Calendar) e implementar un sistema de orquestación de background jobs capaz de activar, reprogramar y procesar encuestas recurrentes sin generar inconsistencias de datos ni sobrecargar la infraestructura.

A

Acción

  1. Abstracción del dominio (motor de recurrencia): diseñé un componente desacoplado y agnóstico del módulo de encuestas para calcular reglas de repetición (rrule, frecuencias, intervalos y excepciones), aislando la complejidad matemática del calendario y dejando la lógica disponible para otros módulos de la plataforma.
  2. Modelado de datos para respuestas múltiples: rediseñé el modelo de datos para separar la definición/plantilla de la encuesta de sus instancias de ejecución, permitiendo que los colaboradores respondan N veces la misma encuesta en distintos periodos manteniendo el historial limpio.
  3. Orquestación asíncrona y ciclo de vida de los jobs: diseñé el despacho de future tasks en colas de trabajo en segundo plano para activar las encuestas en las fechas y horas exactas programadas, e implementé la gestión de su ciclo de vida para que, si un administrador edita o cancela una regla de recurrencia en vivo, el sistema cancele, recalcule y reordene dinámicamente las tareas futuras.
  4. Garantía de idempotencia: implementé controles de concurrencia para asegurar que cada instancia de encuesta o notificación masiva se genere exactamente una vez por periodo, incluso ante reintentos de la cola de jobs.

Compromisos de ingeniería (trade-offs)

  • Motor de recurrencia desacoplado vs. solución ad hoc en el módulo: invertir en abstraer la lógica de repetición en un componente agnóstico, en lugar de programar fechas fijas dentro de la tabla de encuestas, asumió mayor complejidad de diseño inicial a cambio de cero duplicación de código futura y alta mantenibilidad.
  • Programación dinámica de jobs vs. evaluación por lotes (cron diario): programar e iterar jobs asíncronos específicos para cada evento recurrente requirió lógica cuidadosa para invalidar y reorquestar tareas cuando el usuario edita la configuración, pero evitó crons pesados que escanearan cada noche toda la base de datos buscando encuestas pendientes.
R

Resultado

Métrica Estado inicial Tras la implementación
Capacidad de programación 100% manual / ejecuciones puntuales 100% automatizado con reglas de recurrencia complejas
Reutilización de código Lógica acoplada a un módulo específico Motor de recurrencia centralizado y reutilizable en toda la plataforma
Procesamiento de tareas Inexistente para eventos periódicos Orquestación asíncrona idempotente con soporte para edición en vivo

Se eliminó la carga operativa manual para los equipos de gestión de personas en cientos de empresas clientes, habilitando la medición continua del clima laboral y aumentando el engagement con el módulo.