Async Workflows: Sidekiq vs. Temporal


This is a write-up of my Rocky Mountain Ruby 2026 lightning talk.

The candidates

The November election is a month away. Here are the “candidates”:

A Denver ballot drop-off box

CandidateAsync job libraryLicense
IncumbentSidekiqMIT
ChallengerTemporalMIT
Up and comersPostgres-backed durable executionMIT / Apache 2.0 / varies

Sidekiq is the Ruby standard for background jobs since 2012.

Temporal is the up-and-comer, with a Ruby-sdk as of September 2025.

The up and comers are a growing group: DBOS, pg_durable by Microsoft, ResonateHQ, Absurd Workflows, Obelis, and others. They promise durable execution managed via a relational database rather than a separate orchestration server.

The demo

The demo is of running a background check process, which is comprised of 10 async jobs that must complete for a Job candidate to be accepted, start work, and get their first paycheck.

The demo ran in Sidekiq, Temporal, and Postgres-backed durable execution (DBOS).

The incumbent: Sidekiq

Sidekiq Web UI showing 30 enqueued BackgroundCheck jobs in the default queue

Tracing one background check across many jobs is difficult. We call it the “daisy chain”, where one Background Job triggers another Background Job:

A tangle of daisy-chained power strips and cables

The challenger: Temporal

A Workflow is one thread that ties all the Activities together:

Temporal timeline of a background check workflow, with parallel SendSearchActivity runs

Durability: configurable retries

Here the SendSearchActivity is failing:

Temporal timeline showing SendSearchActivity at attempt 6 while other Activities have completed

After the bug is fixed, the Activity and Workflow complete successfully:

Temporal timeline showing SendSearchActivity succeeding on the 7th attempt and the remaining Activities completing

Managing agent workflows

Temporal is also a good fit for agent workflows: failing API requests, and remembering the AI conversation context, with ability to resume days or weeks later.

Temporal event history of an agent workflow that creates a Zendesk ticket and prompts an AI

Cross-language support

The last Activity is handled by a Rust worker:

Temporal Activity Task Scheduled event for HandlePossibleFcraDisputeActivity on the background-check-rust task queue

Traces to Honeycomb

Honeycomb traces for the StartWorkflow and RunActivity spans of the background check workflow

The up and comers: DBOS

The same background check running as a Postgres-backed DBOS workflow:

Terminal output of a DBOS background check workflow for Harry Kane

Election Results

The informal “election” poll at RMR was close. With a plurality although not a majority, the winnner was… Sidekiq! 🗳️