<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Harness-Engineering on Safiware</title><link>https://www.safiware.com/tags/harness-engineering/</link><description>Recent content in Harness-Engineering on Safiware</description><generator>Hugo</generator><language>en-US</language><copyright>Copyright © 2026 Safiware.</copyright><lastBuildDate>Tue, 23 Jun 2026 09:00:00 -0400</lastBuildDate><atom:link href="https://www.safiware.com/tags/harness-engineering/index.xml" rel="self" type="application/rss+xml"/><item><title>The Whiteboard Test</title><link>https://www.safiware.com/p/the-whiteboard-test/</link><pubDate>Tue, 23 Jun 2026 09:00:00 -0400</pubDate><guid>https://www.safiware.com/p/the-whiteboard-test/</guid><description>&lt;p&gt;The title I wanted was &amp;ldquo;A Whiteboard Is All You Need.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;That is not true.&lt;/p&gt;
&lt;p&gt;The whiteboard is not all you need. You also need the manual: what the board
means, who can change what, and when to hand off, verify, or stop.&lt;/p&gt;
&lt;p&gt;But the whiteboard is where I now start.&lt;/p&gt;
&lt;p&gt;I started thinking this way because &amp;ldquo;agent context&amp;rdquo; kept feeling too slippery.
Everyone says the agent needs context. Sure. But what context? The goal? The
constraints? The evidence so far? The decisions already made? The shape in which
people, agents, and code are supposed to communicate?&lt;/p&gt;
&lt;p&gt;At some point I stopped asking, &amp;ldquo;What should I tell the agent?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I started asking a different question:&lt;/p&gt;
&lt;p&gt;If this were a human team, and the whiteboard were their only shared interface,
what would need to be on it? What instructions would tell each person how to use
it?&lt;/p&gt;
&lt;p&gt;That question has been annoyingly useful.&lt;/p&gt;
&lt;p&gt;&lt;figure
 class="image-caption image-zoom-container"
&gt;
 
 &lt;input
 type="checkbox"
 id="img-f28db671"
 class="image-zoom-toggle"
 aria-label="放大图片：The whiteboard is shared state. Each collaborator uses manuals that define roles, permissions, handoffs, review, and stop rules."
 /&gt;
 &lt;label
 for="img-f28db671"
 class="image-zoom-label"
 &gt;
 &lt;img
 src="assets/whiteboard-test-flow.svg"
 alt="The whiteboard is shared state. Each collaborator uses manuals that define roles, permissions, handoffs, review, and stop rules."
 loading="lazy"
 class="zoomable-image"
 /&gt;
 &lt;/label&gt;
 
 &lt;label
 for="img-f28db671"
 class="image-zoom-overlay"
 &gt;
 &lt;img
 src="assets/whiteboard-test-flow.svg"
 alt="The whiteboard is shared state. Each collaborator uses manuals that define roles, permissions, handoffs, review, and stop rules."
 class="zoomable-image"
 /&gt;
 &lt;/label&gt;
 
 &lt;figcaption&gt;The whiteboard is shared state. Each collaborator uses manuals that define roles, permissions, handoffs, review, and stop rules.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="the-test"&gt;The Test&lt;/h2&gt;
&lt;p&gt;Imagine a room.&lt;/p&gt;
&lt;p&gt;There are collaborators in it. Some are people. Some are agents. Some are code.&lt;/p&gt;
&lt;p&gt;You are not allowed to keep talking to them while they work.&lt;/p&gt;
&lt;p&gt;You get one whiteboard. You also get to hand each collaborator a short manual.
The manual says which parts of the board they should watch, what each field
means, when to verify, and when they should leave things alone.&lt;/p&gt;
&lt;p&gt;Now design the system.&lt;/p&gt;
&lt;p&gt;That is the whiteboard test.&lt;/p&gt;
&lt;p&gt;If I cannot say what belongs on the board, I do not understand the task yet. If
I cannot write the manual, I do not understand how the work should be done.&lt;/p&gt;
&lt;h2 id="board-and-manual"&gt;Board and Manual&lt;/h2&gt;
&lt;p&gt;The board and the manual are different things.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The board is state.&lt;/strong&gt; It holds what matters right now: goals, constraints,
decisions, evidence, partial results, risks, status, open questions, and past
events that should affect the next action.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The manual is semantics and protocol.&lt;/strong&gt; It defines what the board&amp;rsquo;s fields mean,
what each actor may read or write, and when to verify, hand off, or stop.&lt;/p&gt;
&lt;p&gt;It also makes responsibility explicit. A section can have an owner, peer
collaborators, reviewers, handoff rules, or a human approval gate.&lt;/p&gt;
&lt;p&gt;In many prototypes, we blur these together. We stuff state, policy, examples,
memory, tool instructions, and vibes into one prompt and hope the model sorts it
out.&lt;/p&gt;
&lt;p&gt;Sometimes the task is small and the prompt is the whole system. But when the
work gets longer, shared, or safety-sensitive, I want the split. The board tells
me what the system knows. The manual tells me how each actor should behave
around that knowledge.&lt;/p&gt;
&lt;p&gt;&lt;figure
 class="image-caption image-zoom-container"
