> For the complete documentation index, see [llms.txt](https://help.modelreef.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.modelreef.io/use-cases/not-for-profit-and-education/program-cost-modelling.md).

# Program Cost Modelling

This use case explains how to model program level costs for not-for-profit and education organisations in Model Reef.

You will:

* Represent programs, projects or services as separate branches.
* Attach staffing, direct costs and allocated overheads to each program.
* Link program costs to grant income, donations and earned revenue.
* Produce P\&L and cash views per program and in total.

The goal is to understand the true cost of delivering each program and to support funding, pricing and prioritisation decisions.

## When to use this pattern

Use this pattern when:

* You run multiple programs, services or projects with distinct objectives.
* You want to know which programs are fully funded, partially funded or cross subsidised.
* You need to justify funding requests or report program economics to stakeholders.
* You want program economics stitched into group level reporting.

It is commonly combined with:

* Grant Funding Models
* Donor or Revenue Stream Forecasting
* Multi Program Consolidated Reporting

## Architecture overview

Program cost modelling uses:

1. Branch structure
   * One branch per program or project.
   * Optional regional or thematic parent branches.
   * Central overhead branch for shared costs.
2. Staff and direct cost variables
   * Program staff, contractors and volunteers.
   * Direct costs such as materials, venues, travel and equipment.
3. Overhead allocation structures
   * Central administration and support functions.
   * Allocation drivers by FTE, revenue, headcount or other metrics.
4. Financial outputs
   * Program level P\&L and cash.
   * Contribution after direct and allocated overheads.
   * Coverage ratios relative to funding.

{% stepper %}
{% step %}

### Step 1: Create branches for each program

In the branch tree, define a structure that reflects how you run and monitor your work, for example:

* Organisation
  * Program - Youth Services
  * Program - Adult Education
  * Program - Research and Evaluation
  * Central Overheads

If you manage programs by region or thematic area, insert intermediate branches such as `Region - North` or `Theme - Health`, then add program branches underneath.

Each program branch will contain its own revenue and cost variables.
{% endstep %}

{% step %}

### Step 2: Add program staff cost structures

Within each program branch, create Staff variables, for example:

* Staff - Program Manager - Youth Services.
* Staff - Case Workers - Youth Services.
* Staff - Tutors - Adult Education.
* Staff - Researchers - Research Program.

Define drivers for:

* FTE per role.
* Average salary per FTE.
* Oncost percentages for super, pension, payroll tax and other benefits.

Formulas typically look like:

* Staff Cost - Case Workers - Youth Services\
  \= FTE Case Workers × Salary per FTE × (1 plus Oncost Percentage).

Use timing settings to reflect pay cycles and delays, so that P\&L, Balance Sheet and Cashflow outputs align with how staff are actually paid.
{% endstep %}

{% step %}

### Step 3: Add direct program costs

Still within each program branch, create Opex variables for direct costs, for example:

* Opex - Venue Hire - Youth Workshops.
* Opex - Materials and Supplies - Adult Education.
* Opex - Travel and Outreach - Youth Services.
* Opex - Participant Support Costs - Research Program.

Link these to drivers such as:

* Cost per participant or per group.
* Cost per workshop or per term.
* Cost per kilometre of travel.
* Fixed baseline cost per period with growth.

This ensures direct costs scale appropriately with program activity in different scenarios.
{% endstep %}

{% step %}

### Step 4: Model central overheads and allocation choices

In a `Central Overheads` branch, represent organisation wide costs, for example:

* Staff - Executive and Leadership Team.
* Staff - Finance, HR and IT.
* Opex - Office Rent and Utilities.
* Opex - Central Systems, Subscriptions and Insurance.

Decide whether to:

* Leave these costs unallocated and show program contribution before central overheads, or
* Allocate some or all overheads to programs for a fully loaded view.

If you allocate overheads, define drivers such as:

* Share of FTE per program.
* Share of program direct costs.
* Share of revenue or funding per program.

Implement allocation through:

* Additional Opex variables in program branches that reference central cost pools and allocation drivers, or
* Custom reports that apply allocation formulas when presenting results.

Make allocation logic transparent and easy to adjust.
{% endstep %}

{% step %}

### Step 5: Link program costs to funding and revenue

With program costs in place, connect them to funding streams by:

* Using Grant Funding Models to represent grants in each program branch.
* Using Donor or Revenue Stream Forecasting to represent donations, membership fees or earned income by program.
* Keeping central or general funds in a separate branch if they are not program specific.

Create dashboards and reports that show for each program:

* Total funding from grants, donations and earned revenue.
* Total staff and direct costs.
* Program contribution before and after overhead allocations.
* Funding coverage ratios and any funding gaps.

This provides a clear picture of which programs are constrained, which are well funded and where flexible funding is most needed.
{% endstep %}

{% step %}

### Step 6: Use scenarios for program changes and prioritisation

Clone the base model into scenario models to assess options such as:

* Scaling successful programs up or extending them to new regions.
* Restructuring or winding down underperforming programs.
* Adjusting delivery models (for example more group sessions, hybrid or digital delivery).
* Responding to changes in grant funding or donor income.

In each scenario, adjust:

* Program staff and direct cost drivers.
* Funding levels and mix per program.
* Overhead allocation rules and central cost structures.

Compare scenarios using:

* Program and group level surplus or deficit.
* Cash requirements and reserve usage.
* Ability to protect core programs under stress cases.
* Clarity for boards and funders about trade offs.
  {% endstep %}
  {% endstepper %}

## Check your work

* Program list and structure match how work is managed and reported internally.
* Staff and cost assumptions reconcile to recent budgets or actuals when calibrated.
* Overhead allocations are understandable and not overly complex.
* The model can be maintained as programs start, scale, pause or end.

## Troubleshooting

<details>

<summary>Some programs appear more or less expensive than expected</summary>

Revisit staff and direct cost assumptions and check that all relevant costs are captured within the correct program branch.

</details>

<details>

<summary>Central overheads dominate program level results</summary>

Show both pre and post allocation views and clearly explain allocation drivers. Consider whether some central costs should be treated as strategic rather than allocated.

</details>

<details>

<summary>The model is difficult to keep updated when programs change</summary>

Use consistent naming and structure, and consider a template pattern for programs so that adding or removing a program is straightforward.

</details>

## Related guides

* [Build a Variance Analysis Model](/how-tos/dashboards-and-reporting/build-a-variance-analysis-model.md)
* [Build an Acquisition Case vs Base Case](/how-tos/investment-and-transactions/build-an-acquisition-case-vs-base-case.md)
* [Excel Import](/help/importing-and-data-inputs/excel-import.md)
* [Start & End Dates](/syntax/timing-syntax/start-and-end-dates.md)
