Skip to main content

Methodology

Make vs Buy Comparison methodology

Compare the incremental cost and capacity of making units internally with buying them, while keeping committed sunk cost visible but outside the decision.

Educational only: Business decision support, not accounting, tax or legal advice.

Privacy: Calculations run locally; Margin101 does not receive your commercial inputs.

Update policy: Reviewed when formulas or official dependencies change.

Scope: Market-neutral small-business planning using your own assumptions.

1. Formulas and units

Make incremental cost
leftIncrementalCost = make incremental fixed cost + required units ร— make incremental cost per unit, if capacity is sufficient

Where

units
Required units (units/period)Source: User decision
leftIncrementalFixedCost
Make incremental fixed cost (currency units/decision period, ex tax)Source: Business record
leftIncrementalVariableCostPerUnit
Make incremental cost per unit (currency units/unit, ex tax)Source: Business record
leftCapacityUnits
Make capacity (units/period)Source: Business record
leftIncrementalCost
Make incremental cost (currency units, ex tax)Source: Calculated output
Buy incremental cost
rightIncrementalCost = buy incremental fixed cost + required units ร— buy incremental cost per unit, if capacity is sufficient

Where

units
Required units (units/period)Source: User decision
rightIncrementalFixedCost
Buy incremental fixed cost (currency units/decision period, ex tax)Source: Business record
rightIncrementalVariableCostPerUnit
Buy incremental cost per unit (currency units/unit, ex tax)Source: Business record
rightCapacityUnits
Buy capacity (units/period)Source: Business record
rightIncrementalCost
Buy incremental cost (currency units, ex tax)Source: Calculated output
Cost crossover units
crossoverUnits = ceiling((right fixed cost โˆ’ left fixed cost) / (left unit cost โˆ’ right unit cost)), when reachable within both capacities

Where

crossoverUnits
Cost crossover units (units)Source: Calculated output
Make capacity gap
leftCapacityGap = max(0, required units โˆ’ make capacity)

Where

units
Required units (units/period)Source: User decision
leftCapacityUnits
Make capacity (units/period)Source: Business record
leftCapacityGap
Make capacity gap (units)Source: Calculated output
Buy capacity gap
rightCapacityGap = max(0, required units โˆ’ buy capacity)

Where

units
Required units (units/period)Source: User decision
rightCapacityUnits
Buy capacity (units/period)Source: Business record
rightCapacityGap
Buy capacity gap (units)Source: Calculated output
Excluded sunk cost
excludedSunkCost = current sunk cost disclosed but excluded from both incremental options

Where

currentSunkCost
Current sunk cost (currency units/decision period, ex tax)Source: Business record
excludedSunkCost
Excluded sunk cost (currency units, ex tax)Source: Calculated output

Money inputs and outputs use the currency selected in the scenario without changing the canonical methodology. Rates, margins, utilisation and buffers are entered as percentages and converted to decimal values for calculation.

2. Worked example

Input assumptions

The labelled rows below are formatted directly from the exact shared engine using the visible default inputs.

Required units
120 units/period
Current sunk cost
9,000 currency units/decision period, ex tax
Make incremental fixed cost
1,200 currency units/decision period, ex tax
Make incremental cost per unit
4 currency units/unit, ex tax
Make capacity
150 units/period
Buy incremental fixed cost
100 currency units/decision period, ex tax
Buy incremental cost per unit
16 currency units/unit, ex tax
Buy capacity
1,000 units/period