&gt;
 
 &lt;input
 type="checkbox"
 id="img-7932f0c2"
 class="image-zoom-toggle"
 aria-label="放大图片：The board holds shared state. The manual defines field meaning, roles, permissions, handoffs, review, and stop rules."
 /&gt;
 &lt;label
 for="img-7932f0c2"
 class="image-zoom-label"
 &gt;
 &lt;img
 src="assets/board-manual-split.svg"
 alt="The board holds shared state. The manual defines field meaning, roles, permissions, handoffs, review, and stop rules."
 loading="lazy"
 class="zoomable-image"
 /&gt;
 &lt;/label&gt;
 
 &lt;label
 for="img-7932f0c2"
 class="image-zoom-overlay"
 &gt;
 &lt;img
 src="assets/board-manual-split.svg"
 alt="The board holds shared state. The manual defines field meaning, roles, permissions, handoffs, review, and stop rules."
 class="zoomable-image"
 /&gt;
 &lt;/label&gt;
 
 &lt;figcaption&gt;The board holds shared state. The manual defines field meaning, roles, permissions, handoffs, review, and stop rules.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="how-i-use-it"&gt;How I Use It&lt;/h2&gt;
&lt;p&gt;I usually do this as a loop.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;First, I name the work.&lt;/strong&gt; What is the task? What counts as done? What would count
as failure? How will I know whether it worked?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Then I sketch the board.&lt;/strong&gt; I list the decisions, facts, evidence, constraints,
status, open questions, failure signals, and live coordination state the work
depends on.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Live coordination state is not the same as ownership.&lt;/strong&gt; &lt;code&gt;waiting_on&lt;/code&gt; or
&lt;code&gt;needs_review_by&lt;/code&gt; can live on the board. The rule for who normally owns a
section belongs in the manual.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Next I design the manual.&lt;/strong&gt; I start with the smallest team that could plausibly
work: often one agent, some code, and a human checkpoint. The manual defines
field meanings, role responsibilities, read/write permissions, handoffs, review
rules, and stop conditions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Then I test the setup against those evaluations.&lt;/strong&gt; When performance breaks
down, I try to diagnose where the representation failed. Was the board missing
state? Was the manual missing a rule, a definition, or a handoff? Was the work
split across the wrong actors? Or is the task beyond the current model, tool, or
code setup?&lt;/p&gt;
&lt;p&gt;The fix depends on the diagnosis. After a few passes, the architecture gets less
theoretical. You can see what belongs on the board, what belongs in the manual,
and where the work needs another actor, tool, or checkpoint.&lt;/p&gt;
&lt;p&gt;Not because the metaphor solves the problem.&lt;/p&gt;
&lt;p&gt;Because it tells me what problem I am actually solving.&lt;/p&gt;
&lt;p&gt;&lt;figure
 class="image-caption image-zoom-container"
&gt;
 
 &lt;input
 type="checkbox"
 id="img-f067f8b4"
 class="image-zoom-toggle"
 aria-label="放大图片：A four-step loop for the whiteboard test: name the work, sketch the board, write the manuals, then run and revise."
 /&gt;
 &lt;label
 for="img-f067f8b4"
 class="image-zoom-label"
 &gt;
 &lt;img
 src="assets/whiteboard-design-loop.svg"
 alt="A four-step loop for the whiteboard test: name the work, sketch the board, write the manuals, then run and revise."
 loading="lazy"
 class="zoomable-image"
 /&gt;
 &lt;/label&gt;
 
 &lt;label
 for="img-f067f8b4"
 class="image-zoom-overlay"
 &gt;
 &lt;img
 src="assets/whiteboard-design-loop.svg"
 alt="A four-step loop for the whiteboard test: name the work, sketch the board, write the manuals, then run and revise."
 class="zoomable-image"
 /&gt;
 &lt;/label&gt;
 
 &lt;figcaption&gt;A four-step loop for the whiteboard test: name the work, sketch the board, write the manuals, then run and revise.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="a-tiny-moderation-sketch"&gt;A Tiny Moderation Sketch&lt;/h2&gt;
