Home Diagramming: The connector logic could not be written down

Diagramming: The connector logic could not be written down, so we built it instead

VIDEO 01 · BUILD NEW Hero The same orthogonal connector logic routing across four
diagram types in sequence: flowchart, org chart, network diagram, site map.
Objects get dragged; the routing holds.
8–10s · loop · no UI chrome

Role: Sr. Product Designer, Diagramming

Contribution: Design lead, interaction design, prototype-driven specification, usability testing, engineering partnership

Team: 1 PM, 4 engineers, 2 quarters

TLDR

Mural’s diagramming was slow, incomplete and unreliable, and the 2020 remote-work influx made it urgent. Research surfaced nine use cases and three failure modes: too many steps to connect elements, no orthogonal connectors, and connector behavior users couldn’t trust.

Three parallel tracks. Connector points: hover handles on shapes and stickies that create and connect an element in one move. Orthogonal connectors: static specs collapsed under the logic’s complexity, so we built a tunable proof of concept with engineering that became a living spec and shipped as production code. Reliability: no single rule set worked across nine use cases, so we prioritized flowcharts and the novice persona, choosing forgiving over precise.

Outcomes: +35% diagram completion, 40% faster flowchart creation (5 minutes to 3), 2x diagramming activity in 30 days, and a drop in connector support tickets.

Context

Mural is a visual collaboration canvas used by distributed teams to think together. In 2020 the shift to remote work brought in a wave of users who had never collaborated digitally before, and they arrived expecting the canvas to do more than hold sticky notes.

Diagramming was where that expectation broke. It sits underneath most of what teams do on a canvas: process flows, systems thinking, org structures, brainstorms that need structure. But the feature had grown by accretion rather than design. Connectors were the primitive everything depended on, and they were slow to create, missing basics like orthogonal routing, and unpredictable enough that users second-guessed whether their work was intact.

This was not a hunch. Diagramming was a documented product gap before we started: CSMs kept a running list of requests from customer conversations, and the same complaints arrived independently through NPS comments, support emails and the community forum. Four channels, no coordination between them, converging on the same thing.

I led the redesign over two quarters with one PM and four engineers.

What we did

The research produced nine use cases and a long list of complaints. The first real decision was refusing to treat that as a backlog. Reading across the evidence, the failures resolved into three: creating a connection took too many steps, orthogonal routing did not exist, and connector behavior could not be trusted. Those are different kinds of problem, so I set them up as three parallel tracks with one shared constraint: they had to converge on a single coherent connector model, not three local fixes.

Speed. Mural already had three ways to make a connector, all of them requiring the user to think about the connector as an object before thinking about the diagram. Rather than add a fourth entry point, we changed what a selected element affords. Connector points appear on the bounding box; hovering one previews a pre-connected clone, clicking commits it, dragging into empty space offers the next element inline. The intent was to collapse “create element, create connector, attach both ends” into one gesture, so the user thinks in diagram, not in tooling.

VIDEO 02 · REBUILD Connector points One continuous take. Select a sticky, hover a connector point,
ghost clone appears, click, the connected element commits.
Repeat once so a chain forms. No cursor teleporting.
4–6s · loop
Hover previews a connected element; one click commits both the element and the connection.
03a Hover, nothing nearby
03b Hover, neighbor present
03c Drag to existing object
03d Drag into empty space
One affordance, four behaviors, resolved by what is nearby.

The cost was a fourth pattern in a product that already had three we could not remove, so discoverability had to carry more weight in testing than it otherwise would. Multiple prototypes, usability tested each cycle.

Orthogonal routing. I spent a sprint writing the behavior spec and then killed it because the rule set contradicted itself faster than I could resolve it, which was evidence about the problem rather than about the sprint: routing logic is a system with emergent behavior, and static documentation is the wrong instrument for it.

IMAGE 04 · USE ORIGINAL The abandoned spec The actual document: rules, exceptions, states, with the
contradictions marked in red. Crop to a legible region if the
full page does not hold up at rendered width.
Sprint one output. The marked rules are the ones that contradict each other.

We replaced the spec with a proof of concept built with engineering, with tunable parameters and a small set of stated principles (avoid overlaps, hold 90 degrees, favor proximity, etc).

VIDEO 05 · USE ORIGINAL Tuning the proof of concept Screen capture: parameter controls on one side, routing
responding live on the other. One parameter is changed;
a route re-solves. 6–8s
Each parameter was a design decision made adjustable instead of written down.

We added one behavior at a time and regression-tested all nine use cases against it.

IMAGE 06 · BUILD NEW Nine use cases, as a regression grid Nine thumbnails, each the same routing logic applied to a
different diagram type. Deliberately plain, since it should read as
a test sheet, not a showcase.
Every behavior added was tested against all nine before it stayed.

The POC became the spec, then became the production code, then stayed as the reference for later connector decisions. The method outlived the project.

Reliability. Testing across all nine use cases showed that no single rule set could satisfy them all, so I made the call to optimize explicitly for flowcharts and for the novice persona, and to accept degraded precision for the advanced cases. Forgiving over exact. That was a real tradeoff, made once and applied consistently, rather than a compromise negotiated per bug. What made the call possible was diagnosing the actual cause: the bugs were a symptom, and underneath them “connected” had never been defined. We wrote definitions for when a connector is attached, how the user knows, and how resilient the attachment should be.

IMAGE 07 · REBUILD Before and after The same drag applied twice: a connector detaching in the
old build, holding in the new one. Both labels always rendered.
Same drag. The definition of attached is what changed.

Outcome

+35% Diagram completion rate
5 → 3 min Flowchart creation time
Diagramming activity, first 30 days
Connector support tickets

Completion and activity come from pre/post-launch cohorts measured by the product team; the timing figure is from moderated usability tests. Support tickets fell without a target, which was the clearest signal that the reliability track had worked.

Reflection

I spent a sprint writing a specification that could not be written, and only the failure told me the logic was emergent rather than describable. I now check whether a behavior can be specified before committing to specifying it; when the answer is no, the prototype is the spec. That habit came out of this project and I have used it since.