Project Commander Docs ← Back to site

Team & Capacity Tab — Feature Guide

Team & Capacity tab — period selector, member table, status badges, total row
Team & Capacity tab — period selector, member table, status badges, total row

What it's for

The Team & Capacity tab is where the team's roster, base capacity, time off, holidays, and per-project allocations are kept. Every other capacity-aware feature in the app — the forecast, the cascade chart, the feasibility score, sprint pre-mortem, weekly demand vs capacity, Auto-Level — reads its inputs from here.

The tab opens with its answer — a verdict strip saying how many people are overloaded — and then does four things: lets the user manage the team roster (add, edit, remove members); set base capacity in story points per sprint or hours per week, optionally with per-week overrides; track time off (PTO) and company holidays; and allocate each member's effort across multiple projects when programmes are configured.

The data is local-only — there is no Jira write-back for capacity. Removing a member can also unassign that person's open issues in Jira, if the user ticks that option in the confirmation, so the work doesn't silently stay on someone who is no longer on the team.

Verdict strip

A five-cell strip across the top of the tab, above everything else. It answers "is this team overloaded, and by how much" before the user reads a single row.

The strip's Remaining capacity and Demand figures are the same values the Total row at the foot of the table shows, from one calculation.

Why "Load" and not "Utilization": three different measures would otherwise share one word. Util % in the table below is a per-person availability setting (a number the user types). Utilization on the Projects tab is remaining work against capacity to the target date. Neither is demand against remaining period capacity — that is Load, the same term the Scope tab's Resource Breakdown uses and the name of the bands behind every status badge.

Header / Toolbar

Period selector

Six bordered buttons at the left of the period row — Sprint, Weekly, Biweekly, Monthly, Quarterly, Yearly. The choice changes how the table aggregates per-week capacity and how the table reads as bulk-edit input. Underneath, capacity is always stored per ISO week; the period view is a convenience for setting many weeks at once and for reading totals at the right granularity.

Sprint (added 2026-09-01) steps sprint by sprint instead of by a fixed number of days, names the sprint being viewed beside its dates, and changes the capacity column to Pts/Sprint or Hrs/Sprint. !The period row with Sprint chosen — the sprint dropdown right after the Sprint button, set to All sprints, and the Pts/Sprint column reading one sprint's worth per person

With Sprint chosen, a dropdown sits right after the Sprint button, with no arrows: it lists every sprint by name and dates, oldest first, plus All sprints — every active and future sprint, first start to last end (added 2026-09-02). With All sprints chosen the Net, Remaining and Demand columns total the whole span, and the Pts/Sprint column still shows one sprint's worth per person: a number typed there is set for every one of those sprints. It is the same number the Capacity cell in that sprint's card on the Sprints tab sets — both write to the person's weekly values, so neither screen can disagree with the other. On a project with Sprint Mode turned off the button reads Period instead.

Because capacity is held per calendar week, two sprints that overlap a week share whatever is typed there — a sprint ending on a Wednesday and the next starting on the Thursday sit in one week. With Sprint chosen, a line under the period row names the sprints that share a week with the one being viewed and says that a number typed here changes them too.

Period navigation arrows

Arrows step the visible window forward or backward by one period, either side of a date box showing where the window starts. The date box is clickable: pick any date to jump straight to the period containing it.

"Populate weeks from legacy" banner

Appears whenever the team has no per-week capacity data yet (reading Set capacity to get started… Populate weeks). Clicking it backfills the per-week capacity map from the team's existing weekly-hours and points-per-sprint defaults so existing setups keep working. Once weekly data exists the banner is gone; it would reappear if that data were cleared.

A figure typed for a person here is also the rate the delivery forecast uses for them beyond the last planned sprint. Capacity is stored per calendar week, so a person given a figure for one week only has nothing in the sprints after it; those sprints are left out when the forecast works out their rate, rather than counted as zero, so a figure entered for a single week is not divided down into a fraction of a point a sprint. Somebody with work left and no capacity typed in any sprint cannot clear it, and the Delivery forecast card on the Dashboard says so by name instead of showing a date.

Add member button

