Theory
Contribution margin and break-even
The unit-economics formulas as pure math: CM = P(1 − f) − T − V, CM%, break-even ⌈F ÷ c⌉, margin of safety, step costs, the volume a discount needs, gross-up and ROI.
~9 min read · 9 exercises · 250 points
Before you start
What does one lesson leave, and when does the cash arrive?
Back at Klasna, the online tutoring school, the math of this course now meets its business numbers. This module is a short bridge into unit economics: two lessons that use the fractions, rounding, rearranging and sums from earlier modules on real Klasna lines.
This first lesson follows one programming lesson: its contribution margin, the break-even volume and margin of safety, the extra volume a discount needs, the gross-up price that survives a fee, and ROI measured on contribution rather than revenue.
Contribution margin: what one lesson leaves
Contribution margin (CM) is what one unit leaves after the costs that come with it: CM = P(1 − f) − T − V, where P is the price, f the payment fee as a share of price, T the tutor payout and V video and AI per lesson. CM% = CM ÷ P is the same thing as a share of price.
Work the brackets first. A programming lesson at Klasna costs 800 UAH: 800 × 0.975 = 780 after a 2.5% fee, then 780 − 520 − 30 = 230 UAH. CM% = 230 ÷ 800 = 28.75%, so 28.75 kopecks of every hryvnia of price is left over.
Keep both forms. Hryvnias per lesson answer "how many lessons cover the fixed costs?"; the share answers "what does a discount do to the margin?". The fee multiplies the price because it is a share of it; subtracting 2.5 as if it were hryvnias is the classic slip.

- DoCM = 800 × 0.975 − 520 − 30 = 230 UAH; CM% = 28.75%.
- Don'tCM = 800 − 520 − 30 = 250 UAH.
Forgets the 2.5% fee, which takes 20 UAH of the price.
Per-lesson costs vs fixed costs
Unit economics splits costs by one question: does this cost grow with each extra lesson? If yes, it is a variable cost and goes into the contribution margin: the payment fee, the tutor payout, video and AI. If no, it is a fixed cost F for the period: coordinators' salaries, the platform team, office rent. One more lesson doesn't change them.
The split matters because the two kinds of cost are covered in different places. Each lesson pays its own variable costs at once; what's left, the 230 UAH of a programming lesson, goes into a common pot that has to cover F. Subtract a salary inside CM and you count it once per lesson, thousands of times a month.
Some costs sit in between. A coordinator is fixed until the volume needs one more; then F jumps by a whole salary. That is a step cost, and it moves the break-even line rather than the margin.
- DoFee, tutor, video and AI in CM; coordinators and the platform team in F.
- Don'tSpreading the coordinators' salaries over last month's lessons and subtracting them in CM.
A fixed cost per lesson changes with volume and hides the break-even.
Break-even and the margin of safety
Break-even is the volume whose total contribution covers the fixed costs: Q_BE = ⌈F ÷ c⌉, with c the contribution per unit. It is where the line profit = c × Q − F from The linear function crosses zero. Klasna's programming line carries F = 700,000 UAH a month and leaves c = 230 per lesson: 700,000 ÷ 230 ≈ 3,043.5, so 3,044 lessons.

