Methodology
Capacity Constraint Profit Planner 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
servedUnitsBeforeExpansion = min(demand units, current capacity units)Where
- demandUnits
- Demand units (units/period)Source: Business record
- currentCapacityUnits
- Current capacity units (units/period)Source: Business record
- capacityExpansionUnits
- Capacity expansion units (units/period)Source: User decision
- servedUnitsBeforeExpansion
- Units served before expansion (units)Source: Calculated output
constrainedUnitsBeforeExpansion = max(0, demand units โ current capacity units)Where
- demandUnits
- Demand units (units/period)Source: Business record
- currentCapacityUnits
- Current capacity units (units/period)Source: Business record
- capacityExpansionUnits
- Capacity expansion units (units/period)Source: User decision
- constrainedUnitsBeforeExpansion
- Constrained demand units (units)Source: Calculated output
servedUnitsAfterExpansion = min(demand units, current capacity units + capacity expansion units)Where
- demandUnits
- Demand units (units/period)Source: Business record
- currentCapacityUnits
- Current capacity units (units/period)Source: Business record
- capacityExpansionUnits
- Capacity expansion units (units/period)Source: User decision
- servedUnitsAfterExpansion
- Units served after expansion (units)Source: Calculated output
incrementalUnitsServed = units served after expansion โ units served before expansionWhere
- servedUnitsBeforeExpansion
- Units served before expansion (units)Source: Calculated output
- servedUnitsAfterExpansion
- Units served after expansion (units)Source: Calculated output
- incrementalUnitsServed
- Incremental units served (units)Source: Calculated output
incrementalContribution = incremental units served ร (selling price per unit โ variable cost per unit) โ expansion period costWhere
- sellingPricePerUnit
- Selling price per unit (currency units/unit, ex tax)Source: Business record
- variableCostPerUnit
- Variable cost per unit (currency units/unit, ex tax)Source: Business record
- expansionPeriodCost
- Expansion cost for the period (currency units/decision period, ex tax)Source: User decision
- incrementalUnitsServed
- Incremental units served (units)Source: Calculated output
- incrementalContribution
- Incremental contribution (currency units, ex tax)Source: Calculated output
expansionBreakEvenUnits = ceiling(expansion period cost / contribution per served unit), when contribution is positiveWhere
- expansionPeriodCost
- Expansion cost for the period (currency units/decision period, ex tax)Source: User decision
- expansionBreakEvenUnits
- Expansion break-even units (units)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.
- Demand units
- 150 units/period
- Current capacity units
- 100 units/period
- Selling price per unit
- 20 currency units/unit, ex tax
- Variable cost per unit
- 8 currency units/unit, ex tax
- Capacity expansion units
- 30 units/period
- Expansion cost for the period
- 100 currency units/decision period, ex tax
Calculation and outputs
Units served before expansion
servedUnitsBeforeExpansion = min(demand units, current capacity units)- Demand units
- 150 units/period
- Current capacity units
- 100 units/period
- Capacity expansion units
- 30 units/period
- Constrained demand units
- 50 units
Engine result: 100 units
Constrained demand units
constrainedUnitsBeforeExpansion = max(0, demand units โ current capacity units)- Demand units
- 150 units/period
- Current capacity units
- 100 units/period
- Capacity expansion units
- 30 units/period
Engine result: 50 units
Units served after expansion
servedUnitsAfterExpansion = min(demand units, current capacity units + capacity expansion units)- Demand units
- 150 units/period
- Current capacity units
- 100 units/period
- Capacity expansion units
- 30 units/period
- Expansion cost for the period
- 100 currency units/decision period, ex tax
- Units served before expansion
- 100 units
- Constrained demand units
- 50 units
- Expansion break-even units
- 9 units
Engine result: 130 units
Incremental units served
incrementalUnitsServed = units served after expansion โ units served before expansion- Capacity expansion units
- 30 units/period
- Expansion cost for the period
- 100 currency units/decision period, ex tax
- Units served before expansion
- 100 units
- Constrained demand units
- 50 units
- Units served after expansion
- 130 units
- Expansion break-even units
- 9 units
Engine result: 30 units
Incremental contribution
incrementalContribution = incremental units served ร (selling price per unit โ variable cost per unit) โ expansion period cost- Selling price per unit
- 20 currency units/unit, ex tax
- Variable cost per unit
- 8 currency units/unit, ex tax
- Capacity expansion units
- 30 units/period
- Expansion cost for the period
- 100 currency units/decision period, ex tax
- Units served before expansion
- 100 units
- Constrained demand units
- 50 units
- Units served after expansion
- 130 units
- Incremental units served
- 30 units
- Expansion break-even units
- 9 units
Engine result: 260 money
Expansion break-even units
expansionBreakEvenUnits = ceiling(expansion period cost / contribution per served unit), when contribution is positive- Variable cost per unit
- 8 currency units/unit, ex tax
- Capacity expansion units
- 30 units/period
- Expansion cost for the period
- 100 currency units/decision period, ex tax
- Units served before expansion
- 100 units
- Constrained demand units
- 50 units
- Units served after expansion
- 130 units
- Incremental units served
- 30 units
- Incremental contribution
- 260 money
Engine result: 9 units
Example
The labelled rows below are formatted directly from the exact shared engine using the visible default inputs.
- Units served before expansion
- 100 units
- Constrained demand units
- 50 units
- Units served after expansion
- 130 units
- Incremental units served
- 30 units
- Incremental contribution
- 260.00
- Expansion break-even units
- 9 units
The incremental contribution is 260.00.
Interpretation
Contribution per bottleneck unit is useful only when the entered resource is the actual constraint.
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.
- Demand units minimum
demandUnits โฅ 0 units/periodโ A lower value is rejected before calculation.- Demand units maximum
demandUnits โค 100,000,000 units/periodโ A higher value is rejected before calculation.- Current capacity units minimum
currentCapacityUnits โฅ 0 units/periodโ A lower value is rejected before calculation.- Current capacity units maximum
currentCapacityUnits โค 100,000,000 units/periodโ A higher value is rejected before calculation.- Selling price per unit minimum
sellingPricePerUnit โฅ 0 currency units/unit, ex taxโ A lower value is rejected before calculation.- Selling price per unit maximum
sellingPricePerUnit โค 10,000,000 currency units/unit, ex taxโ A higher value is rejected before calculation.- Variable cost per unit minimum
variableCostPerUnit โฅ 0 currency units/unit, ex taxโ A lower value is rejected before calculation.- Variable cost per unit maximum
variableCostPerUnit โค 10,000,000 currency units/unit, ex taxโ A higher value is rejected before calculation.- Capacity expansion units minimum
capacityExpansionUnits โฅ 0 units/periodโ A lower value is rejected before calculation.- Capacity expansion units maximum
capacityExpansionUnits โค 100,000,000 units/periodโ A higher value is rejected before calculation.- Expansion cost for the period minimum
expansionPeriodCost โฅ 0 currency units/decision period, ex taxโ A lower value is rejected before calculation.- Expansion cost for the period maximum
expansionPeriodCost โค 10,000,000 currency units/decision period, ex taxโ 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 planner 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 planner. 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 More or Raise Price? Manufacturing Capacity
Compare capacity, price and product-mix levers using contribution per constrained unit without forecasting demand.
Read guide