Two agents working the same repository at once produce conflicting refactors, duplicated helpers and a merge that takes longer than either task saved. The solution is not better prompting; it is boundaries.
Isolate by subsystem, not by file
Give each task a subsystem with a clear interface — a service, a module, a route group — and forbid changes outside it. The rule is easy to state and easy to check in review: any file touched outside the assigned boundary fails the change.
Contracts must be machine-checked
Where two pieces of work meet, the meeting point is a type, a schema or a test agreed before either starts. If the contract only exists in prose, both sides will interpret it and both will be plausible.
One source of truth for conventions
Naming, error handling, data access, testing style — written once in the repository, referenced by every task. Otherwise each session invents its own reasonable-looking style and the codebase becomes a survey of them.
Everything that makes parallel agent work viable also makes onboarding a new engineer faster. That is not a coincidence.
Sequencing beats parallelism for schema work
Anything that changes the database is done alone, merged, and only then do the dependent tasks start. Parallelising migrations is a way of generating incident reports.
What we measure
Merge conflicts per week and the proportion of review comments that are about style rather than behaviour. Both go down when the boundaries are real.
