Build a board across several projects
The regulatory program lands in Claims Platform, Core Insurance and Digital Banking at once: Regulatory reporting: claims data extract, Regulatory reporting: settlement event feed, Sanctions screening on beneficiary name and nine more change requests. A native board belongs to one team in one project, so this program has no board at all. A query has no such boundary.
This is the short version. One board across several projects covers permissions, writes and the troubleshooting in full.
Before you start
Decide which project hosts the board. Columns come from that project's copy of the work item type and nothing else, so host the board where the state model you want as your column set lives. In the demo that is Claims Platform.
Steps
- In the query editor, turn on Query across projects. Without it, Azure
DevOps scopes the query to the project it is saved in and you get a third of
your board. Keep the type Flat list of work items, with no
ORDER BYor sorted ascending by the order field the type derives: Stack Rank for Change Request in the demo, which does not carry Backlog Priority, the order field of its Scrum-derived process. - Save it in Shared Queries, no deeper than one folder.
- In the host project, open Boards → AnyKanban and select New board, then Use existing query in the gallery that opens.
- Name it, pick the query under Backing query (flat list, or a tree of work items), and pick Change Request under Work item type.
- On the Fields tab, add Team Project to Fields shown on cards. Where a card can come from anywhere, the project is the one piece of context it cannot do without.
- Select Create, then open the board from the list.
What you should see
Five columns, New, Triage, In Progress, In Review and Done, taken from Change
Request as the host project defines it, with cards from every project mixed
into them by state name. Each card carries its project. Column counts run across
all of them: In Progress holds the two regulatory reporting change requests
and Green energy endorsement for commercial policies, so its header reads 3.
Give that column a WIP limit of 4 on the Columns tab of Settings and it
reads 3/4: one number for the whole program.
Dragging writes to the item in its own project, with no extra configuration.

Notes
Anything the query returns but the board cannot read comes back as a warning rather than a silent gap: The query matched {total} items, but this board could load only {loaded}, usually because somebody lacks access to one of the projects. Give everyone who steers the program read access to every project it spans.
A state that exists in another project but not in the host's type sends its cards to the Unmapped column instead of dropping them. Removed-category states are judged by the host too: Decommission the legacy batch clearing interface sits in Rejected, so it is off the board with a visible count and still in the List view.