Good form

Good form — how not to make spaghetti

A clean flow isn't luck — it's a handful of habits. The golden rule: shared things are called rather than funneled into, and every beginning is its own left-justified path. Everything below follows from that.

Call shared things; don't funnel into them — many paths wiring into one shared node is the core spaghetti anti-pattern.

result backpath Apath Bpath Clink callthe shared serviceSQL / broker / modelone dependency

When many paths share a dependency — a DB pool, a broker, a model call — don't wire them all into one node (a funnel). Expose it once as a service each path calls with a link call; the result returns and per-path handling happens after. The shared node keeps exactly one wire in and stays reusable.

The rules

  • No funnels into a shared dependency — when many paths need the same service, they should call it, not all wire into it. (Aggregators like a join node that legitimately gather many inputs are the exception — that's their job, not a funnel.)
  • Each beginning is its own path — one straight, left-justified path per entry; don't merge them through a shared front door.
  • Flow left → right — beginning → prep → service call → format → sink. A backward (right-to-left) wire reads as tangle.
  • A crossing is a missing link node — if two wires cross, row-align the column with its targets or bridge it with a link node. Same for any wire longer than the canvas — a link node reads cleaner.
Follow these and a flow reads cleanly — beginnings in one column, shared things called not funneled, UI and logic on their own sides of a contract, errors on a path you can see, and data on a stable shape. That's good form.