&lt;p&gt;I recently used this metaphor while designing an agentic moderation system.&lt;/p&gt;
&lt;p&gt;The setup was roughly this: a parent, teacher, or user sets wellbeing
preferences for a human-chatbot interaction. A moderation agent watches the
interaction and decides when to intervene, signal, rewrite, or escalate.&lt;/p&gt;
&lt;p&gt;The first board might only have preferences, evidence, current state, and
pending questions. The first manual might say: append evidence with citations,
change state only with cited evidence, and ask the person who set the preference
before rewriting it.&lt;/p&gt;
&lt;p&gt;That is no longer just prompt design. It is deciding what shape the work should
take inside the system.&lt;/p&gt;
&lt;p&gt;The person setting preferences does not need to see the whole board. In fact,
showing the whole board would be cruel. They need a small set of meaningful
controls. The operator may need the richer operational surface underneath.&lt;/p&gt;
&lt;p&gt;So the board has asymmetric visibility. Simple surface for the person. Richer
state for the operator. A shared semantics layer between them so the same field
does not quietly mean three different things.&lt;/p&gt;
&lt;h2 id="this-is-not-a-new-trick"&gt;This Is Not A New Trick&lt;/h2&gt;
&lt;p&gt;There is older language for this.&lt;/p&gt;
&lt;p&gt;Long before today&amp;rsquo;s agent frameworks, AI had blackboard architectures:
specialist modules coordinated through a shared workspace, usually with control
logic deciding what ran next.&lt;/p&gt;
&lt;p&gt;Social science has boundary objects: artifacts that different groups can use
differently while still coordinating around the same thing. Modern agent
frameworks talk about state, workflows, tool interfaces, handoffs, memory, and
context engineering.&lt;/p&gt;
&lt;p&gt;Good. I do not want this to be new. I want it to be useful.&lt;/p&gt;
&lt;p&gt;The whiteboard test is my way of carrying that lineage into the current agent
mess. Before I put context into prompts, memory, tools, or workflow state, I
want to know what shared surface people, agents, and code are supposed to use to
communicate.&lt;/p&gt;
&lt;p&gt;That gives me a handle before I reach for a framework. It lets me ask small
questions that are not small:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What is the board?&lt;/li&gt;
&lt;li&gt;Who can see which part?&lt;/li&gt;
&lt;li&gt;Who is allowed to write?&lt;/li&gt;
&lt;li&gt;What needs a source?&lt;/li&gt;
&lt;li&gt;What must never be summarized away?&lt;/li&gt;
&lt;li&gt;How does the board evolve?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If those answers are fuzzy, the system will be fuzzy too. The agent may still
sound confident, which is worse.&lt;/p&gt;
&lt;h2 id="infinite-boards-are-not-free"&gt;Infinite Boards Are Not Free&lt;/h2&gt;
&lt;p&gt;The board can be huge. That does not mean it should be.&lt;/p&gt;
&lt;p&gt;An infinite whiteboard gives you a new problem: context management. Now the
manual has to say what is relevant, what is stale, and what must stay exact.&lt;/p&gt;
&lt;p&gt;This is where the metaphor stays honest. More context is not the same as better
context. A messy board is just a messy prompt with better branding.&lt;/p&gt;
&lt;p&gt;Some information should be visible all the time. Some should live in a drawer.
Some should expire. Some should require a human before it changes.&lt;/p&gt;
&lt;h2 id="the-point"&gt;The Point&lt;/h2&gt;
&lt;p&gt;Before you prompt the agent, design the board.&lt;/p&gt;
&lt;p&gt;Before you add another agent, decide what board state it needs and what manual it
follows.&lt;/p&gt;
&lt;p&gt;Before you add memory, decide what should survive.&lt;/p&gt;
&lt;p&gt;Before you expose controls to a user, decide what they should never have to see.&lt;/p&gt;
&lt;p&gt;The whiteboard is not all you need.&lt;/p&gt;
&lt;p&gt;But it is a good place to start.&lt;/p&gt;</description></item></channel></rss>