Calculation and outputs

  1. Make incremental cost

    leftIncrementalCost = make incremental fixed cost + required units ร— make incremental cost per unit, if capacity is sufficient
    Required units
    120 units/period
    Current sunk cost
    9,000 currency units/decision period, ex tax
    Make incremental fixed cost
    1,200 currency units/decision period, ex tax
    Make incremental cost per unit
    4 currency units/unit, ex tax
    Make capacity
    150 units/period
    Buy incremental fixed cost
    100 currency units/decision period, ex tax
    Buy incremental cost per unit
    16 currency units/unit, ex tax
    Buy capacity
    1,000 units/period
    Buy incremental cost
    2,020 money
    Cost crossover units
    92 units
    Make capacity gap
    0 units
    Buy capacity gap
    0 units
    Excluded sunk cost
    9,000 money

    Engine result: 1,680 money

  2. Buy incremental cost

    rightIncrementalCost = buy incremental fixed cost + required units ร— buy incremental cost per unit, if capacity is sufficient
    Required units
    120 units/period
    Current sunk cost
    9,000 currency units/decision period, ex tax
    Make incremental fixed cost
    1,200 currency units/decision period, ex tax
    Make incremental cost per unit
    4 currency units/unit, ex tax
    Make capacity
    150 units/period
    Buy incremental fixed cost
    100 currency units/decision period, ex tax
    Buy incremental cost per unit
    16 currency units/unit, ex tax
    Buy capacity
    1,000 units/period
    Make incremental cost
    1,680 money
    Cost crossover units
    92 units
    Make capacity gap
    0 units
    Buy capacity gap
    0 units
    Excluded sunk cost
    9,000 money

    Engine result: 2,020 money

  3. Cost crossover units

    crossoverUnits = ceiling((right fixed cost โˆ’ left fixed cost) / (left unit cost โˆ’ right unit cost)), when reachable within both capacities
    Current sunk cost
    9,000 currency units/decision period, ex tax
    Make incremental fixed cost
    1,200 currency units/decision period, ex tax
    Make incremental cost per unit
    4 currency units/unit, ex tax
    Make capacity
    150 units/period
    Buy incremental fixed cost
    100 currency units/decision period, ex tax
    Buy incremental cost per unit
    16 currency units/unit, ex tax
    Buy capacity
    1,000 units/period
    Make incremental cost
    1,680 money
    Buy incremental cost
    2,020 money
    Make capacity gap
    0 units
    Buy capacity gap
    0 units
    Excluded sunk cost
    9,000 money

    Engine result: 92 units

  4. Make capacity gap

    leftCapacityGap = max(0, required units โˆ’ make capacity)
    Required units
    120 units/period
    Make incremental fixed cost
    1,200 currency units/decision period, ex tax
    Make incremental cost per unit
    4 currency units/unit, ex tax
    Make capacity
    150 units/period
    Buy capacity
    1,000 units/period
    Make incremental cost
    1,680 money
    Buy capacity gap
    0 units

    Engine result: 0 units

  5. Buy capacity gap

    rightCapacityGap = max(0, required units โˆ’ buy capacity)
    Required units
    120 units/period
    Make capacity
    150 units/period
    Buy incremental fixed cost
    100 currency units/decision period, ex tax
    Buy incremental cost per unit
    16 currency units/unit, ex tax
    Buy capacity
    1,000 units/period
    Buy incremental cost
    2,020 money
    Make capacity gap
    0 units

    Engine result: 0 units

  6. Excluded sunk cost

    excludedSunkCost = current sunk cost disclosed but excluded from both incremental options
    Current sunk cost
    9,000 currency units/decision period, ex tax
    Make incremental fixed cost
    1,200 currency units/decision period, ex tax
    Make incremental cost per unit
    4 currency units/unit, ex tax
    Buy incremental fixed cost
    100 currency units/decision period, ex tax
    Buy incremental cost per unit
    16 currency units/unit, ex tax
    Make incremental cost
    1,680 money
    Buy incremental cost
    2,020 money
    Cost crossover units
    92 units

    Engine result: 9,000 money

Example

The labelled rows below are formatted directly from the exact shared engine using the visible default inputs.

Make incremental cost
1,680.00
Buy incremental cost
2,020.00
Lower-cost feasible option
Make
Cost crossover units
92 units
Make capacity gap
0 units
Buy capacity gap
0 units
Excluded sunk cost
9,000.00

The lower-cost feasible option is Make.

Interpretation

Use incremental option costs and capacity effects; sunk internal costs should not bias the comparison.

3. Validation and boundary checks

  • All inputs must be finite and remain inside the visible non-negative validation boundaries.
  • Capacity and demand fields that represent physical units reject fractional values where the engine requires whole units.
  • Rates remain inside the closed range from 0% to 100%.
  • Unreachable contribution, crossover or payback thresholds return an explicit unavailable state rather than Infinity.
  • Option comparisons reject an infeasible option when its entered capacity is below the required workload.
