Plan with the owner, not around them.
Real enterprise features cross repositories, teams and vendors. Agents don't dissolve the org chart. At agent speed, they just hit its boundaries faster. So the plan has to know where the boundaries are, and who is on the other side.
Melvin Conway observed it in 1968: an organisation designs systems that copy its own communication structure. Every team boundary becomes an interface, and every interface has an owner.
That's not a technical problem to engineer away. It's how large software gets built at all. A feature someone asks for in one product usually needs a change in a service another team owns, a library a third team publishes, and something from a vendor nobody here controls.
So planning a real feature isn't purely technical. It's working out who owns each part, and coordinating with them.
Ask an agent for a feature and it will find a way to deliver it from where it is. If the data it needs belongs to another team, it reads their database. If the API doesn't offer a field, it scrapes one. If a capability is missing, it rebuilds it locally.
Each shortcut works. Each one is the local optimisation that grows a jungle, except now the jungle spans repositories, and the team that owns the real thing doesn't know your copy exists.
At Camunda, each repository carries an ARCHITECTURE.md with a small, machine-readable front matter. It says what the component owns, what people commonly think it owns but doesn't (with the real owner), what it depends on, and how other teams should ask it for changes.
Each dependency also says how far you may go to work around it. For most, the answer is never.
It's written for humans first and structured enough for any agent to read. It's the same idea as derivation: declare the facts once, where they live, and derive plans from them.
Our planning skill starts by rewriting the feature as capabilities: “The system must…”, without naming any repository. Naming one too early decides the owner before anyone has looked.
Then it follows depends_on to each dependency's own ARCHITECTURE.md, and onward, to find whoever is the source of truth. Owned here: plan it here. Owned by another team: write that team a requirement brief. Owned outside: use the extension points it offers, behind an adapter.
Illustrative repositories and feature.
Before options are compared, five hard gates rule some out. An option that fails any one is gone, however fast it would be.
The survivors are ranked in order: architectural integrity first, then constraints, then delivery. The tiers aren't added up, so a workaround here can never outscore asking the owner. A deadline is a reason to cut scope, or to agree a temporary contract with the owner, with its replacement already planned. It's never a reason to build their part in your repository.
OwnershipDon't build what another component owns.
ContractUse only what the owner offers, for what it was offered for.
Binding decisionsDon't contradict an accepted decision record without proposing a new one.
Hard constraints“Must work air-gapped” means must.
Consumer promisesDon't break a compatibility promise without a deprecation path.
The plan is a structured Markdown file, iterated in a pull request that's reviewed but never merged. Every part has an ID, so other plans can refer to it across repositories.
A brief goes to the owner the way the owner asked: through the intake in their ARCHITECTURE.md. Increments that need it are marked blocked by it. The owner answers each need in their plan, so they decide how to build it, not you.
Design and breakdown are separate phases. No issues are filed until the team and every owner it relies on have agreed the design.
Draft the planCapabilities, owners, design, open questions.
Send briefsAn issue in each owner's repository, need by need.
Owners answerAccepted, counter-proposal or declined, in their own plan.
Design agreedOnly now does breakdown start.
Breakdown and fileIssues, with cross-repository “blocked by” links.
ArchiveThe final plan goes on the epic; lasting decisions become decision records.
A validator checks every plan mechanically: IDs resolve, a permanent workaround is never chosen, “build it here” is only used for capabilities this repository owns, increments have no cycles, the diagram matches the tables, and each brief matches the plan.
And the skill itself was developed against evals: scripted scenarios run by agents and scored by separate grader agents against fixed rubrics. Each round's findings were fixed in the skill and checked in the next round.
| Scenario | Latest round |
|---|---|
| Main planning flow | 30/31 and 27/29 criteria passed, none failed |
| Under delivery pressure | 11/12 and 13/14 passed, none failed |
| Owner answering a brief | 12–13 passed, 3 partial, none failed |
From 51 graded runs on one real feature. Some scenarios haven't been run yet.
Enterprise features cross teams, and agents will happily cut straight across them. Have every repository declare what it owns and depends on, and let a planning skill read that across the organisation, place each capability with its owner, and make the coordination part of the plan. Then validate the plans and test the skill like any other code.