Why do multi-agent systems need a single-writer rule for each shared artifact?
answer
- isolation cuts both ways
- conflicts are semantic, not textual
- one owner per mutable artifact
- readers propose, the writer decides
- if you cannot partition, do not split
basics
~20 sIsolated workers cannot see each other's decisions, so two of them editing the same artifact make incompatible implicit choices that the orchestrator cannot reconcile from summaries. Keep writes with one designated agent; let the rest return read-only findings or proposals.
solid answer
~50 sContext isolation is the reason multi-agent works and also the reason concurrent writes break it: a worker literally cannot see the assumptions another worker just made. Two agents asked to modernize the same service will each pick a naming convention, an error-handling style and an interface shape, and both will be defensible and mutually inconsistent. The orchestrator receives two confident summaries and has no way to tell which decisions collide — reconciliation would require exactly the context that isolation removed. The discipline is single-writer: for each artifact, one agent has write authority; every other agent reads and returns findings or a proposed change that the writer applies. This is also a go/no-go test before splitting at all. If the work cannot be partitioned so that each piece has one owner, that is a strong signal to keep it in one agent rather than to invent a merge strategy.
go deeper
Know that letting two agents change the same thing at once causes conflicting results, and that the usual fix is to let one agent do the writing while the others only read.
Explain why the conflict is about unstated decisions rather than interleaved writes, and that summaries do not carry enough detail for the orchestrator to notice the clash.
Design the ownership map: one writer per mutable artifact, readers returning proposals, and human approval in front of irreversible writes. Say plainly why locks and merges address the wrong layer.
Use single-writer as the go/no-go filter on splitting at all, and own the long-horizon consequences — provenance for writes across turns, and what your system does when a proposal is rejected after the workers that produced it have exited.
## The failure this rule prevents Give two isolated subagents overlapping write authority over the same target — a module, a document, a configuration, a plan — and you do not get double the throughput. You get two coherent, incompatible pieces of work. Each worker made dozens of small implicit decisions along the way: what to call things, which error style to use, which of two ambiguous requirements to honour, how far the scope extends. None of those decisions is stated in the brief, because they only arise once the work is underway. And none of them is visible to the other worker, because isolation is the whole point of the architecture. When the summaries come back, the orchestrator sees two confident reports of success. It cannot detect that worker A standardized on one shape and worker B on another, because that detail did not survive the summary — and even if it had, reconciling would require re-reading both full transcripts, which is precisely the context the split was designed to keep out. The system's own architecture blinds it to its own conflict. ## Why the usual concurrency answers do not suffice Engineers reach instinctively for locks, transactions or merges. They address the wrong layer. A lock serializes *access*. It guarantees that two writes do not interleave mid-edit. It says nothing about two agents having made contradictory *decisions*; the second writer simply overwrites or extends work built on assumptions it never saw, and the result is internally inconsistent while being perfectly serialized. A merge assumes the conflicting edits are textually adjacent. Model-driven conflicts usually are not: one worker renames a concept in one place, another writes new code assuming the old name three files away, and no merge tool flags anything. The build may even pass. Last-write-wins silently discards work you paid a full worker loop to produce, and the orchestrator will still report both subtasks as complete. The conflict is semantic, so the fix has to be structural. ## The discipline For every artifact that can be mutated, exactly one agent holds write authority for the duration of the task. Everyone else is a reader. Read-only workers are cheap, safely parallel and exactly what isolation is good at: they explore, analyse and return findings. When a worker believes a change is needed, it returns a *proposal* — the finding, the recommendation, the specific edit — and the designated writer decides and applies it, in one context, with all the proposals in view. The writer role can be an agent or plain code; it does not have to be a model. What matters is that the decisions land in one place where they can be made consistently. The partition can also be by artifact rather than by role: worker A owns the ingestion module and only that, worker B owns the reporting module and only that, with no overlap. This works when the boundary is genuinely clean and neither piece constrains the other's interface. The moment two workers must agree on a shared contract, that contract needs a single owner too. ## Using it as a go/no-go test The rule doubles as a decision procedure before you build anything. Try to partition the work so that every mutable artifact has exactly one owner. If you can, you have a viable multi-agent design and the partition is your delegation plan. If you cannot — if every plausible split leaves two workers needing to change the same thing — that is telling you the work is tightly coupled, and the honest response is to keep it in a single agent rather than to invent a reconciliation strategy that will fail quietly. This is the more useful reading of the rule. It is not primarily a runtime safeguard; it is a design filter that catches unsuitable work before you have paid the multi-agent premium for it. ## Read-mostly work is where the fit is best Notice the alignment with everything else that makes multi-agent pay. Research, review, search and analysis are naturally read-only and therefore naturally single-writer: the only writer is the orchestrator producing the final synthesis. That is not a coincidence — it is why the pattern's clearest successes are exploratory and read-heavy. Work that is fundamentally about *changing* one coherent thing has one writer by definition, and its parallelism is limited by that. ## Where it gets genuinely hard Long-running systems make this messier than a single task does. If subagents can write in earlier turns and a later run reads that state, you effectively have writers separated in time as well as in context, and you need provenance — who wrote this, when, on what basis — to make later decisions defensible. Human-in-the-loop approval on the writer is a common and reasonable escalation for anything irreversible: the writer proposes, a person confirms, and the audit trail records both. And when a proposal is rejected, the workers that produced it have already exited; you are re-running work, not resuming it.
- Would per-artifact locking solve this instead?No — locks solve the wrong layer. They serialize access so writes do not interleave, but two workers can still make contradictory design decisions and the lock will happily let the second one build on assumptions it never saw. The conflict is semantic, not a race, so the result is internally inconsistent while being perfectly serialized. Structure ownership rather than scheduling access.
- Does the designated writer have to be an LLM agent?No, and often it should not be. The writer's job is to apply proposals consistently, which plain code does more predictably and far more cheaply when the change shape is known. Use a model in the writer seat only when the reconciliation itself needs judgment — deciding between two conflicting proposals, or resolving an ambiguity the workers surfaced. For anything irreversible, put a human approval step in front of the write.
- How does this interact with deciding whether to go multi-agent at all?It is the cleanest go/no-go test available. Attempt a partition where every mutable artifact has exactly one owner. If one exists, it is both your evidence that the work is separable and your delegation plan. If none exists, the work is tightly coupled, and keeping it in a single agent beats inventing a merge strategy that will fail silently after you have already paid the token premium.
It is the same reason two people editing the same document without seeing each other's edits produces a mess: not because either is careless, but because each is making reasonable choices against a version the other has already moved on from.
saying these in an interview costs you the question
- Proposes locking or transactions to fix conflicting agent decisions
- Assumes a text merge will catch model-generated inconsistencies
- Believes identical briefs produce identical worker output
- Lets last-write-wins silently discard a worker's completed work
- Splits tightly coupled work and plans to reconcile it afterwards