BullMQ vs Temporal for Node.js Production Workflows
BullMQ handles fire-and-forget jobs. Temporal handles crash-safe, stateful workflows. I picked the wrong one and it cost me a weekend. Here is how I choose.

System Architect
“There are no right answers in architecture — only tradeoffs.” — Mark Richards
Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away.
$ cat /var/log/impact.log
Srabutan.com
Jan 2026 — Present | Indonesia
CITT Services
Jan 2014 — Dec 2025 | Dallas, USA
Wirecard (PT. Aprisma Indonesia)
Aug 2011 — Dec 2013 | Jakarta, Indonesia
$ ls -la ~/projects/
A selection of projects spanning fintech, e-commerce, and AI.
Vietnam Coffee E-Commerce platform built with AstroJS, Tailwind, and SEO-optimized architecture. Features automated AI image generation pipeline for commercial product photography.
E-commerce storefront for premium crispy pork belly products, featuring an automated AI image generation pipeline (fal.ai, Nano Banana) for commercial-quality product photography at scale.
Travel and booking platform for Bali tourism experiences with responsive design and booking integration.
Forex trade synchronization SaaS platform with real-time WebSocket communication, ZeroMQ messaging, and Kubernetes orchestration.
Financial services platform delivering trading infrastructure with WordPress, Laravel, React, and Vue for a seamless client experience.
Indonesia's next freelance marketplace — full-stack platform with AI-powered matching, real-time collaboration, and secure payments.
Religious digital platform for community engagement and content distribution, built with Jekyll and vanilla JavaScript.
AI-powered chat application with real-time streaming responses using React, Tailwind, and Groq API integration.
AI-powered analytics dashboard with FastAPI backend, Next.js frontend, and Gemini AI for intelligent sales insights.
$ which $(compgen -c)
A few things I’ve worked with…
$ cat ~/colleagues/feedback.log
Feedback from colleagues and leaders I've worked with.
“Bio consistently delivers exceptional technical solutions that drive real business value. His ability to architect complex systems while maintaining clean, maintainable code is rare. Over the years, he has been instrumental in delivering projects for our most demanding fintech clients.”
Nash Wadud
CEO, CITT Services
$ cat ~/thoughts/*.md | tail -6
Writing about fintech, architecture, and the craft of software.
BullMQ handles fire-and-forget jobs. Temporal handles crash-safe, stateful workflows. I picked the wrong one and it cost me a weekend. Here is how I choose.
Three index patterns dominate production query optimization: composite for multi-column filters, covering for index-only scans, partial for small subsets.
Uptime and error rate reveal nothing about agent health. Four metrics that matter, how to trace an agent's reasoning chain, and when to halt a run.
How circuit breaker patterns prevent payment provider outages from cascading into system-wide failures, with per-provider configuration strategies and fallback patterns for fintech systems.
Beyond console.log: the console.table, console.time, console.group, console.trace, and console.count methods that cut debugging time in the browser.
Message brokers cannot guarantee exactly-once delivery. The correct response is idempotent processing with deduplication tables and conditional writes.
$ echo $CONTACT
Have a project in mind? Let's talk about how we can build it.
The best way to get a project done faster is to start sooner.