Why a Conversation Doesn’t Fit Into a Graph

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.

Graphs are great until you treat them like history

Most chatbots and flow builders treat a conversation like a committed path:

  • You ask a question.
  • The user answers.
  • You move forward.
  • Previous steps are “done,” effectively frozen.
  • The graph is traversed, and the conversation becomes a recorded route through it.

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.”

The missing dimension: re-evaluation

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.

Why “late revisions” are the real test

The most human thing a conversation can do is revise itself.

Not just “oops, let’s correct that,” but revision with consequences:

  • An early answer is edited.
  • The branch you’re currently in becomes inconsistent.
  • Suggestions you were about to click become invalid.
  • A whole sub-context collapses or transforms.
  • Later, new information arrives and the context restores itself.

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.

  • “Actually, I meant the other model.”
  • “Wait, I’m not available on Friday.”
  • “I just got a message: that item is out of stock.”
  • “I changed my mind. Let’s do the cheaper option.”
  • “New info: that’s not allowed anymore.”

Human conversation isn’t turn-based truth accumulation. It’s a continuous negotiation of a shared, shifting state.

Why a tick-based graph feels “fluid”

A tick-based conversational graph is closer to reactive UI than to a script:

  • Nodes can compute derived state.
  • Events can arrive asynchronously.
  • The system re-evaluates when inputs change.
  • The visible conversation becomes a projection of current state, not a fixed transcript.

This is the key difference:

  • Classic flow: conversation as a log of committed steps.
  • Tick graph: conversation as a live view of a stateful world.

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.

“A graph can model it”—but only if you admit it’s not just a graph

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:

  • nodes aren’t one-time executed steps
  • edges aren’t just routing; they’re dependency links
  • “processed” doesn’t mean “final”
  • evaluation is not a traversal; it’s a continuous re-evaluation driven by change

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.

Why this is closer to real conversations

This approach is, in my view, closer to how real conversations work:

  • we revise earlier assumptions
  • we invalidate options when new information arrives
  • we jump contexts without ceremony
  • we maintain multiple threads in parallel
  • we adapt continuously, not sequentially

Conclusion: A conversation is continuous re-evaluation

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/