
2026-03-10 by Chris
Flow builders love graphs. Circles or boxes and arrows look like clarity: a clean structure, a traceable path, a promise that conversation is something you can “wire up” once and then run.
But a real conversation doesn’t live in a graph.
You can model it as a graph, sure. Yet the moment you try to capture what makes a conversation feel alive (revisions, interruptions, late-breaking facts, and changed minds) you discover the missing axis: time. And once time becomes a first-class citizen, your neat 2D diagram quietly turns into something else: a four-dimensional system where the “shape” of the conversation depends on continuous re-evaluation, not a single traversal.
This is why a conversation doesn’t fit into a graph.
Most chatbots and flow builders treat a conversation like a committed path:
That works for scripted funnels. It works when the world is stable and the user never revisits earlier assumptions.
But it breaks down the moment the world behaves like the world: inventory changes, eligibility changes, a parallel process finishes late, the user edits an earlier answer, a policy update arrives, a payment fails, a shipping option disappears, or a previously valid suggestion becomes invalid.
In real conversations, earlier statements aren’t just past, they remain active premises.
A committed flow confuses “what happened” with “what is still true.”
A static graph can describe dependencies: edges carry information, nodes transform it. That’s useful.
But conversational reality requires something stronger than dependency structure: it requires temporal re-evaluation.
In other words:
A conversation is not a path through a graph.
It’s a graph whose meaning changes over time.
When you introduce a system that ticks (re-runs evaluation whenever node state changes) you stop treating the graph as a one-time map and start treating it as a living model.
Each tick is a moment in time. Each re-evaluation is a new “slice” of the conversation’s state. Stack those slices and you don’t have a 2D diagram anymore. You have a timeline of graph-states — a structure that behaves less like a flowchart and more like a simulation.
That’s the fourth dimension: not the graph itself, but the sequence of graph states the user experiences.
The most human thing a conversation can do is revise itself.
Not just “oops, let’s correct that,” but revision with consequences:
This is what most systems can’t do because they treat earlier nodes as committed milestones. Once a branch is entered, it becomes a mini-universe that assumes its premises will never change.
But in real conversations, premises change all the time.
If you build a system where already-processed nodes can change state, and where edges can feed new information into nodes even after they were processed, you unlock a capability that feels startlingly natural:
The past can change the present.
That sounds paradoxical until you realize it’s how people talk. We constantly reframe.
Human conversation isn’t turn-based truth accumulation. It’s a continuous negotiation of a shared, shifting state.
A tick-based conversational graph is closer to reactive UI than to a script:
This is the key difference:
The “fluidity” comes from the fact that the system doesn’t wait for the user to speak to update reality. It updates whenever reality updates.
That makes it uniquely capable of handling situations like an online shop configuration:
You’re building a skateboard setup. Midway through, availability updates: the deck is out of stock. In a committed flow, you either ignore the truth until later, or you awkwardly inject an apology message and hope the user manually backtracks.
In a tick-based system, that branch simply becomes invalid—because it is invalid. If the deck comes back in stock, the context can restore itself—because it’s valid again.
It’s not just responsive. It’s coherent.
At this point, someone will say: “Fine, but you can still represent that with a graph.”
Yes. But the important part isn’t that you can draw nodes and edges. The important part is the semantics:
Once you do that, you’re no longer building a flowchart. You’re building a reactive system that happens to have a graph-shaped topology.
The graph is the wiring. The conversation is the animation over time.
That’s why the title is true: a conversation doesn’t fit into a graph. Because the thing you care about isn’t the graph, it’s the time-evolving state produced by repeatedly re-running it.
This approach is, in my view, closer to how real conversations work:
A conversation isn’t a path you traverse. It’s a state you keep renegotiating.
If you want a conversational system that feels genuinely alive (one that can revise early information, collapse invalid contexts, restore them when the world changes, and do it without waiting for the user to “take a turn”) you need to stop pretending the graph is the conversation.
The graph is just the topology.
The conversation is what happens when that topology is re-evaluated over time.
And that’s why a conversation doesn’t fit into a graph—until you let the graph tick.
Title image: https://pixabay.com/de/vectors/graph-diagramm-saiten-verbindung-5727061/