> ## 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 Programs Mode

> **SAFe Programs Mode** (`SAFE_PROGRAMS`) is a swimlane assignment type in Nextedy PLANNINGBOARD that organises the board into horizontal rows representing **SAFe Programs** (Agile Release Trains or Value Stre

<Note title="SAFe Solution required">
  SAFe Programs Mode requires a Polarion SAFe Solution configuration. Programs are discovered automatically from the SAFe Solution data at portfolio level. Contact Nextedy support if the SAFe Solution has not been set up in your Polarion instance.
</Note>

***

## Overview

<Frame>
  <img src="https://mintcdn.com/none-17b4493f/vfRg9jxXRntLqZFW/planningboard/diagrams/reference/assignment-modes/safe-programs-mode/diagram-1.svg?fit=max&auto=format&n=vfRg9jxXRntLqZFW&q=85&s=d09925287daf696b2367ea182c91be38" alt="SAFe Programs Mode board layout: rows are SAFe Programs (Program A, B, C) sourced from the Polarion SAFe Solution, columns are Program Increments (PI-1, PI-2, PI-3), and cards are work items placed in a Program/PI cell" width="700" height="330" data-path="planningboard/diagrams/reference/assignment-modes/safe-programs-mode/diagram-1.svg" />
</Frame>

In this mode the board renders one swimlane per SAFe Program discovered in the solution train. Work items are placed in the swimlane that corresponds to their `safeProgram` custom field value. Planners can drag cards between swimlanes to reassign a work item to a different program, and between columns to move it between PIs.

***

## Assignment Mode Parameter

| Parameter           | Value                 |
| ------------------- | --------------------- |
| Widget parameter    | `assignmentMode`      |
| Value for this mode | `SAFE_PROGRAMS`       |
| Defined in          | `AssignmentMode.java` |

Set this in the **Swimlanes (Rows)** section of the widget parameters panel.

***

## Parameters

The following parameters apply when `assignmentMode` is set to **Programs (SAFe)** (`SAFE_PROGRAMS`).

### Core Assignment Parameters

| Name                   | Type      | Default        | Description                                                                                                                                                                                     |
| ---------------------- | --------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `assignmentMode`       | `string`  | `ASSIGNEE`     | Set to `SAFE_PROGRAMS` to activate SAFe Programs Mode.                                                                                                                                          |
| `safeProgramField`     | `string`  | `safeProgram`  | Custom field ID that stores the SAFe Program assignment for work items. Must reference a valid Polarion enumeration field. Change this only if your SAFe Solution uses a non-standard field ID. |
| `showEmptySwimlanes`   | `boolean` | `false`        | When `true`, all programs from the solution train are shown as swimlanes even if they have no planned work items in the current view. When `false`, empty program rows are hidden.              |
| `swimlaneSort`         | `string`  | `alphabetical` | Sort order for program swimlanes. Controls the vertical ordering of program rows on the board.                                                                                                  |
| `collapsibleSwimlanes` | `boolean` | `true`         | Enables users to collapse and expand individual program swimlanes to reduce visual complexity on large boards.                                                                                  |

### Swimlane Sort Options

The `swimlaneSort` parameter accepts the following values:

| Value          | Behaviour                                                       |
| -------------- | --------------------------------------------------------------- |
| `alphabetical` | Swimlanes are ordered alphabetically by program name (default). |

<Info title="Verify in application">
  Additional `swimlaneSort` values beyond `alphabetical` may be available. Verify the full set of accepted values against the live Planningboard widget configuration panel.
</Info>

### Plans Mode Parameters (used with SAFe Programs Mode)

SAFe Programs Mode is typically combined with a SAFe plans mode. The `plansMode` parameter controls which plan type appears as columns.

| Name        | Type     | Default         | Description                                                                                                                                                                          |
| ----------- | -------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `plansMode` | `string` | `PROJECT_PLANS` | Set to `SAFE_PIS` (Program Increments in Program mode) or `SAFE_SOLUTION` (Program Increments in Solution mode) for SAFe portfolio-level planning alongside SAFe Programs swimlanes. |

See [SAFe Program Increments](/planningboard/reference/plans-modes/safe-pis) and [SAFe Solution Trains](/planningboard/reference/plans-modes/safe-solutions) for column configuration when using this swimlane mode.

### Capacity Parameters (interaction with SAFe Programs Mode)

| Name                | Type      | Default | Description                                                                                                                                                    |
| ------------------- | --------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `capacityLoad`      | `boolean` | `false` | Enables capacity tracking. When enabled, capacity bars appear per swimlane (per program) reflecting planned effort vs. program capacity.                       |
| `multiCapacityLoad` | `boolean` | `false` | Enables per-cell capacity tracking. Each plan–program cell shows its own capacity progress bar. Use when individual programs have different capacities per PI. |
| `capacityField`     | `string`  | —       | Custom field ID containing capacity values (e.g., story points). If not set, time-based tracking (`remainingEstimate` / `initialEstimate`) is used.            |
| `hoursPerDay`       | `number`  | `8`     | Working hours per day used in capacity calculations when time-based tracking is active.                                                                        |

<Warning title="Capacity whitespace sensitivity">
  Capacity configuration parameters are whitespace-sensitive. Ensure there are no leading or trailing spaces when entering field IDs or numeric values.
</Warning>

### General Swimlane Parameters

| Name       | Type     | Default   | Description                                                                                      |
| ---------- | -------- | --------- | ------------------------------------------------------------------------------------------------ |
| `query`    | `string` | `NOT *:*` | Lucene query to filter which work items are loaded onto the board.                               |
| `maxItems` | `number` | `1000`    | Maximum number of work items loaded.                                                             |
| `wiType`   | `string` | —         | Work item type filter (e.g., `feature`, `story`) to restrict displayed items to a specific type. |

***

## SAFe Program Field

The `safeProgramField` property defines which custom field on each work item carries the program assignment.

| Name               | Type     | Default       |
| ------------------ | -------- | ------------- |
| `safeProgramField` | `string` | `safeProgram` |

**Behaviour:**

* The field must be an enumeration field whose options correspond to the programs in your SAFe Solution.
* When a planner drags a card from one program swimlane to another, Planningboard writes the new program value back to this field on the work item.
* If the field does not exist on the work item type being displayed, items cannot be assigned to program swimlanes via drag-and-drop.

**Example — custom field ID:**

```properties theme={null}
safeProgramField=program_assignment
```

Use this override when your SAFe Solution uses a field with a different ID than the default `safeProgram`.

***

## Configuration Example

The following widget parameter configuration sets up a portfolio-level Planningboard with SAFe Programs as swimlanes and Program Increments as columns.

```properties theme={null}
# Swimlanes — SAFe Programs
assignmentMode=SAFE_PROGRAMS
safeProgramField=safeProgram
showEmptySwimlanes=false
swimlaneSort=alphabetical
collapsibleSwimlanes=true

# Plans (Columns) — SAFe Program Increments at Solution level
plansMode=SAFE_SOLUTION

# Work items
query=type:feature
maxItems=500

# Capacity
capacityLoad=true
capacityField=storyPoints
hoursPerDay=8
```

<Tip title="Page Parameters and Program Increment Parameter ID">
  When configuring SAFe Programs Mode with Program Increment columns, the **Program Increment Parameter ID** field must reference a Page Parameter that you create explicitly in the widget configuration. Configuration UI fields differ by `plansMode` selection — switching from **Project Plans** (`PROJECT_PLANS`) to **SAFe Program Increments in Solution** (`SAFE_SOLUTION`) changes which fields are visible in the widget panel. Create the Page Parameter first, then reference its ID in the PI increment field.
</Tip>

***

## Swimlane Discovery

Programs are not manually defined in the widget — they are sourced automatically from the Polarion SAFe Solution data at portfolio level.

<Frame>
  <img src="https://mintcdn.com/none-17b4493f/vfRg9jxXRntLqZFW/planningboard/diagrams/reference/assignment-modes/safe-programs-mode/diagram-2.svg?fit=max&auto=format&n=vfRg9jxXRntLqZFW&q=85&s=b07a412cd0a7b0ee171bcb3308fd8269" alt="Swimlane discovery flow: Polarion SAFe Solution data flows to the Planningboard backend, which reads programs from the solution train, renders one swimlane per discovered program, and places work items in the swimlane matching their safeProgramField value" width="380" height="360" data-path="planningboard/diagrams/reference/assignment-modes/safe-programs-mode/diagram-2.svg" />
</Frame>

**Implications:**

* Adding or removing a program in the SAFe Solution is reflected on the board after a page reload.
* Programs with no work items are hidden by default (`showEmptySwimlanes=false`). Set `showEmptySwimlanes=true` to always show all programs.
* The board does not allow creating new programs from the board UI — program management is done in the Polarion SAFe Solution configuration.

***

## Drag-and-Drop Behaviour

| Action                                                       | Result                                                                       |
| ------------------------------------------------------------ | ---------------------------------------------------------------------------- |
| Drag a card to a different program swimlane                  | Updates the `safeProgramField` value on the work item to the target program. |
| Drag a card to a different plan column                       | Updates the work item's plan assignment (start/end date logic applies).      |
| Drag a card to both a different program and a different plan | Updates both the program field and the plan assignment.                      |
| Drag in prioritize mode                                      | Drag-and-drop between swimlanes is blocked in prioritize mode.               |
| Drag in read-only mode                                       | Drag-and-drop is blocked entirely when the board is in read-only mode.       |

***

## Comparison with Related Assignment Modes

| Mode                                                     | Swimlane Unit                     | Typical Planning Level | Requires SAFe Solution |
| -------------------------------------------------------- | --------------------------------- | ---------------------- | ---------------------- |
| **Programs (SAFe)** (`SAFE_PROGRAMS`)                    | SAFe Program (ART / Value Stream) | Portfolio              | Yes                    |
| **Program / Solution Teams (SAFe)** (`SAFE_TEAM`)        | SAFe Team within current program  | Program                | Yes                    |
| **Agile Release Train Teams (SAFe)** (`SAFE_TRAIN_TEAM`) | Teams within a specific ART       | ART / Train            | Yes                    |
| **Users (Assignee)** (`ASSIGNEE`)                        | Individual user                   | Team / Sprint          | No                     |
| **Project** (`PROJECT`)                                  | Sub-project                       | Cross-project          | No                     |
| **Enumeration Field** (`ENUM`)                           | Custom enumeration field value    | Any                    | No                     |

For team-level SAFe planning within a single program, use [SAFe Team Mode](/planningboard/reference/assignment-modes/safe-team-mode). For planning across all teams of a specific Agile Release Train, use [SAFe Train Team Mode](/planningboard/reference/assignment-modes/safe-train-team-mode).

***

## Limitations

* **No multi-assignee capacity distribution:** Capacity load in SAFe Programs Mode reflects work item totals per program swimlane. Multi-assignee effort distribution (splitting capacity across multiple resources) is not supported — this is a known gap versus Nextedy GANTT.
* **Swimlane sort order coupled to item sort:** The sort order of swimlanes affects the sort order of items within those swimlanes. It is not possible to independently configure swimlane order and item order within swimlanes.
* **Parent Mode normalization not available:** Plan normalization (`planCellsMode`) is not supported when `assignmentMode` is set to **Programs (SAFe)** (`SAFE_PROGRAMS`).
* **SAFe Solution dependency:** If no SAFe Solution is configured in Polarion, the board will render no swimlanes in this mode. The mode silently produces an empty board rather than an error when the data source is missing.
* **Portfolio suffix configuration:** Portfolio-level program discovery may require additional portfolio suffix configuration. Contact Nextedy support for environment-specific setup guidance.

***

## Related Pages

* [Assignment Modes](/planningboard/reference/assignment-modes/index) — overview of all swimlane assignment types
* [SAFe Team Mode](/planningboard/reference/assignment-modes/safe-team-mode) — swimlanes by SAFe team within the current program
* [SAFe Train Team Mode](/planningboard/reference/assignment-modes/safe-train-team-mode) — swimlanes by teams within a specific ART
* [SAFe Parameters](/planningboard/reference/widget-parameters/safe-parameters) — full SAFe widget parameter reference
* [SAFe Program Increments](/planningboard/reference/plans-modes/safe-pis) — configuring PI columns
* [SAFe Solution Trains](/planningboard/reference/plans-modes/safe-solutions) — solution-level plan columns
* [Swimlanes Parameters](/planningboard/reference/widget-parameters/swimlanes-parameters) — all swimlane widget parameters
* [Capacity Parameters](/planningboard/reference/widget-parameters/capacity-parameters) — capacity bar configuration

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

  * Swimlane Assignment Types

  **Support Tickets**

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

  **Source Code**

  * `PlanningBoardWidgetRenderer.java`
  * `PlansMode.java`
  * `PlanningBoardDataService.java`
  * `AssignmentMode.java`
  * `PlanningBoardWidgetDependenciesProcessor.java`
</Accordion>
