The pitch for OTP is always the same: "let it crash," nine nines of uptime, Erlang running phone switches. That's all true and also completely useless when you're staring at a blank mix new project wondering how to actually structure the thing.
This tutorial skips the theory tour. We build something real: a distributed job processing system where a Node.js API enqueues work into Redis, and an Elixir/OTP application consumes it — with a supervision tree that keeps the whole thing running when individual workers die, when Redis blips, and when a job payload is malformed.
By the end you'll have:
A Node.js producer API with Redis streams (not just lists — we want consumer groups)
An Elixir Application with a proper OTP supervision tree
A QueueConsumer GenServer that polls Redis and dispatches work
A WorkerSupervisor ( DynamicSupervisor ) that spawns and monitors per-job workers
A JobWorker GenServer that processes a job, retries on failure, and dead-letters after max attempts
A Telemetry integration so…