Platform automation itu kuat, tetapi bisa menjadi berantakan saat diminta memiliki semuanya.
BoringOps uses two automation runtimes with different roles: n8n for rapid prototyping dan Windmill for production flows. The operational truth stays in BoringOps either way.
Two runtimes, one purpose
n8n is the prototyping sandbox. New integration ideas start here. The visual editor makes it fast to wire up a new channel, test a webhook, or sketch a multi-step flow. When a prototype is ready to harden for production, it graduates to Windmill.
Windmill is the production executor. Flows deployed to Windmill run as version-controlled scripts with typed inputs, structured error handling, dan a durable execution log. BoringOps routes each flow to the right runtime based on which path is set in the flow catalogue — no global switch, no big bang migration.
Both runtimes orchestrate. Neither owns the business.
Workflow harus mengorkestrasi, bukan memiliki bisnis
A workflow — whether in n8n or Windmill — can receive a WhatsApp message, call an API, wait for approval, post to Xero, or send a reply.
Yang tidak seharusnya dipaksa dimiliki n8n adalah domain model yang tahan lama: job, approval, permission tenant, nomor referensi, riwayat audit, dan status operasional.
Those belong in the platform database dan API, where rules can be enforced consistently regardless of which runtime executed the flow.
Batas ini membuat operasional bisa diperiksa
Saat workflow menjadi satu-satunya source of truth, tim akhirnya harus memeriksa riwayat eksekusi untuk memahami bisnis.
Itu bukan permukaan operasional yang baik untuk SME.
Sebaliknya, eksekusi n8n harus meninggalkan record bisnis yang mudah dibaca: job dibuat, approval pending, integrasi blocked, callback selesai, dispatch gagal dan bisa diulang.
Portal harus menampilkan cerita operasional. n8n mengerjakan pekerjaan integrasi di belakangnya.
Ingress dan completion are separate concerns
Banyak workflow nyata tidak instan.
A request arrives, the system creates a job, an approval is needed, a manager approves, dan the workflow resumes to notify the requester or update an external system.
In production flows, Windmill dispatches work dan BoringOps signals completion back via a Postgres notify channel — no polling, no tight coupling. The approval record dan final decision live in BoringOps; Windmill receives the outcome dan acts on it.
Reliability juga butuh record
Integrasi bisa gagal. API bisa timeout. Credential bisa expire. Sistem eksternal bisa mengembalikan respons yang tidak terduga.
Itu normal. Yang penting adalah apakah tim bisa melihat kegagalan, mencoba ulang dengan aman, dan memahami dampaknya.
Menyimpan dispatch log, event gagal, dan timeline eksekusi di platform membuat automation bisa didukung, bukan misterius.