All work
02Production system — professional experience

Customer Queuing System

A Redis-backed asynchronous processing layer at Caisse Manager that takes an order from intake through background workers, emitting the status events that downstream services — including the Kitchen Display System — consume in real time.

Role

Full-Stack Developer, Caisse Manager — order queue processing

Context

Part of the same Caisse Manager restaurant platform as the POS system above: before an order reaches the kitchen display, it passes through a queue-based processing layer that takes it from the POS/backend, runs it through background workers, and emits the status events that downstream services — including the Kitchen Display System — consume.

System

Orders are pushed onto a Redis-backed Bull queue as they're placed. Workers process each job — validating it and moving it through its status transitions — off the request path, then emit the resulting state as a real-time event that the Kitchen Display System and other connected services pick up.

Problem

Order intake needed to stay fast and responsive even when downstream processing — validation, status transitions, notifying every connected service — took longer than a single request should block for, without losing or duplicating orders under load.

Engineering challenge

Keeping order-status transitions consistent for every consumer (the kitchen display and other connected services) when the processing itself happens asynchronously, off the request path — a job that runs twice, or an event that arrives out of order, shows up as a real operational problem in a restaurant, not just a log line.

My contribution

  • Worked on the Redis-backed Bull queue and worker layer that processes orders after intake from the POS/backend.
  • Implemented order-status transitions as queued jobs, and the real-time events that notify downstream services — including the Kitchen Display System — of each change.
  • Investigated and fixed reliability issues in queue and worker processing under load.

Technical decisions

  • Processed order-status changes as background jobs rather than inline in the request path, so intake stayed fast regardless of downstream processing time.
  • Used a single real-time event layer so every downstream consumer — the kitchen display included — reacts to the same state change, rather than each service polling for updates independently.

Technology

Node.js
The order-intake and status-processing service.
Redis
Backing store for the Bull queue.
Bull
Background workers that process order-status transitions off the request path.
Socket.IO
Broadcasts order-status events to downstream services in real time.
Docker
Containerized deployment, consistent with the rest of the Caisse Manager stack.

Result

A queue-based processing layer that decouples order intake from downstream status handling, feeding the Kitchen Display System and other connected services consistently.

What I learned

Decoupling intake from processing is what makes a system like this resilient — the queue is what keeps a slow downstream consumer from becoming the restaurant's bottleneck.

Architecture
Intake
POS / Backend
Queue
Redis
Bull queue
Processing
Worker
Downstream
Real-time events
KDS / connected services