The margin of safety says how far the actual volume Q sits above that line, as a share of Q: MoS = (Q − Q_BE) ÷ Q. With 3,500 lessons it is (3,500 − 3,044) ÷ 3,500 ≈ 13%: volume could fall by about 13% before the line makes a loss.
Below the line the same formula turns negative, and that is fine. In July, with 2,600 lessons, MoS = (2,600 − 3,044) ÷ 2,600 ≈ −17.08%: the month was 444 lessons short. The sign tells you which side of the line you're on; the size, how far.
- Do"July: margin of safety −17%, 444 lessons below break-even."
- Don't"July's margin of safety is 17%."
Dropping the minus turns a loss-making month into a safe one.
Why break-even rounds up
F ÷ c rarely comes out whole, and a break-even volume is a count of lessons that must cover something. Counts like that round up, the rule from Rounding: at the end, and sometimes up.
Check it on the programming line: 700,000 ÷ 230 ≈ 3,043.5. Ordinary rounding could give 3,043, but 3,043 × 230 = 699,890 UAH, still 110 short of the fixed costs. Only 3,044 lessons (700,120) cover them. Rounding down would label a losing month as break-even.
The same holds for any F and c: with fixed costs of 520,000 and 184.50 per lesson, 520,000 ÷ 184.50 ≈ 2,818.4, so 2,819 lessons; 2,818 would leave 519,921, 79 UAH short.
The margin of safety is different. It is a share, not a count, so keep it as a decimal or a percent with sensible rounding at the end, like 13% or −17.08%.
- Do700,000 ÷ 230 ≈ 3,043.5 → 3,044 lessons; check: 3,044 × 230 = 700,120 ≥ 700,000.
- Don't"Break-even is about 3,043 lessons."
3,043 lessons still leave the month 110 UAH short.
Step costs move the line
A step cost is fixed over a range of volume and then jumps by a whole unit: one more coordinator, one more server, one more room. Between the steps it behaves like F; at a step, F rises by the full amount at once.
The contribution per lesson doesn't change, so the step shows up only in break-even. At Klasna, a coordinator at 38,000 UAH a month lifts the programming line's F from 700,000 to 738,000. Break-even moves from 3,044 to ⌈738,000 ÷ 230⌉ = ⌈3,208.7⌉ = 3,209 lessons: the new salary needs 38,000 ÷ 230 ≈ 165 extra lessons.
Two habits help. Before a hire, compute how many extra lessons pay for it and compare that with the volume you expect. And re-check the margin of safety after the step: with 3,500 lessons it falls from about 13% to (3,500 − 3,209) ÷ 3,500 ≈ 8.31%.
- Do"The new coordinator needs about 165 more lessons a month; break-even goes to 3,209."
- Don'tSpreading the 38,000 over lessons and lowering the per-lesson margin.
A step cost changes F, not c.
The volume a discount needs
A discount comes almost entirely out of the margin, not out of the price as a whole. If the contribution margin is m (as CM%) and the discount takes d of the price out of it, each lesson now leaves m − d instead of m. To keep the same total contribution you need ΔV = d ÷ (m − d) more volume, or V × m ÷ (m − d) in all.
With a fee, the discount also shrinks the fee, so it takes d = discount × (1 − f) out of margin: 10% off at Klasna is 0.10 × 0.975 = 0.0975. Programming has m = 0.2875, so ΔV = 0.0975 ÷ 0.19 ≈ 51%: 3,500 lessons must become 3,500 × 0.2875 ÷ 0.19 ≈ 5,296. Check it directly: 720 × 0.975 − 550 = 152 per lesson, and 5,296 × 152 = 804,992 ≈ 3,500 × 230.
The denominator m − d is the trap. As d approaches m, it heads to zero and the volume explodes: 20% off needs about +211%.

- Do"10% off needs about 51% more programming lessons just to stand still."
- Don't"10% off, so 10% more lessons make up for it."
The discount comes out of a 28.75% margin, not out of 100%.
Gross-up: divide by 1 − f
When a fee is a share of the price, the amount that lands is price × (1 − f). To land a target X, solve for the price, as in Rearranging a formula: price = X ÷ (1 − f). That is the gross-up.
For Klasna to keep 970 UAH after a 3% payment fee: 970 ÷ 0.97 = 1,000. Check: 3% of 1,000 is 30, leaving 970. For a tutor to net 600 after a 20% marketplace commission: 600 ÷ 0.8 = 750, since 20% of 750 is 150.
The tempting shortcut is to multiply by 1 + f: 970 × 1.03 = 999.10, or 600 × 1.2 = 720. It always falls short, because the fee is taken from the bigger, grossed-up price, not from X: 720 × 0.8 is only 576. The gap is small at 3% and large at 20%, so always check by taking the fee off your answer.
- DoNet 600 after 20%: 600 ÷ 0.8 = 750; check 750 × 0.8 = 600.
- Don'tNet 600 after 20%: 600 × 1.2 = 720.
The commission comes off 720, leaving 576.
ROI on contribution, not revenue
ROI is a relative change, the idea from Percent vs percentage points: ROI = (B − C) ÷ C, the gain over the cost as a share of the cost. The question is what counts as the benefit B. Use the contribution the spending brought, not the revenue: revenue still has to pay the tutor, the fee and the video and AI.
A promotion costing 50,000 UAH that brings 80,000 of contribution has ROI = 30,000 ÷ 50,000 = 60%. One that brings 160,000 of programming revenue brings only 160,000 × 0.2875 = 46,000 of contribution: ROI = (46,000 − 50,000) ÷ 50,000 = −8%. On revenue it would look like +220%.
How it fits together: contribution per lesson is the building block: divided into fixed costs it gives break-even, as a share it prices a discount, grossed up it sets a price, and set against spending it gives ROI. The next lesson adds time: flows of customers and cash.
- Do"160,000 of revenue is 46,000 of contribution: ROI −8%."
- Don't"The promotion brought 160,000 for 50,000: ROI 220%."
Revenue isn't the gain; most of it pays per-lesson costs.
Ready to practise?
Answer the lesson's exercises and earn 250 points the first time you finish it.
Start the exercises