All specs
uxhigh complexity

Workflow Automation

Let users compose triggers, conditions, and steps into runnable workflows — with approvals, quotas, retries, and auditable run history.

Options

Authoring Surface*

Drag-and-drop node editor where users wire triggers to steps through a canvas (Zapier, Make, n8n style).
Users author workflows as checked-in config files; your engine executes them.
Workflows are literally functions written in the host language — Temporal, Inngest, Trigger.dev style.

Trigger Types*

Workflows fire in response to in-app events (record.created, invoice.paid, etc.).
Workflows fire on a cron expression or fixed interval.
Each workflow gets a unique URL that external systems can POST to in order to start a run.
User clicks a button to fire the workflow, optionally with input parameters.

Execution Features*

If/else and for-each over collections inside a workflow.
A JS/Python step where the user writes a snippet that transforms payload between steps.
Workflow suspends until a designated user approves, rejects, or provides input.
Declarative retry policy (count, backoff) and an on-error path per step.
Users can stop a running workflow and replay a failed run from the failing step.

Governance & Operations

Edits produce drafts; published versions are immutable and each run pins to a version.
Cap concurrent runs, monthly step count, or total execution minutes per tenant.
Every run records input, output, and status at each step, visible in the UI.
Who created, edited, published, disabled, and ran each workflow — immutable.
Encrypted per-workflow or per-tenant secret store referenced by token, not value.
Library of prebuilt workflow templates users can clone into their tenant.
Workflows are tenant-scoped assets other members can view, edit, and run according to role.

Decision Points

Low-code builder (Zapier-style) or code-only?

If yes

Ship a visual or declarative authoring surface — your audience includes non-engineers. Budget for the connector catalog, schema inference, and debugging UX.

If no

Code-only is faster to build and keeps authors in their editor; only viable when every workflow author is an engineer with deploy access.

Visual node editor or YAML/JSON definitions?

If yes

Visual editor — invest in canvas, undo, type-aware field pickers, and per-step preview. Half-done canvases feel worse than config files.

If no

Declarative YAML/JSON — diffable, reviewable in Git, and lets power users express loops and branching without a canvas. Fits developer audiences.

Triggers: events, schedules, webhooks, manual — which subset?

If yes

Ship events + manual first (highest leverage), then schedules and webhooks. Each trigger type is its own surface area (catalog, infra, security).

If no

At minimum include manual runs — users need to test before arming automation.

Allow inline code steps for power users?

If yes

Sandboxed JS/Python with hard timeouts, memory caps, and network allowlists. Use isolate-vm or Firecracker; never run in your engine process.

If no

Keep authoring restricted to configured nodes. Simpler security model, but expect feature requests for every trivial transform.

Workflow versioning with draft/publish lifecycle?

If yes

Immutable published versions, drafts diff against published. Each run pins to the version that was live at trigger time — otherwise in-flight runs see edits.

If no

Live edits only — acceptable for dev-tool automation; dangerous for workflows that touch customer data or spend.

Per-step retries and error-branch handling?

If yes

Declarative retry policy (count, backoff with jitter) and an on-error path per step. Non-negotiable for workflows that call external systems.

If no

Only acceptable for workflows that touch purely internal, highly available systems — which is rarely the real case.

Run history and step-level logs exposed to users?

If yes

Persist input/output at each step, render a timeline UI, and redact secrets at log time. Primary debugging surface.

If no

Logs only in your observability stack — users will file support tickets for every failed run.

Share workflows across a team/tenant?

If yes

Tenant-scoped workflows with role-gated edit/publish/run. Integrate with roles/permissions — "who can publish" is a security-critical bit.

If no

User-scoped workflows — simpler model, but users in the same org end up duplicating each other.

Marketplace of prebuilt workflow templates?

If yes

Seed with 20–30 realistic templates at launch — empty marketplaces look dead. Treat templates as versioned, clonable artifacts.

If no

A small "recipes" doc is enough until adoption justifies the marketplace surface.

Conditional branching and loops supported?

If yes

Minimum viable expressiveness — without it, users build three parallel workflows for one business rule. Expose a condition DSL that references prior step outputs.

If no

Linear-only workflows only. Works for extremely narrow use cases (ETL) and not much else.

Human approval/pause steps in a workflow?

If yes

Suspend run state durably, emit an approval token, and notify designated approvers. Expire tokens and send reminders.

If no

All steps auto-execute — fine for data pipelines, wrong for workflows that touch spend, access, or external customers.

Secrets vault for workflow credentials?

If yes

Per-tenant encrypted store referenced by opaque token; never render values in the UI. Integrate with tenant KMS keys for enterprise.

If no

Users will paste secrets into plain config — a breach waiting to happen. Only acceptable for throwaway internal tooling.

Per-tenant execution quotas and rate limits?

If yes

Cap concurrent runs, monthly step count, and execution minutes per tenant. Protects the fleet from runaway loops and aligns with pricing tiers.

If no

Acceptable only pre-scale. Add quotas before your first paying customer loops themselves into your on-call.

Cancel and replay workflow runs?

If yes

Requires step-level durable state — bake in from day one, retrofitting is painful. Replay from failing step, not from start, or users will never use it.

If no

Run-once model — simpler but means every failed run requires a new manual trigger.

Workflow-level audit log for compliance?

If yes

Immutable record of create/edit/publish/disable/run events with actor, timestamp, and diff. Required for SOC2 / ISO customers.

If no

Application logs only — fine for internal tools, insufficient for workflows touching production data.

Tradeoffs

ComplexityVisual no-code builder

Large product investment — canvas, schema inference, connector UI, and debugging UX all become first-class work

ComplexityInline code steps enabled

Sandboxing, quotas, and blast-radius containment become security-critical

CostDurable workflows with replay

Every step needs idempotent, persisted state — engine cost and storage grow with run volume

ScalabilityPer-tenant execution quotas

Protects the fleet from runaway tenants and makes cost predictable at scale

Implementation Examples

Zapier

Canonical visual no-code workflow builder with thousands of connectors and a template marketplace.

n8n

Open-source visual workflow automation with inline code steps and self-hosting support.

Temporal

Durable code-as-workflow engine — reference for replay, retries, and long-running state.

Inngest

Event-driven workflow engine with durable functions and step-level observability for TypeScript.

Make.com

Visual workflow builder with sophisticated branching, iterators, and error-path handling.

Trigger.dev

Code-first durable workflow runtime aimed at application developers, with local dev and replay.