# Build a Staffing Cost Model

This guide explains how to build a detailed staffing cost model in Model Reef using Staff and Opex variables, headcount drivers, and timing rules. The goal is to connect headcount and pay assumptions to P\&L, Cashflow, and valuation through the existing engine.

{% hint style="info" %}
Before you start

You should have:

* A basic model with revenue and high level costs.
* At least a rough idea of your teams, roles and pay levels.
* An understanding of how Staff variables behave in Model Reef.

If not, start with:

* **Build a Full Financial Model from Scratch**
* **Drivers and Variables Overview**
  {% endhint %}

What you will build

By the end you will have:

* Role based or team based Staff variables.
* Drivers for headcount, salary levels, superannuation and payroll tax.
* A staffing cost forecast that flows into:
  * P\&L Operating Expenses.
  * Cashflow Payments to Suppliers.
  * Cash Waterfall Staff lines.
* A structure you can expand as the organisation grows.

{% stepper %}
{% step %}

### Decide your staffing breakdown

First decide how granular you want to be. Common options:

* By team:
  * Sales.
  * Marketing.
  * Engineering.
  * Operations.
  * Administration and finance.
* By role level:
  * Junior, mid, senior.
  * Individual contributor, manager, executive.

Choose a level of detail that is manageable but still useful for planning and scenario work.
{% endstep %}

{% step %}

### Create headcount drivers

Headcount is often more flexible if it is modelled as a driver instead of hard coded into each Staff variable.

* In the Data Library, create **Operational drivers** for headcount, for example:
  * `HC - Sales Team`.
  * `HC - Engineering`.

For each driver:

* Set frequency consistent with model periodicity.
* Define starting headcount in the first forecast period.
* Add changes over time:
  * Hires or reductions.
  * Phased ramp up for new teams.

These drivers represent the number of people in each group over time.
{% endstep %}

{% step %}

### Create salary and oncost drivers

Next, create drivers for cost per head and additional oncosts.

* In the Data Library, add **Economic drivers** such as:
  * `Salary per FTE - Sales`.
  * `Salary per FTE - Engineering`.
  * `Superannuation Rate`.
  * `Payroll Tax Rate`.

For salary drivers:

* Set initial salary levels by team or role.
* Include annual escalation where needed using a growth rule.

For oncost drivers:

* Set percentage rates for superannuation and payroll tax.
* Keep them separate so you can change them easily later.

These drivers will be used in Staff variable formulas.
{% endstep %}

{% step %}

### Create Staff variables per team or role

Now construct Staff variables that link headcount and salary drivers.

* For each team or role, create a **Staff variable**, for example:
  * `Staff Cost - Sales Team`.
  * `Staff Cost - Engineering`.

For each Staff variable, configure the formula to approximate:

```
Staff Cost = Headcount × Salary per FTE × (1 plus Super rate plus Payroll tax rate)
```

Using the headcount and salary drivers created earlier.

Set timing:

* Start date when the team or role begins.
* If you want to model pay cycles more precisely, use weekly or monthly frequency and set payment delays consistent with payroll practice.

These Staff variables will post to Operating Expenses in the P\&L and to Payments to Suppliers in Cashflow.
{% endstep %}

{% step %}

### Add additional staff related costs if needed

Some staff related items are not purely headcount driven, for example:

* Bonus pools.
* Commissions.
* Recruitment and training costs.

You can model these as additional **Staff** or **Opex variables**:

* For bonuses and commissions:
  * Use formulas tied to revenue or profit.
* For recruitment and training:
  * Use one off or scheduled Opex variables.

Ensure naming clearly separates ongoing wages from episodic costs.
{% endstep %}

{% step %}

### Review staffing costs in P\&L and Cash Waterfall

* Open **P\&L** and check:
  * Staff costs appear in Operating Expenses.
  * Totals by team or role match expectations.
* Open the **Cash Waterfall** and check:
  * Staff cash outflows appear within Payments to Suppliers via the Staff category.
  * Timing reflects any payment delays.

If cash is too tight in certain periods, adjust hiring timing or pay structures accordingly.
{% endstep %}

{% step %}

### Use scenarios or model copies to test staffing plans

Because scenarios are separate models, create alternative staffing plans by duplicating the model and editing drivers:

* `Model - Staffing - Base Plan`.
* `Model - Staffing - Lean Plan`.
* `Model - Staffing - Aggressive Hiring`.

In each, change headcount and salary drivers and compare:

* EBITDA.
* Cash balances.
* Valuation metrics.

This gives a clear view of how staffing choices affect the financial trajectory.
{% endstep %}
{% endstepper %}

## Check your work

{% hint style="success" %}

* Headcount drivers behave as expected over the forecast horizon.
* Staff variables correctly multiply headcount, salary and oncost drivers.
* P\&L shows a realistic staff cost profile.
* Cash Waterfall reflects the correct timing of staff payments.
  {% endhint %}

## Troubleshooting

<details>

<summary>Staff costs spike unexpectedly</summary>

Check for sudden jumps in headcount drivers or salary escalation rates.

</details>

<details>

<summary>Cash dips strongly around payroll dates</summary>

Consider smoothing payment timing or modelling staggered pay cycles if you want a more even pattern.

</details>

<details>

<summary>Hard to see which team drives costs</summary>

Add a custom report or dashboard that breaks staff costs down by team or role and monitors their share of total opex.

</details>

## Related guides

* [Unit Economics for Fintech Products](/use-cases/financial-services-lending-and-fintech/unit-economics-for-fintech-products.md)
* [Unit Detection](/help/importing-and-data-inputs/unit-detection.md)
* [Supported Data Types](/help/importing-from-google-finance-and-yahoo-apis/supported-data-types.md)
* [Timing Preview](/syntax/timing-syntax/timing-preview.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.modelreef.io/how-tos/operations-and-unit-economics/build-a-staffing-cost-model.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
