# 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](https://anykanban.com/docs/guide-cross-project-boards/) 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

1. 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 BY`
   or 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.
2. Save it in *Shared Queries*, no deeper than one folder.
3. In the host project, open **Boards → AnyKanban** and select **New board**,
   then **Use existing query** in the gallery that opens.
4. Name it, pick the query under **Backing query (flat list, or a tree of work items)**, and pick **Change Request** under **Work item type**.
5. 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.
6. 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.

![One board over three projects: each card names the project it lives in](https://anykanban.com/docs/_img/cross-project-board.png)

## 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.

## Related

- [One board across several projects](https://anykanban.com/docs/guide-cross-project-boards/): the full guide
- [Create a named board](https://anykanban.com/docs/get-a-board/create-a-named-board/)
- [Build a board for types that never reach a backlog](https://anykanban.com/docs/get-a-board/board-for-types-with-no-backlog/)
- [Build a board across several teams' sprints](https://anykanban.com/docs/get-a-board/board-across-several-teams/)
