> ## Documentation Index
> Fetch the complete documentation index at: https://learn.nextedy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Track Team Capacity

> Use Nextedy PLANNINGBOARD's capacity tracking to see how much work is allocated to each team member per sprint, spot overallocation before it becomes a problem, and balance workload across your team.

## Prerequisites

* Planningboard is installed and a board is configured on a Polarion Wiki page.
* A teams service is set up for your project. See [Set Up Teams Service](/planningboard/guides/capacity/teams-service-setup).
* Work items have remaining estimates (or a custom capacity field) populated.
* Team members are assigned to work items on the board.

<Warning title="Single-assignee only">
  Planningboard capacity tracking supports **one assignee per work item**. If a work item has multiple assignees, only the primary assignee is counted in capacity calculations. This is a known limitation compared to Nextedy GANTT. Additionally, capacity is calculated from direct task estimates only — effort on sub-items is **not** distributed upward to parent items.
</Warning>

***

<Steps>
  <Step title="Enable the teams service">
    Open the Widget Parameters panel for your Planningboard widget and set `useTeamsService` to `true`. This tells Planningboard to pull team membership and calendar data from the teams service rather than using a flat plan capacity value.

    ```properties theme={null}
    useTeamsService = true
    ```

    <Warning title="Whitespace sensitivity">
      Capacity configuration properties are whitespace-sensitive. Do not add leading or trailing spaces around the `=` sign or the value. Incorrect whitespace causes silent misconfiguration.
    </Warning>

    ***
  </Step>

  <Step title="Select the team">
    Set the `selectedTeam` widget parameter to the team whose capacity you want to track. This determines which users appear in per-user capacity calculations.

    ```properties theme={null}
    selectedTeam = <team-work-item-id>
    ```

    Replace `<team-work-item-id>` with the Polarion work item ID of your team (for example, `MYPROJECT-T-1`). Team IDs are automatically remapped if the team is defined in a supporting project.

    ***
  </Step>

  <Step title="Enable capacity load display">
    Set the `capacityLoad` parameter to `true` to activate the capacity bar visualization in plan columns.

    ```properties theme={null}
    capacityLoad = true
    ```

    When enabled, each plan column shows a **capacity bar** indicating the ratio of allocated effort to total team capacity for that sprint.

    ***
  </Step>

  <Step title="Configure per-user capacity (multiCapacityLoad)">
    For boards using user swimlanes, enable `multiCapacityLoad` to show a separate capacity bar per swimlane row rather than a single aggregate bar per column.

    ```properties theme={null}
    multiCapacityLoad = true
    ```

    With `multiCapacityLoad` enabled, each user's swimlane row displays its own capacity progress bar, making it straightforward to spot which team members are over- or under-allocated at a glance.

    <Tip title="Choose the right mode">
      Use `capacityLoad = true` alone for a team-aggregate view per sprint column. Add `multiCapacityLoad = true` when your swimlanes are set to **Users (Assignee)** and you need per-person capacity visibility.
    </Tip>

    ***
  </Step>
</Steps>

## How capacity is calculated

Planningboard derives capacity values from three sources:

<Frame>
  <img src="https://mintcdn.com/none-17b4493f/zUlmOSLBIQ0HyaAX/planningboard/diagrams/guides/capacity/team-capacity/diagram-1.svg?fit=max&auto=format&n=zUlmOSLBIQ0HyaAX&q=85&s=14143951dce88e5e00a48ce94de69b2e" alt="Team Calendar and Work Item Estimates feed totalCapacity and allocatedCapacity per user, which combine into availableCapacity; negative values indicate overallocation" width="680" height="320" data-path="planningboard/diagrams/guides/capacity/team-capacity/diagram-1.svg" />
</Frame>

| Value               | Definition                                                                                                                     |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `totalCapacity`     | Hours available from the user's working calendar for the sprint period, multiplied by their assignment percentage on the team. |
| `allocatedCapacity` | Sum of remaining estimates for all work items assigned to that user within the sprint. Rounded to one decimal place.           |
| `availableCapacity` | `totalCapacity − allocatedCapacity`. Negative values indicate overallocation.                                                  |

