Capacity by project
The Resourcing grid reads top-down: project → role → person. Starting from the work rather than from the team means an unfilled job is visible as a gap in the plan, instead of being invisible because nobody is standing in it.
The three levels
A role is measured against the demand it asks for. Every role has a target — the amount of time the work actually needs each week — and the grid measures the people on it against that target. A role that asks for one person's full week has a target of 100%. A role that needs two people has a target of 200%. Where a role asks for nothing in particular, it falls back to one full-time slot, which is the common case.
You set a role's target from the grid: the people icon on a role row opens its demand, where you say how many people the work needs and over what period. Each full-time person becomes one open slot, and the slots add up to the target — two open slots at 100% make a role that needs 200%. See Setting a role's demand.
People on a role add up, and they are compared to the target. If two people are booked on the same 100% role at 75% and 50%, that role reads 125% — one slot with more people in it than it can hold, not two comfortably half-filled slots. But if the role asks for 200%, two people at 100% each read 200 / 200: fully staffed, and not flagged. Over-capacity means genuinely more people than the work asked for, and it is meant to look wrong, because it is a decision waiting to be made: either someone moves, or the role's target was too low.
A project averages its roles. A project with a role covered at 60% and a second role with nobody in it reads 30%, not 60%. Open roles pull the average down, which is the point — a project is not well staffed just because the people who are on it are busy.
Only roles that actually need someone that week count toward the average. A role with no booking and no vacancy that week is simply not running yet, and it does not drag the project's number down.
Reading a cell
Each cell covers one week and shows a small bar with a label.
| The cell says | It means |
|---|---|
80% |
The role is 80% covered this week. |
50 / 100 |
Partly covered: 50% staffed against a target of 100%. |
200 / 200 |
Fully covered against a target of 200% — two people at 100% each. |
needs 100% |
Nobody is booked. The whole target is open. |
on leave |
The booked person is away this week. |
40% draft |
A proposed booking that has not been confirmed. |
The bar is drawn against a capacity line, and that line is the role's own target — so a role that needs 200% has its line at 200%, and a role fully staffed against it sits exactly on the line rather than looking overbooked. The bar keeps rising past the line to a quarter above it. Beyond that it shows a marker at the top rather than growing further, but the number is always the true one — a role booked at 200% says 200%. Nothing is rounded down to make the plan look healthier than it is.
When bookings and leave together push a week past full, the cell is ringed and washed in red. That is the signal to act.
Leave is subtracted, not ignored. Approved holidays appear as a hatched band hanging from the capacity line, sized to the days actually taken — three days off in a five-day week fills three fifths of it. A person who is away for the whole week reads on leave and counts as no coverage at all, so a project does not appear staffed by someone who is on a beach.
Open roles
A role with nobody on it is highlighted and reads Nobody assigned, followed by the week the vacancy opens — for example needed from W28. That week can be earlier than anything on screen, and deliberately so: a role that has been open since spring should say so, not appear to have opened this morning.
Its cells show the demand as needs 100% in an amber hatch. An open role has nothing to expand, so it has no arrow beside it.
To see only these, set the role filter to Open roles only.
Opening a cell
Select any cell and a panel opens on the right explaining where its number came from — the roles behind a project's average, the people behind a role's coverage, or everything else a person is booked on that week. It reads the plan and does not change it. An empty cell opens too, and says which fact it is stating.
See The cell drill-down.
Narrowing the grid
Two filters sit on the band above the grid, alongside the period controls, and they compose: Roles offers All roles or Open roles only, and Project narrows to one project. Setting both leaves the open roles on that project. Each choice adds a chip you can remove on its own.
Filtering to nothing shows a short No results line with a clear-filters link, rather than the teaching empty state — there is data, it is just hidden.
Drilling into a role
Select the arrow beside a role — or the role name itself — to reveal the people booked on it, one row each, with their own weekly bars. Select it again to collapse.
Roles start collapsed, and the grid does not remember which ones you opened: reloading the page returns to the collapsed view. Expanded rows join the keyboard order immediately, so the arrow keys move through them like any other row.
Working with the keyboard
The grid behaves as a spreadsheet does. Arrow keys move between cells and stop at the edges rather than wrapping round, Home and End jump to the ends of a row, and Ctrl+Home and Ctrl+End jump to the first and last cell of the whole grid.
Screen readers announce the grid as a grid: each cell reports its row and column position and the size of the grid it sits in, and a role row says whether it is expanded or collapsed as you move onto it — so you can tell where you are without seeing the screen. Expanding a role changes the announced row count straight away.
The legend
Beneath the grid, a legend names the four things a cell can show: Staffed, Open role — demand with nobody in it, Assigned person is on leave, and Internal / non-billable.
Three things to know about the numbers
- A role with no open slots falls back to one full-time slot. Its target is 100%, so a role that genuinely needs only a day a week will read as under-covered until you tell it otherwise. Set the role's demand to the fraction of a person the work really needs, and the target follows.
- Assigning someone does not reduce a role's target. The open slots are the statement of what the work needs, not a countdown of what is left to fill — so they stay put as people are added, and the grid works out the shortfall for you. Change what a role needs in its demand dialog, not by staffing it.
- In the 90 days view, each column is a fortnight and shows the average of its two weeks. If either of those weeks was over capacity, the column still flags it — averaging never hides a conflict.
If the grid says the figures are incomplete
Very large plans can exceed what the page loads in one go. When that happens a notice appears above the grid warning that only part of the roster is shown. Narrow the period or the filter and the figures become complete again.
Example use cases
- Scan a quarter for red cells to find every over-committed role before the plan is agreed.
- Filter to open roles to see exactly which jobs are unfilled and from which week.
- Expand a role reading 130% to see which two bookings collide and decide which one moves.
- Check a project reading 40% and discover the shortfall is an unfilled role rather than an idle team.
- Confirm that an approved holiday has already been accounted for before promising a delivery date.