Required units minimum
units โ‰ฅ 0 units/period โ€” A lower value is rejected before calculation.
Required units maximum
units โ‰ค 100,000,000 units/period โ€” A higher value is rejected before calculation.
Current sunk cost minimum
currentSunkCost โ‰ฅ 0 currency units/decision period, ex tax โ€” A lower value is rejected before calculation.
Current sunk cost maximum
currentSunkCost โ‰ค 10,000,000 currency units/decision period, ex tax โ€” A higher value is rejected before calculation.
Make incremental fixed cost minimum
leftIncrementalFixedCost โ‰ฅ 0 currency units/decision period, ex tax โ€” A lower value is rejected before calculation.
Make incremental fixed cost maximum
leftIncrementalFixedCost โ‰ค 10,000,000 currency units/decision period, ex tax โ€” A higher value is rejected before calculation.
Make incremental cost per unit minimum
leftIncrementalVariableCostPerUnit โ‰ฅ 0 currency units/unit, ex tax โ€” A lower value is rejected before calculation.
Make incremental cost per unit maximum
leftIncrementalVariableCostPerUnit โ‰ค 10,000,000 currency units/unit, ex tax โ€” A higher value is rejected before calculation.
Make capacity minimum
leftCapacityUnits โ‰ฅ 0 units/period โ€” A lower value is rejected before calculation.
Make capacity maximum
leftCapacityUnits โ‰ค 100,000,000 units/period โ€” A higher value is rejected before calculation.
Buy incremental fixed cost minimum
rightIncrementalFixedCost โ‰ฅ 0 currency units/decision period, ex tax โ€” A lower value is rejected before calculation.
Buy incremental fixed cost maximum
rightIncrementalFixedCost โ‰ค 10,000,000 currency units/decision period, ex tax โ€” A higher value is rejected before calculation.
Buy incremental cost per unit minimum
rightIncrementalVariableCostPerUnit โ‰ฅ 0 currency units/unit, ex tax โ€” A lower value is rejected before calculation.
Buy incremental cost per unit maximum
rightIncrementalVariableCostPerUnit โ‰ค 10,000,000 currency units/unit, ex tax โ€” A higher value is rejected before calculation.
Buy capacity minimum
rightCapacityUnits โ‰ฅ 0 units/period โ€” A lower value is rejected before calculation.
Buy capacity maximum
rightCapacityUnits โ‰ค 100,000,000 units/period โ€” A higher value is rejected before calculation.

4. Assumptions and source classification

  • All operating volumes, rates, workload, capacity, time, cost and contribution values are supplied by the user.
  • Money inputs use one consistent ex-tax basis and every record refers to the same operating period.
  • Demand realisation, recovery, hours saved and expected unit rates are scenarios, not forecasts or benchmarks.
  • Committed sunk cost is disclosed but excluded from make, buy, outsource and hire incremental economics.
  • The shared engine retains raw precision and display formatting never feeds back into calculation.

This comparison calculator has no current policy-data dependency. Its commercial assumptions are user supplied. Registered family-level regression suites exercise the shared business-logic engine and worked-result reconciliation.

5. Limitations

  • Results depend on complete and comparable incremental cost, capacity and operating records.
  • The model does not forecast demand, service quality, employee performance, supplier reliability or disruption duration.
  • A positive result or short payback does not establish implementation feasibility or guarantee a commercial outcome.
  • The planner does not replace operational, accounting, tax, legal or financial advice.

This is educational decision support, not tax, accounting, legal or financial advice. Check the treatment of your actual transactions under the rules that apply to your business and seek qualified advice where appropriate.

6. Update and evidence policy

Registered family-level suites test formula invariants and example reconciliation; the release ledger records that coverage without claiming a separate oracle for every line of public copy. There is no official threshold or benchmark to refresh for this comparison calculator. Commercial inputs remain user-supplied because they vary by business and contract.

Change history

  1. : Initial public release of the planner and methodology after pre-launch calculation, content, source and interaction review.

Guides to interpret the decision and its assumptions.

  • Make vs Buy a Component

    Compare avoidable internal cost with supplier cost, capacity use, timing and risk on one component requirement.

    Read guide

Return to the comparison calculator