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

# SAFe Planning Workflows

> Configure Planningboard for Scaled Agile Framework (SAFe) planning across Portfolio, Program, and Team hierarchy levels.

***

## Before you start

* Nextedy PLANNINGBOARD is installed and licensed in your Polarion project
* Your Polarion project uses the SAFe solution template with SAFe Plan types configured
* You have widget editor access on the Wiki or LiveDoc page hosting the board
* Plan names follow SAFe conventions (see the warning on dash-containing names below)

<Warning title="Dash characters in plan names require version 25.3.0 or later">
  SAFe naming conventions commonly use dashes — for example `PI-2401` or `I-2401-1`.
  A parsing bug caused column spans to render incorrectly, capacity to display as zero, and plan shortcuts to disappear when plan names contained dashes. This was partially fixed in 23.8.0 and **fully resolved in 25.3.0**. If your plan names contain dashes, upgrade to 25.3.0 or later before proceeding.
</Warning>

***

## How SAFe planning modes map to hierarchy levels

Planningboard exposes five `plansMode` values. For SAFe deployments, four are relevant:

<Frame>
  <img src="https://mintcdn.com/none-17b4493f/zUlmOSLBIQ0HyaAX/planningboard/diagrams/guides/planning/safe-planning/diagram-1.svg?fit=max&auto=format&n=zUlmOSLBIQ0HyaAX&q=85&s=f5ff30bf90eebe02c0c91f5930af5d39" alt="Mapping of SAFe hierarchy levels to Planningboard plansMode values" width="700" height="220" data-path="planningboard/diagrams/guides/planning/safe-planning/diagram-1.svg" />
</Frame>

The `assignmentMode` you pair with each level determines the swimlane grouping:

| Level                    | Recommended `plansMode` | Recommended `assignmentMode` |
| ------------------------ | ----------------------- | ---------------------------- |
| Team (Sprint board)      | `SAFE_SPRINTS`          | `SAFE_TEAM` or `ASSIGNEE`    |
| Program (PI board)       | `SAFE_PIS`              | `SAFE_TRAIN_TEAM`            |
| Portfolio (solution PIs) | `SAFE_SOLUTION`         | `SAFE_PROGRAMS`              |
| Portfolio (sprint view)  | `SAFE_PFL_SPRINTS`      | `SAFE_PROGRAMS`              |

<Note title="Plans Type selection changes the configuration UI">
  When you switch **Plans Type** in the widget parameters, the visible configuration fields change. Fields like **Scope**, **Query**, and **Type** appear for **Project Plans** (`PROJECT_PLANS`) mode; SAFe modes show different fields including the **Program Increment Parameter ID** field. This is expected — each mode surfaces only the fields relevant to its hierarchy level.
</Note>

***

