Methodology
Make vs Buy Comparison methodology
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
leftIncrementalCost = make incremental fixed cost + required units ร make incremental cost per unit, if capacity is sufficientWhere
- 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
rightIncrementalCost = buy incremental fixed cost + required units ร buy incremental cost per unit, if capacity is sufficientWhere
- 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
crossoverUnits = ceiling((right fixed cost โ left fixed cost) / (left unit cost โ right unit cost)), when reachable within both capacitiesWhere
- crossoverUnits
- Cost crossover units (units)Source: Calculated output
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
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
excludedSunkCost = current sunk cost disclosed but excluded from both incremental optionsWhere
- 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
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
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
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
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
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
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
- : Initial public release of the planner and methodology after pre-launch calculation, content, source and interaction review.
Related reading
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