Zenaique

Where the blackboard pattern shows up under different names in modern frameworks

Flashcard·Medium·4.0 · 0·~30s·Asked atInfosysKrutrimLyzr
Attempt it
TL;DR

The blackboard pattern lives on as LangGraph's typed state with reducers, CrewAI's shared memory, and AutoGen's shared message log; the modern version adds types, deterministic merges, and checkpointing.

Memory aid
Sign in to see the mnemonic that makes this stick.
Easy to grasp

Picture a classroom whiteboard where several students take turns adding to a group project. The first writes the topic, another adds a sketch, another fills in numbers, and a fourth circles the conclusion. Nobody passes notes; everyone just looks at the board. That is the blackboard idea from old AI textbooks. Today, the whiteboard is digital: it has labelled sections, rules about what can go in each section, and a small helper who decides how to combine two students writing at the same time. That helper, the labels, and the ability to take a photo so you can rewind to an earlier state are what modern frameworks added on top of the old idea.

Concept explanation~2 min read

Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.

Software architecture has a quiet rule: every good idea gets re-invented every fifteen years under a new name. The blackboard pattern is a case study. It appeared in classical AI in the 1970s, fell out of fashion as object-orientation and direct message passing took over in the 1980s and 1990s, and quietly returned in the 2020s as the dominant coordination primitive in multi-agent LLM frameworks.

The modern version does not call itself a blackboard. It calls itself state, shared memory, or a message log. The framing is updated, the engineering is much better, but if you squint past the vocabulary the structural commitments are nearly identical.

What the original blackboard pattern actually was

The blackboard pattern crystallised around the Hearsay-II speech-understanding system at Carnegie Mellon in the mid-1970s. The problem was hard: turn a continuous audio signal into a sentence, using whatever combination of acoustic, phonetic, syntactic, and semantic clues helped on a given utterance.

The solution had three components.

  • The blackboard. A globally readable, hierarchically structured workspace that held partial hypotheses at every level (signal, phoneme, word, phrase).
  • Knowledge sources (KS). Independent expert modules, each specialised for one kind of inference. A KS watched the blackboard for trigger conditions and contributed when it saw work it could do.
  • The scheduler. A control component that picked which KS to run next based on what was currently on the board and what was estimated to be most valuable.

The key architectural commitment was that KS did not talk to each other. They only read and wrote the blackboard. This made it possible to add a new KS without modifying any existing one, which was the whole point: speech understanding needed dozens of partial experts, and tightly coupling them would have made the system impossible to extend.

Why it returned as 'state' in modern frameworks
What the modern version adds: types, reducers, checkpoints
Where the pattern breaks and what to do about it
Sign in to unlock the full deep dive.

Situations where this technique stops working.

Sign in to see when this approach fails.

2–4 min · Everything important, quickly.

Sign in to see the quick scan of the deep dive.
python
from typing import Annotated, TypedDict
import operator
from langgraph.graph import StateGraph, END

class ResearchState(TypedDict):
    question: str
    hits: Annotated[list[str], operator.add]  # reducer: append
    status: str                                # reducer: overwrite (default)

def worker_a(state: ResearchState) -> ResearchState:
    return {"hits": ["hit from A"], "status": "a-done"}

def worker_b(state: ResearchState) -> ResearchState:
    return {"hits": ["hit from B"], "status": "b-done"}

g = StateGraph(ResearchState)
g.add_node("a", worker_a)
g.add_node("b", worker_b)
g.set_entry_point("a")
g.add_edge("a", "b")
g.add_edge("b", END)

Real products, models, and research that use this idea.

  • LangGraph's `StateGraph` API in production at companies like Klarna and Replit for agent workflows that need parallel fan-out and resume after failure.
  • CrewAI's shared memory primitive used in content-generation crews where a researcher, a writer, and an editor all read the same evolving brief.
Sign in to see more production examples.

What an interviewer would ask next. Try answering before peeking at the approach.

QHow would you design a reducer for a nested-object state field where two agents update different sub-keys in parallel?
A

Define a deep-merge reducer that takes both partial dicts and merges at the leaves, with a tie-break rule (last write wins or per-leaf reducer) for conflicting keys.

2 more follow-ups an interviewer would ask next. Sign in to reveal them.

Red flags & common mistakes

The phrases that signal junior thinking. Click to expand.

Most common mistake

Conflating 'shared state' with a free-form dict that any agent can clobber. The win is in the typed schema plus the per-key reducer, which is what makes parallel writes safe.

Sign in to see all red flags and common mistakes.

60 second bullets to scan on the way to the call.

  • The 1970s blackboard pattern and its Knowledge Source plus scheduler shape

  • Why direct message passing differs from shared-workspace coordination

Sign in to unlock the revision sheet.

Primary sources. Browse if you want the original framing.

Similar questions

Same topic, related formats. Practice these next.

4 curated
Next question
Why AutoGen 0.4 makes TerminationCondition a first class primitive instead of leaving it to convention
Flashcard·Medium