<Steps>
  <Step title="Set the Plans Mode">
    1. Open the Polarion Wiki or LiveDoc page containing your Planningboard widget.
    2. Click **Edit** on the page, then open the widget parameters panel.
    3. Under **Parameters for Plans (Columns)**, set **Plans Type** to the SAFe mode for your hierarchy level (for example, **SAFe Program Increments in Program** (`SAFE_PIS`) for a Program-level PI board).
    4. Save the widget parameters.

    The board will now load SAFe Plans as columns instead of standard project plans.

    ***
  </Step>

  <Step title="Set the Assignment Mode for swimlanes">
    1. In the same widget parameters panel, open **Swimlanes (Rows)**.
    2. Set **Assignment Type** to the mode matching your hierarchy level:
       * **Program / Solution Teams (SAFe)** (`SAFE_TEAM`) — swimlanes for SAFe teams within the current program (sourced from Polarion SAFe Solution data)
       * **Agile Release Train Teams (SAFe)** (`SAFE_TRAIN_TEAM`) — swimlanes for teams within a specific Agile Release Train, filtered by ART ID
       * **Programs (SAFe)** (`SAFE_PROGRAMS`) — swimlanes for SAFe programs within a solution train (portfolio-level)
       * **Users (Assignee)** (`ASSIGNEE`) — standard assignee swimlanes (also valid at Team level)
    3. If you selected **Agile Release Train Teams (SAFe)** (`SAFE_TRAIN_TEAM`), enter the ART ID in the **ART ID** field that appears.
    4. Save the widget parameters.

    <Tip title="SAFe Team field and Program field">
      Planningboard reads SAFe team assignments from the `safeTeam` custom field on work items (default for **Program / Solution Teams (SAFe)** (`SAFE_TEAM`) and **Agile Release Train Teams (SAFe)** (`SAFE_TRAIN_TEAM`) modes), and SAFe program assignments from the `safeProgram` field (default for **Programs (SAFe)** (`SAFE_PROGRAMS`) mode). If your project uses different field IDs, set `safeTeamField` or `safeProgramField` to match your actual field IDs.
    </Tip>

    ***
  </Step>

  <Step title="Configure the Program Increment Parameter ID (SAFe Sprints in Program and SAFe Sprints in Portfolio)">
    When using **SAFe Sprints in Program** (`SAFE_SPRINTS`) or **SAFe Sprints in Portfolio** (`SAFE_PFL_SPRINTS`), the board needs to know which Program Increment to load sprints from. This is driven by a **Page Parameter**.

    1. In the widget parameters panel, locate the **Program Increment Parameter ID** field (visible only in **SAFe Sprints in Program** (`SAFE_SPRINTS`) and **SAFe Sprints in Portfolio** (`SAFE_PFL_SPRINTS`) modes).
    2. Enter the name of the Page Parameter you will create — for example, `pi`.
    3. On the Wiki or LiveDoc page, create a Page Parameter named `pi` and set its default value to the ID of the current Program Increment plan.
    4. The board now loads only the sprints belonging to that PI. Users can switch PIs by changing the page parameter value.

    <Warning title="Page Parameters must be explicitly created">
      The Program Increment Parameter ID field only references the parameter by name — the Page Parameter itself must be created separately on the page. If the parameter does not exist, the board will fail to load sprints correctly. See [Use Page Parameters](/planningboard/guides/configuration/page-parameters) for setup steps.
    </Warning>

    ***
  </Step>

  <Step title="Assign to Parent Plan (optional, recommended for SAFe)">
    When a work item is dragged into a sprint column, Planningboard can automatically assign it to the parent Program Increment as well.

    1. In the widget parameters, under **Parameters for Plans (Columns)**, enable **Assign to Parent Plan**.
    2. Save.

    With this enabled: dragging a Story into `I-2401-1` also plans it under `PI-2401`. Without it, the Story is planned only in the iteration.

    For SAFe modes, Planningboard also runs `syncSAFEParentsFromChildren` automatically — when a team assignment changes on a work item, the item is remapped to the correct Team Program Increment plan for that team.

    ***
  </Step>

  <Step title="Enable capacity tracking">
    Capacity bars in SAFe boards work the same as in standard mode. To enable them:

    1. Under **Parameters for Plans (Columns)**, enable **Show Capacity Load**.
    2. Optionally set **capacityField** to a custom field (such as story points) if you are not using time-tracking fields.
    3. Set **hoursPerDay** if your team uses a value other than the default of `8`.

    <Warning title="Capacity configuration is whitespace-sensitive">
      Widget parameter values for capacity (for example, `capacityField`) must not contain leading or trailing whitespace. A space before or after the field ID will silently break capacity calculations and show zero on the capacity bar.
    </Warning>

    See [Configure Capacity Tracking](/planningboard/guides/configuration/capacity-configuration) for full details.

    ***
  </Step>

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

    * SAFe Plans (PIs or sprints) displayed as columns, ordered chronologically
    * Swimlanes showing SAFe teams, ART teams, programs, or assignees depending on your assignment mode
    * Capacity bars per swimlane (if capacity load is enabled)
    * Work items as cards, draggable between plan columns and swimlanes

    <Tip title="Use the toolbar to verify dependency and load visibility">
      Use **Toggle Resource Load visualization** in the toolbar to confirm that capacity bars are rendering correctly. Use **Show Dependencies** to verify that dependency arrows appear between cards (requires `dependencyLinkRoles` to be configured — see [Configure Dependencies Display](/planningboard/guides/configuration/dependencies-configuration)).
    </Tip>

    ***
  </Step>
</Steps>

## SAFe plan naming conventions

