# Pool Use Cases

The following examples show how to combine pools and pool rules to solve two common problems.

## Use case 1: Reserve slots for critical workflows

Audience and journey workflows usually run before activations and must not be blocked by ad-hoc workflows. Create a dedicated pool for these critical workflow types so they always have slots available.

**Pool:**


```json
{
  "name": "critical_workflows",
  "concurrencyLimit": 100
}
```

Assume the API returns `id: "1"` for this pool.

**Rule:**


```json
{
  "priority": 10,
  "poolId": "1",
  "conditions": [
    {"type": "workflow_type", "values": ["audience", "customer_journey"]}
  ]
}
```

With this configuration, every audience workflow and every journey workflow is assigned to the critical_workflows pool, regardless of invocation type. The 100 slots in this pool are never consumed by other workflows.

## Use case 2: Isolate a misbehaving workflow

Suppose a specific workflow is temporarily running much longer than expected because of an external error and is filling up the default pool. You do not want to kill it, because it will finish normally once the upstream error is fixed. Move it into a small isolation pool so it cannot block other work.

**Pool:**


```json
{
  "name": "penalty_box",
  "concurrencyLimit": 10
}
```

Assume the API returns `id: "2"` for this pool.

**Rule:**


```json
{
  "priority": 10,
  "poolId": "2",
  "conditions": [
    {"type": "workflow_name", "operator": "starts_with", "values": ["external_"]}
  ]
}
```

After this rule is in place, every newly created attempt of a workflow whose name starts with `external_` is assigned to the penalty_box pool and is limited to 10 concurrent attempts. Other workflows are unaffected.

Already-running attempts are not affected
A pool assignment is fixed when the attempt is created. Attempts that are already running keep their original pool even after you add a new rule.

Pre-create your penalty pool
To create a pool, the default pool must have at least as many free slots as the new pool's concurrency limit. Create an isolation pool such as penalty_box ahead of time, while the default pool still has room, so you can move misbehaving workflows into it on short notice.

## Related topics

- [Managing pools](/products/customer-data-platform/data-workbench/workflows/pool/managing-pools)
- [Managing pool rules](/products/customer-data-platform/data-workbench/workflows/pool/managing-pool-rules)
- [Attempt queueing](/products/customer-data-platform/data-workbench/workflows/pool/attempt-queueing)