At the right-hand end of the period row, a + Add member button opens a dialog with a Name field and, when a project is selected in the header, a Share of <project> field pre-filled at 100%. The new member arrives with no capacity — nothing typed is no capacity, never a guessed figure (Don, 2026-09-01) — and the project's default utilisation; you type their capacity in the table. The same holds everywhere the app reads a person's capacity: a person with nothing typed counts for nothing on every screen, and the Critical Chain view lists their work as unscheduled by name rather than pacing it at a guess. People filled in automatically from a new project's assignees (the one-time pre-fill) each get 100% of that project — the same share a hand-added person starts with — so a capacity typed for them counts in full on the Sprints tab; split the share when a second project picks the same person up (2026-09-02).

Show total / Per selected project toggle

Two buttons on the period row, pushed to the right, visible only when programme projects are configured. Show total (the default) shows each member's full capacity. Per selected project scales every capacity column by that member's allocation factor for the project currently selected in the main app's project picker. In project view, capacity and utilisation become read-only — they are scaled values, not stored values, so editing them would be ambiguous. Time off, holidays, and demand still display unscaled.

Team Members table

One row per member. Sticky-header table with the columns listed below; the headings read in capitals, as the mockup draws them, and each column's unit is carried by its figures rather than its heading. There is no heading band over the table and nothing that can collapse it — the screen runs verdict strip, period row, table. The two availability sections beneath it, grouped under an Availability detail heading, do collapse.

Selection

Identity

Capacity (period bulk)

Allocation (programme projects only)

Time off and holidays

Net capacity

Demand

Issue count and inline expand

Status badge

Removal

Per-member detail rows

Three independent inline expansions:

Issues detail

Lists every non-done issue assigned to the member that overlaps the period, with Jira key, summary, and points.

Time off detail

Lists every PTO entry and holiday in the period, each with its date, reason, and hours. There are no inline delete buttons in this detail row — remove time off from the calendar or the per-member time-off modal, and holidays from the Holidays section.

Allocation popover

