Transactional Outbox — Solving the Dual-Write Problem
The problem: two writes that can't be atomic
Placing an order must (1) save the order to the DB and (2) publish an OrderPlaced event to a broker. They're two systems with no shared transaction — so a crash between them loses the event, or a rollback leaves a phantom event. This is the dual-write problem.
The fix: write the event to an outbox table in the SAME transaction
Insert the event as a row in an outbox table inside the same local DB transaction as the business change — now both commit or both roll back, atomically. A separate relay then publishes outbox rows to the broker and marks them sent. Two relay styles:
- Polling publisher — periodically read unsent rows. Simple; adds DB load.
- CDC log-tailing — tail the DB's WAL/binlog (e.g. Debezium). Efficient; this is where Outbox meets CDC.
Takeaways
- You can't atomically write a DB and a broker → write the event to an outbox table in the same transaction, then relay it.
- Guarantees at-least-once publishing (consumers must be idempotent). It's how Sagas emit events reliably.
Re-authored from-scratch; diagram hand-authored (SVG) for this guide.
🤖 Don't fully get this? Learn it with Claude
Stuck on Transactional Outbox — Solving the Dual-Write Problem? Open Claude, copy a block below, and it'll teach you this exact concept — visually and interactively.
Build the mental picture, not memorization.
I just read a lesson on **Transactional Outbox — Solving the Dual-Write Problem** (System Design) and want to truly understand it. Explain Transactional Outbox — Solving the Dual-Write Problem from first principles using ONE vivid real-world analogy and a visual mental model — draw it as ASCII art or a clear step-by-step diagram — with a concrete example using real numbers. Then ask me one question to check I got the mental picture, and wait for my reply. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
Socratic — adapts to where you're stuck.
Teach me **Transactional Outbox — Solving the Dual-Write Problem** interactively. Ask me ONE guiding question at a time, wait for my answer, and adapt to my confusion — build the idea with me step by step instead of explaining it all at once. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
Active recall exposes what you missed.
Quiz me on **Transactional Outbox — Solving the Dual-Write Problem** with 5 questions, easy to tricky, ONE at a time. Tell me if each answer is right; at the end, explain clearly what I got wrong and why. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
Intuition + hook + flashcards for long-term memory.
Help me remember **Transactional Outbox — Solving the Dual-Write Problem** for the long term: give the one-sentence intuition, a memorable hook/mnemonic, a tiny worked example, and 3 active-recall flashcards (Q -> A). If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.