<Frame>
  <img src="https://mintcdn.com/none-17b4493f/zUlmOSLBIQ0HyaAX/planningboard/diagrams/guides/planning/safe-planning/diagram-2.svg?fit=max&auto=format&n=zUlmOSLBIQ0HyaAX&q=85&s=8db84f8a92c2e355dd76f45fa2f91a61" alt="Recommended SAFe plan naming patterns for Program Increment, Iteration/Sprint, and Team iteration IDs" width="680" height="180" data-path="planningboard/diagrams/guides/planning/safe-planning/diagram-2.svg" />
</Frame>

Plan IDs generated via bulk creation use `{planNum}` and `{teamId}` placeholders. For SAFe naming, align your **Plan ID Pattern** and **Plan Name Pattern** to the conventions above. See [SAFe Plan Naming Conventions](/planningboard/guides/planning/safe-naming-conventions) for the full pattern reference.

***

## Configuration overview diagram

<Frame>
  <img src="https://mintcdn.com/none-17b4493f/zUlmOSLBIQ0HyaAX/planningboard/diagrams/guides/planning/safe-planning/diagram-3.svg?fit=max&auto=format&n=zUlmOSLBIQ0HyaAX&q=85&s=3753ee40b5cf2e1df888162953fa7660" alt="SAFe Program Board widget parameters (Plans, Swimlanes, Work Items) and the resulting board grid with PI columns and team swimlanes" width="690" height="400" data-path="planningboard/diagrams/guides/planning/safe-planning/diagram-3.svg" />
</Frame>

***

## Common pitfalls

<Warning title="Configuration UI changes by Plans Type — this is not a bug">
  Users often report that the widget parameter form looks different from screenshots in other guides. The form is dynamic: selecting **SAFe Program Increments in Program** (`SAFE_PIS`) hides the **Scope** and **Query** fields that are only relevant in **Project Plans** (`PROJECT_PLANS`) mode. If you do not see an expected field, verify that your **Plans Type** selection matches the level you are configuring.
</Warning>

<Warning title="Program / Solution Teams (SAFe) requires a Polarion SAFe Solution">
  The **Program / Solution Teams (SAFe)** (`SAFE_TEAM`) and **Programs (SAFe)** (`SAFE_PROGRAMS`) assignment modes read team and program data from Polarion's SAFe Solution structure. If your project does not have a SAFe Solution configured in Polarion, these modes will render an empty board or fail silently. Use **Users (Assignee)** (`ASSIGNEE`) or **Enumeration Field** (`ENUM`) mode as an alternative if the SAFe Solution is not set up.
</Warning>

<Tip title="Start with a single level before adding hierarchy">
  SAFe configuration is context-dependent and the interactions between `plansMode`, `assignmentMode`, and Page Parameters are easy to misconfigure. Configure and verify one hierarchy level (for example, the Team sprint board) before setting up the Program or Portfolio boards.
</Tip>

***

## See also

* [SAFe Plan Naming Conventions](/planningboard/guides/planning/safe-naming-conventions) — naming patterns for PIs, iterations, and team plans
* [SAFe Swimlanes](/planningboard/guides/swimlanes/safe-swimlanes) — detailed swimlane configuration for SAFe team and program modes
* [Use Page Parameters](/planningboard/guides/configuration/page-parameters) — how to create and reference Page Parameters for dynamic PI selection
* [Configure Plans (Columns)](/planningboard/guides/configuration/plans-configuration) — full Plans configuration reference
* [Configure Capacity Tracking](/planningboard/guides/configuration/capacity-configuration) — capacity bar setup and normalization
* [Bulk Plan Creation](/planningboard/guides/planning/bulk-plan-creation) — create PI and iteration plans in bulk with naming patterns

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

  * Planningboard interface & basic interactions
  * Introduction to Planningboard
  * Planningboard Widget Parameters

  **Support Tickets**

  * [#5879](https://support.nextedy.com/helpdesk/tickets/5879)
  * [#4711](https://support.nextedy.com/helpdesk/tickets/4711)
  * [#6174](https://support.nextedy.com/helpdesk/tickets/6174)

  **Source Code**

  * `PlanningBoardDataService.java`
  * `PlansMode.java`
  * `Config.java`
  * `Item.java`
  * `PlanningBoardWidgetRenderer.java`
</Accordion>