<Warning title="Users without a calendar default to zero capacity">
  If a team member has no calendar defined and no fallback calendar is configured (`nextedy.gantt.calendarHolder`), their `totalCapacity` is `0.0`. They will always appear as overallocated regardless of assignment. Set up calendars for all team members, or configure a fallback calendar holder.
</Warning>

***

<Steps>
  <Step title="Configure a fallback calendar (optional)">
    If some users lack individual calendars, set the `nextedy.gantt.calendarHolder` property in your project's administration properties to a base user whose calendar serves as the fallback.

    ```properties theme={null}
    nextedy.gantt.calendarHolder = admin
    ```

    This prevents zero-capacity fallback for users without their own calendar.

    ***
  </Step>

  <Step title="Configure capacity modifiers (optional)">
    If your teams have planned capacity reductions — for example, a sprint where the team is partly allocated to a release — enable capacity modifiers:

    ```properties theme={null}
    nextedy.gantt.useTeamCapacityModifiers = true
    ```

    When enabled, Planningboard reads modifier percentages from the `capModA` field (default) on each team work item and reduces the calculated capacity accordingly. To use a different field name, set:

    ```properties theme={null}
    nextedy.gantt.capacityModifierAField = <your-field-name>
    ```

    ***
  </Step>

  <Step title="Verify the capacity display">
    After saving the widget parameters, reload the board. You should now see:

    * A **capacity bar** at the top of each plan column, showing total allocated effort vs. available team capacity for that sprint.
    * If `multiCapacityLoad` is enabled: individual capacity bars in each user swimlane row.
    * Hovering over a capacity bar shows a tooltip with per-user breakdown:
      * **Available** (shown in red if negative / overallocated)
      * **Allocated**
      * **Total**

    <Tip title="Custom capacity tooltips">
      You can customize the tooltip content using the `columnTooltipTemplate` configuration option. This accepts a string template or a function that receives the column and row objects. After updating the template programmatically, call `setCurrentView` to trigger a re-render.
    </Tip>

    ***
  </Step>
</Steps>

## Example configuration

The following is a complete widget parameter snippet for a user-swimlane board with per-user capacity tracking:

```properties theme={null}
useTeamsService     = true
selectedTeam        = MYPROJECT-T-1
capacityLoad        = true
multiCapacityLoad   = true
```

This configuration activates team-aware capacity tracking, selects the team with ID `MYPROJECT-T-1`, and enables per-user capacity bars across all user swimlane rows.

***

## Limitations

* **No multi-assignee support.** Only one assignee per work item contributes to capacity load.
* **No sub-item effort distribution.** Parent item capacity is not aggregated from child task estimates; only direct estimates on assigned tasks are counted.
* Users without calendar entries default to `totalCapacity = 0.0` unless a fallback calendar holder is configured.

For troubleshooting capacity values that appear incorrect or zero, see [Capacity Calculation Issues](/planningboard/guides/troubleshooting/capacity-issues).

***

## See also

* [Set Up Teams Service](/planningboard/guides/capacity/teams-service-setup)
* [Track User Capacity](/planningboard/guides/capacity/user-capacity)
* [Visualize Capacity Load](/planningboard/guides/capacity/capacity-visualization)
* [Normalize Capacity Across Swimlanes](/planningboard/guides/capacity/capacity-normalization)
* [Configure Capacity Tracking](/planningboard/guides/configuration/capacity-configuration)
* [User and Assignee Swimlanes](/planningboard/guides/swimlanes/user-swimlanes)
* [Capacity Calculation Issues](/planningboard/guides/troubleshooting/capacity-issues)

<Accordion title="Sources">
  **KB Articles**

  * Swimlane Assignment Types
  * What is 'Normalization'
  * Introduction to Planningboard

  **Support Tickets**

  * [#6605](https://support.nextedy.com/helpdesk/tickets/6605)
  * [#6777](https://support.nextedy.com/helpdesk/tickets/6777)
  * [#4714](https://support.nextedy.com/helpdesk/tickets/4714)

  **Source Code**

  * `PlanningBoardDataService.java`
  * `PlanningBoardWidget.java`
  * `planningboard.js`
  * `capacityHelperData.cy.ts`
  * `perUserCapacity.cy.ts`
</Accordion>