A floating panel anchored to the Alloc button. Lists every programme project by key in a four-column grid (rows wrap when more than four projects exist). Each project card has two fields: a percent input (the share of this member's capacity dedicated to that project) and an editable "= X" line that shows the computed absolute, labelled with its period — pts/sprint for points-mode projects and h/wk for time-mode — so the figure never reads as a doubling of the per-week Pts/Wk value in the row above. Edit either field and blurring persists the change; the other field recomputes from the member's current capacity. The popover header shows Project allocations and a close button. Two Σ chips at the bottom row sum the percents per unit — Σ Hrs: X% / 100% and Σ Pts: Y% / 100% — both turning red with a ⚠ marker when totals exceed 100%. The popover stays open when you switch back to Show total; it closes only on an outside click, Escape, the close button, or re-clicking the Alloc cell.

Percent storage is the source of truth: when the member's Pts/Wk or Hrs/Wk is edited in the row above, every "= X" computed value in their popover updates immediately without any allocation edit. A 60% allocation stays 60% across capacity changes — that's the intent the planner expressed, not the absolute value.

Zero-allocation confirm

When the user edits an allocation cell down to zero (in either the matrix on the Projects tab or this popover) and the affected member still has unfinished work assigned to that project, a ConfirmDialog opens before the change saves. The title reads Zero allocation with assigned work; the message names the member, the project key, and the count of unfinished issues, then asks whether to continue (e.g., "Sarah Chen has 3 unfinished issues assigned in AUTH. Setting allocation to 0 will leave them with no capacity for this project. Continue?"). The user picks Cancel (allocation reverts to the previous value) or Set to 0 (allocation is zeroed and the forecast recomputes). It does not fire when the member has no open issues on the project — there is nothing to warn about.

Per-member time-off modal

Per-member Time Off modal opened from
Per-member Time Off modal opened from "view time off" — header with avatar and name, summary line counting PTO days, holidays, total hours, list of entries (or empty state), and Add Time Off form with date picker, duration dropdown, reason field, Add and Close buttons

Reached by the view time off link on the member's name. Full-screen modal with four parts:

Useful for entering a year of PTO upfront or for spotting clashes with a release window.

Time Off calendar section

A folding section beneath the team table, under the Availability detail heading, named Time off calendar. Its header carries the number of entries the calendar is currently showing (0 entries). Contains a month-view calendar, controls for bulk multi-day time-off entry, and a list of the entries beneath it.

Time off calendar with its entry count in the header, member chips, the four-colour day legend (weekend / holiday / time off / selected), and the click-to-select day grid
Time off calendar with its entry count in the header, member chips, the four-colour day legend (weekend / holiday / time off / selected), and the click-to-select day grid

Calendar navigation

Independent period bar with left/right arrows; the calendar's month is decoupled from the team table's period. Useful for editing forward time off while reading current-quarter capacity.

Member filter

A Show checkbox row letting the user filter the calendar to one or more team members. Clear resets to all members.

Legend

Four day colours: weekend (light grey), holiday (light blue), time off (light orange), selected (light green with a green outline).

Day selection

Click a non-weekend day to select it. Ctrl-click toggles a day in or out of the selection. Shift-click selects a range from the last clicked day to the current day, skipping weekends. While days are selected, three buttons appear: Add Time Off (opens the bulk-add modal), Delete Time Off (removes any PTO entries on selected days), Clear (deselects).

Add Time Off bulk modal

Triggered from the selection action bar. Shows the chosen date range, lists each selected day as a chip (with an H badge for any day that already has a holiday), allows the user to pick a member, set hours-per-day from a dropdown, type a reason, and confirm. The modal also has a collapsible Mark as Company Holiday form for declaring the same selection a holiday — shown unless every selected day already has a company holiday.

Time off list

Beneath the calendar, a four-column list of exactly what the calendar above is showing — same month, same member filter: Member, From, To, Impact. Consecutive days for one person are gathered into a single row, so a three-day absence reads as one line rather than three.

Impact is what that absence takes off the person's capacity, in the project's own unit, using the same deduction the Net column applies: hours in hours mode (days when the project counts in days), and in points mode the member's daily points — their weekly points divided by five — for each day off. It is never raw hours subtracted from a points figure.

When the month holds no time off, the list says so rather than showing an empty table.

Company Holidays section

Company Holidays section expanded with the inline Add form — date picker, holiday name field, Yearly checkbox, Add button
Company Holidays section expanded with the inline Add form — date picker, holiday name field, Yearly checkbox, Add button

A collapsible list. Each row shows date (formatted as Mon, Jan 1), name, an optional 🔄 recurring badge for yearly holidays, and Edit / Delete buttons. The Edit button switches the row into inline edit mode (date input, name input, Yearly checkbox, Save / Cancel). The Delete button removes the holiday immediately. The Add form at the bottom takes a date, a name, and a Yearly checkbox; submitting persists the holiday. Duplicate dates are silently ignored.

Holidays apply company-wide and are deducted from every member's net capacity automatically.

Total row

The last row of the team table aggregates across the visible (filtered) members.

Every figure sits under its own heading, including when the Alloc column is present.

In Show per selected project mode, capacity and Net are scaled by per-member allocation factor; time-off, holidays, and demand totals remain unscaled.

Demand-vs-Capacity feed (no chart in this tab)

The Team & Capacity tab itself does not render the cascade or feasibility chart. Once configuration is saved, the weekly bucketing engine reads the same data and feeds the Plan-Risk weekly grid, the cascade bar chart in What-If, and the feasibility scores on the Sprints tab. The link is one-way: configure here, see results elsewhere.

Estimation mode and time units

The whole tab adapts to the project's estimation mode:

Per-week capacity is stored in whichever unit the project is in; switching modes does not convert stored values automatically.

Data persistence

Saving writes the entire roster + holidays + PTO + allocations as one record into the project's persistent store. Changes are saved on blur and on dialog confirm. There is no explicit Save button.

Removing a member can unassign that person's open issues in Jira — the only Jira write the tab makes, and only when the user ticks that box in the removal confirmation. All other edits are local.

Cross-cutting modes and settings

How the numbers are computed

Effects on other parts of the app

© 2026 Project Commander · projectcommander.app · Support · Privacy · Security · Terms