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

# Resource Proficiency

> Adjust job duration based on resource skill levels and experience

Resource proficiency allows you to model how efficiently different resources can complete specific jobs. A senior technician might complete a complex repair 20% faster than a junior, while a specialist might be 30% slower at tasks outside their expertise. This directly affects the effective job duration and scheduling.

## When to Use Proficiency

Proficiency is ideal when you want to:

* Model skill levels that affect completion time (senior vs junior technicians)
* Account for training and learning curves for new employees
* Handle specialization trade-offs (fast at core tasks, slower at peripheral ones)
* Get more accurate completion time predictions
* Optimize schedules based on actual resource efficiency

## How It Works

Each job can have a `proficiency` list that defines how the job duration changes when assigned to specific resources:

* **durationModifier \< 1.0**: Resource completes the job faster (e.g., 0.8 = 20% faster)
* **durationModifier = 1.0**: Standard duration (default for unlisted resources)
* **durationModifier > 1.0**: Resource completes the job slower (e.g., 1.5 = 50% slower)

The effective job duration is calculated as:

```
effective_duration = base_duration * durationModifier
```

## Basic Example

In this example, a complex repair job has different completion times depending on which technician is assigned:

```json request theme={null}
{
  "resources": [
    {
      "name": "senior-tech",
      "start": {"latitude": 51.05, "longitude": 3.72},
      "shifts": [{
        "from": "2024-01-15T08:00:00Z",
        "to": "2024-01-15T17:00:00Z"
      }]
    },
    {
      "name": "junior-tech",
      "start": {"latitude": 51.05, "longitude": 3.72},
      "shifts": [{
        "from": "2024-01-15T08:00:00Z",
        "to": "2024-01-15T17:00:00Z"
      }]
    }
  ],
  "jobs": [
    {
      "name": "complex-repair",
      "duration": 7200,
      "location": {"latitude": 51.06, "longitude": 3.73},
      "proficiency": [
        {
          "resource": "senior-tech",
          "durationModifier": 0.75
        },
        {
          "resource": "junior-tech",
          "durationModifier": 1.5
        }
      ]
    }
  ]
}
```

In this example:

* The base duration is 7200 seconds (2 hours)
* If assigned to `senior-tech`: 7200 \* 0.75 = 5400 seconds (1.5 hours)
* If assigned to `junior-tech`: 7200 \* 1.5 = 10800 seconds (3 hours)

<Info>
  Resources not listed in the proficiency array use the default durationModifier of 1.0 (no modification to duration).
</Info>

## Use Cases

### Skill-Based Efficiency

Model how expertise affects job completion time:

```json theme={null}
{
  "jobs": [
    {
      "name": "electrical-panel-installation",
      "duration": 10800,
      "tags": [{"name": "electrical", "hard": true}],
      "proficiency": [
        {"resource": "master-electrician", "durationModifier": 0.7},
        {"resource": "journeyman", "durationModifier": 1.0},
        {"resource": "apprentice", "durationModifier": 1.3}
      ]
    }
  ]
}
```

### Training and Learning Curve

Account for experience levels as employees learn:

```json theme={null}
{
  "jobs": [
    {
      "name": "equipment-setup",
      "duration": 3600,
      "proficiency": [
        {"resource": "experienced-tech", "durationModifier": 0.8},
        {"resource": "new-hire-week-1", "durationModifier": 2.0},
        {"resource": "new-hire-week-4", "durationModifier": 1.3}
      ]
    }
  ]
}
```

### Specialization Trade-offs

Model specialists who are fast at certain tasks but slower at others:

```json theme={null}
{
  "jobs": [
    {
      "name": "plumbing-repair",
      "duration": 5400,
      "proficiency": [
        {"resource": "plumber", "durationModifier": 0.8},
        {"resource": "generalist", "durationModifier": 1.2}
      ]
    },
    {
      "name": "electrical-work",
      "duration": 5400,
      "proficiency": [
        {"resource": "plumber", "durationModifier": 1.4},
        {"resource": "generalist", "durationModifier": 1.0}
      ]
    }
  ]
}
```

## Combining with Other Features

### With Rankings

Use proficiency for efficiency and rankings for preference. A resource might be fast but not preferred:

```json theme={null}
{
  "name": "specialized-task",
  "duration": 7200,
  "proficiency": [
    {"resource": "specialist", "durationModifier": 0.6}
  ],
  "rankings": [
    {"name": "specialist", "ranking": 1},
    {"name": "generalist", "ranking": 50}
  ]
}
```

### With Tags (Hard Constraints)

Ensure only qualified resources can do the job, then optimize by proficiency:

```json theme={null}
{
  "name": "certified-work",
  "duration": 5400,
  "tags": [{"name": "certification-required", "hard": true}],
  "proficiency": [
    {"resource": "senior-certified", "durationModifier": 0.8},
    {"resource": "junior-certified", "durationModifier": 1.1}
  ]
}
```

### With Time Windows

Proficiency affects whether jobs fit within time constraints. A job that doesn't fit in a time window with one resource might fit when assigned to a faster resource:

```json theme={null}
{
  "name": "time-sensitive-job",
  "duration": 3600,
  "windows": [{
    "from": "2024-01-15T14:00:00Z",
    "to": "2024-01-15T15:30:00Z"
  }],
  "proficiency": [
    {"resource": "fast-worker", "durationModifier": 0.8}
  ]
}
```

<Tip>
  A 1-hour job with a 0.8 modifier becomes 48 minutes, potentially fitting into a window that would be too tight for standard duration.
</Tip>

## Best Practices

1. **Base duration on average**: Set the base duration as the average completion time, then adjust with proficiency modifiers above and below 1.0.

2. **Only specify deviations**: You only need to list resources whose proficiency differs from 1.0. Resources not in the list default to standard duration.

3. **Combine with rankings**: Use proficiency for duration accuracy and rankings to express preference. A fast resource isn't always the preferred choice.

4. **Validate modifiers**: Ensure modifiers are realistic. Values below 0.5 or above 2.0 may indicate the base duration needs adjustment.

5. **Consider scheduling impact**: Remember that proficiency affects departure times and all downstream scheduling. A 50% faster job creates 50% more slack time.

## Technical Notes

* The modifier is applied to the base `duration` before other adjustments (like `durationSquash`)
* The effective duration affects departure time calculations and downstream scheduling
* Resources must be referenced by their exact name as defined in the resources list

## Related Features

<CardGroup cols={2}>
  <Card title="Resource Ranking" icon="ranking-star" href="/guides/vrp/features/ranking">
    Express resource preferences without affecting duration
  </Card>

  <Card title="Tags & Skills" icon="tags" href="/guides/vrp/features/tag-ranking">
    Hard and soft skill constraints
  </Card>

  <Card title="Time Windows" icon="clock" href="/guides/vrp/features/window">
    Schedule jobs within specific time periods
  </Card>

  <Card title="Job Complexity" icon="chart-line" href="/guides/vrp/features/job-complexity">
    Balance workload by difficulty
  </Card>
</CardGroup>
