# Delivery models: dispatch, self-perform, or both

> A field business either dispatches work to subcontractors, does the work itself, or both. Biloh serves all three through a single tenant setting — subcontract, self_perform, or hybrid — that changes emphasis via progressive disclosure. Full triage control is always present; only the primary action shifts.

URL: https://biloh.com.au/docs/concepts/delivery-models
Category: Explanation | Audience: operator | Updated: 2026-07-07

A field-service business delivers work in one of three ways: it **dispatches** every job to subcontractors and earns the margin on the spread, it **self-performs** with its own crew, or it does **both**. Biloh serves all three postures through one tenant setting — `scheduling.delivery_model` = `subcontract` | `self_perform` | `hybrid` — rather than shipping two different products. The setting drives progressive disclosure, so full control is never removed; only the emphasis changes.

## Why one setting instead of two products?

The two postures share almost everything — clients, sites, recurring cadences, invoicing, the whole event spine. What differs is which action an operator reaches for first. A dispatch-first operator wants Assign and Dispatch to lead; an owner-operator wants "I'm doing this one" and Complete to lead. Splitting that into separate products would fork the codebase over a difference of emphasis. A single configuration value captures it, and a second tenant flips postures by changing that value alone — no code path of its own.

## How each posture behaves

- **subcontract** (default) — primary actions are Assign and Dispatch. Operator lifecycle controls (hold, cancel, complete-on-behalf) live behind the [Job Command Sheet](/docs/how-to/dispatching-and-triage), present but not shouting.
- **self_perform** — adds a one-tap **Do it myself** (assign-to-self plus dispatch in a single move) and leads the run sheet with **Complete**.
- **hybrid** — both, for the operator who self-performs but subs out the overflow.

## How does self-delivery keep the books straight?

Your own crew is modelled as a real **internal contractor** row, not a special case. That means payables, contractor earnings, and completion evidence all flow through the same machinery whether a job is done in-house or handed to a subcontractor. Two tenant settings tune the money side: whether internal-crew jobs bypass the subcontractor compliance gate (they do by default — it's your own labour), and whether completing an internal job books a payable (off by default, because own labour is not a sub cost).

## What never changes

Across every posture the non-negotiables hold: jobs are [scheduled by the day](/docs/concepts/scheduling-jobs-by-the-day), completed work is never mixed with active work, and the full triage sheet is always available. The delivery model is emphasis, not amputation.

## Related

- [Dispatching and triaging jobs](/docs/how-to/dispatching-and-triage)
- [Scheduling jobs by the day, not the minute](/docs/concepts/scheduling-jobs-by-the-day)
