CASE STUDY · 2023 · AUTOMATION
DISPATCH
Internal job router — reliably ferries work between six SaaS tools.
- ROLE
- Solo
- YEAR
- 2023
- STACK
- Node · Temporal · Postgres
PROBLEM
A small ops team had stitched together their tooling with Zapier, three Make scenarios, a Lambda someone wrote on holiday, and a Slack workflow that everyone was afraid to touch. When a single integration drifted, work disappeared. Nobody could tell you, on a given Tuesday, where a given task lived.
The asks were unromantic: durable retries, idempotency, observability, the ability to add a new SaaS without re-architecting the world.
APPROACH
Modelled every cross-system action as a typed Job with explicit inputs, side-effects, and a contract for "done." Jobs are queued onto Temporal so retries are durable and visible; failures are addressable, not just logged.
Wrote thin adapters for each SaaS instead of a generic glue layer — six adapters, each ~80 lines, each owning its own auth, pagination, and rate-limit dance. New integration = one adapter, one schema, one test fixture.
Built an internal "where did this go" view: a single Slack-friendly URL per job that shows the timeline, retries, payloads at each hop, and the human in the loop if any.
OUTCOME
Retired the Zapier + Make + holiday-Lambda triumvirate. Net infra spend dropped; net legibility went up.
Mean-time-to-diagnose for "where did the task go" dropped from "ask three people" to one URL.
Still humming. Last new integration took a Friday afternoon.
CREDITS
- Engineering & ops
- João M. Mota
ELSEWHERE IN THE ARCHIVE