Theory
Case: should Klasna launch group lessons?
A group-lesson pilot sold well. Judge it by contribution margin: fill per session, cannibalization of the 1:1 lessons it replaced and the break-even of a new coordinator.
~9 min read · 10 exercises · 250 points
Before you start
Leo's group-lesson pitch
Still on Klasna's product team, you're in the meeting where Leo pitches an idea from the March pilot: English group lessons, one tutor and up to four teens, cheaper for families. The pilot sold well, and he wants groups across the school, with a new coordinator to run them.
Hanna wants to know what one session actually leaves before anyone is hired. This case brings the module together: you'll judge the idea by contribution margin, not by sales, and decide whether it's worth scaling.
Find the real unit: the session
Contribution margin needs the right unit: the thing whose costs you add up. In a group product the price is per learner, but most costs are per session.
Klasna's English groups: each learner pays 280 UAH, and the payment provider keeps 2.5%, that is 7 UAH. So each learner brings 273 UAH. The tutor gets 520 and video + AI cost 40 per session, whether one learner comes or four, so each session starts 560 UAH in the red.
Contribution per session = 273 × learners − 560
The full group Leo imagines leaves 532 UAH. One empty seat takes 273 of it away. With this shape, fill decides the result more than the price does. Whenever a cost is paid per session, per batch or per trip while money comes per person, write the formula per session first.
- Do3 learners: 3 × 280 − 21 − 520 − 40 = 259 UAH
- Don't3 learners: 3 × (280 − 7 − 520 − 40) = −861 UAH
The payout and video are paid once per session, not once per learner.
An average hides the spread
The pilot's average fill was 2.875 learners out of 4 seats. Plug it into the session formula and you get 2.875 × 273 − 560 ≈ 224.88 UAH per session. That is exactly the pilot's average contribution, and it looks healthy.
But no session had 2.875 learners. The real sessions were:
- 14 with four learners: +532 each;
- 18 with three: +259 each;
- 12 with two: −14 each;
- 4 with one: −287 each.
Chart data
| Learners in the session | Contribution margin |
|---|---|
| 1 | -287 |
| 2 | -14 |
| 3 | 259 |
| 4 | 532 |
So 16 of 48 sessions ran at a loss, while the average said everything was fine. The average is correct for the total, and useless for deciding which sessions to run.
The habit: when results depend on a threshold (here 2.05 learners), count how many cases fall on each side of it. A chart of contribution by fill, or a simple count of sessions by learners, shows the problem that a single mean hides.
- Do"Average 224.88 UAH per session, but 16 of 48 sessions lost money."
- Don't"Average fill 2.875 is above 2.05, so every session covers its costs."
An average above the threshold says nothing about individual sessions below it.
A minimum group size
When costs come per session and money per learner, a session turns profitable at a break-even fill: session costs ÷ money per learner. For Klasna's groups: 560 ÷ 273 ≈ 2.05 learners.
So the rule writes itself:
- 3 or 4 learners booked: run the session; it leaves 259 or 532 UAH.
- 1 or 2 learners booked: merge with another thin group or move the learners; as booked it loses 287 or 14 UAH.
In the pilot 16 of 48 sessions had one or two learners. Klasna booked a tutor for every slot before knowing who would come.
Why not the other fixes?
- A higher price helps every learner but cannot rescue a one-learner session: at 300 UAH a learner brings 292.50, and the session still loses 267.50.
- Fewer seats limit the upside of full groups and do nothing for half-empty ones.
The lever that matches the problem is fill, set by a minimum group size and merging thin groups the day before.
- Do"Run with 3+ booked; merge or move groups of 1–2 the day before."
- Don't"Run with 2+ booked: two learners bring 546 UAH."
546 is less than the 560 the session costs; two learners still lose 14.
Sales or contribution: what the pilot left
Sales show how busy a product was. Contribution margin shows what it left for everything else. Judge a new product by the second.
The pilot in totals:
- Sales: 138 learners × 280 = 38,640 UAH.
- Payment fees: 2.5% × 38,640 = 966.
- Tutor payouts: 48 sessions × 520 = 24,960.
- Video + AI: 48 × 40 = 1,920.
- Contribution: 38,640 − 966 − 24,960 − 1,920 = 10,794 UAH, or 224.88 per session.
Cross-check by fill: 14 full sessions × 532 + 18 × 259 + 12 × (−14) + 4 × (−287) = 7,448 + 4,662 − 168 − 1,148 = 10,794. The same number from two directions means no cost was missed.
Nearly two-thirds of the sales went straight to tutors. That is not a reason to drop groups; it is the honest starting point for the next question: how much of the 10,794 is truly new money?
- Do38,640 − 966 − 24,960 − 1,920 = 10,794 UAH of contribution
- Don't38,640 − 138 × (520 + 40) − 966 = −39,606 UAH
Payouts and video are per session (48), not per learner (138).
Cannibalization rate
Cannibalization is the part of a new product's sales taken from an existing product rather than from new demand. At sign-up Klasna asked each group learner whether they had dropped a 1:1 English lesson to join; 30 learner-lessons had.
Those families still pay Klasna, just less. The cost is the contribution they used to bring: a 1:1 lesson from the English 16-pack leaves 184.50 UAH, so 30 × 184.50 = 5,535 UAH that Klasna no longer earns.
Measure it in contribution, not in lessons:
- in lessons: 30 of 138, about 21.74%;
- in money: 5,535 ÷ 10,794 = 51.28% of what the pilot left.
The gap is large because a switched learner moves from a lesson that left 184.50 to one that leaves far less. Net new contribution is 10,794 − 5,535 = 5,259 UAH, or 109.56 per session. A new product counts for what it adds, not for what it takes from the old one.
- Do30 × 184.50 = 5,535; 5,535 ÷ 10,794 = 51.28% of the contribution
- Don't"Only 30 of 138 learners switched, so cannibalization is about 22%."
Counting lessons hides that each switch costs a full 184.50 UAH of contribution.
What a sales slide leaves out
Leo's slide shows 38,640 UAH of group sales. To decide on a rollout, walk from that number to what the decision really changes:
- Variable costs of the product: tutor payouts (24,960), payment fees (966), video + AI (1,920). Sales minus these is contribution: 10,794.
- Cannibalization: contribution lost on the 1:1 lessons learners dropped for groups: 30 × 184.50 = 5,535. Net new contribution: 5,259.
- New fixed costs the decision brings: a coordinator at 38,000 UAH a month, which the groups have to cover.
Dataset · 48 rows
Klasna group pilot: English group sessions, March 2026
48 sessions over four weeks. Price 280 UAH per learner per session; tutor payout 520 UAH and video + AI 40 UAH per session; payment fee 2.5% of what families pay.
First 5 of 48 rows
Just as important is what stays out:
- Team salaries are the same whether groups run or not, so they do not change the answer.
- The discount versus a 1:1 lesson is already inside the 280 UAH price.
The test for every line is the same: does it change because of this decision? If yes, it belongs in the comparison; if no, leave it out, however large it is.
- DoSales 38,640 → contribution 10,794 → net of switches 5,259 → minus a 38,000 coordinator.
- Don'tSubtract a share of the in-house team’s salaries from the group pilot.
Those salaries do not change with this decision, so they do not belong in it.
A new fixed cost needs its own break-even
A new hire for a new product is a new fixed cost. Before saying yes, give it its own break-even point: monthly cost ÷ net contribution per unit.
Leo wants a group coordinator at 38,000 UAH a month. Use the net number, after cannibalization: the pilot left 5,259 UAH of new contribution over 48 sessions, so 109.56 per session.
38,000 ÷ 109.56 = 346.8 → 347 sessions a month, just to pay the coordinator. The pilot ran 48 in four weeks, so groups would need more than seven times the volume.
The other way to close the gap is to make each session leave more. If the 28 learners from the 16 loss-making sessions had been merged into 7 full groups, the pilot would be 39 sessions leaving 10,299 UAH after the lost 1:1 lessons, about 264 each, and the break-even would drop to 144 sessions a month. Better, but still far above the pilot.
A good verdict names those conditions: "yes, if fill and volume reach these numbers".
- Do38,000 ÷ (5,259 ÷ 48) = 346.8 → 347 sessions a month
- Don't38,000 ÷ (10,794 ÷ 48) = 169 sessions a month
Using contribution before cannibalization counts the switched 1:1 lessons as new money.
Better fill, same question: volume
Merging thin groups changes contribution per session, which moves the coordinator's break-even. It does not answer whether the volume is there.
The merged pilot, step by step:
- The 16 loss-making sessions had 28 learners. Merged, they fill 7 full groups.
- The pilot becomes 14 + 18 + 7 = 39 sessions: 21 full ones at 532 UAH and 18 with three learners at 259 UAH, so 15,834 UAH of contribution.
- Minus the lost 1:1 lessons, 5,535 UAH: 10,299 UAH of new contribution, about 264.08 per session.
- Coordinator break-even: 38,000 ÷ 264.08 = 143.9 → 144 sessions a month.
That is far better than the 347 sessions at the pilot's original rate, yet still almost four times the 39 sessions the pilot actually ran. So merging is a condition for a rollout, not the proof that it works.
When a fix improves the per-unit number, always finish by comparing the new break-even with the volume you can realistically expect.
- Do"Merged: 144 sessions a month to cover the coordinator, against 39 in the pilot. Yes only if volume grows."
- Don't"Merging raises contribution to 264 per session, so the coordinator pays off."
A better unit number still needs the volume to reach the new break-even.
Ready to practise?
Answer the lesson's exercises and earn 250 points the first time you finish it.
Start the exercises