# Case: write Klasna's discount policy

> A year of promo codes, English package sales by month and the September 2026 sale buyers. Find what the discounts bought and what they gave away, then write the policy Klasna will follow.

- Course: [Pricing: Set, Package and Raise Your Prices](https://productovi.com/courses/pricing.md)
- Module: When does a discount pay?
- Lesson 24/32, ~38 min
- Source: https://productovi.com/courses/pricing/discount-policy-case

## Leo's plan

**Alex Tutor:** You're on Klasna's growth team, and this module ends with a real decision: the rules for every discount Klasna gives from now on. It's October 2026.

**Leo:** September was a triumph: 740 families used SEPT10. I want it every September, maybe 15% next time. And keep the codes, they close sales.

**Nazar:** I've pulled three files: every code since October 2025, English packages by month, and who bought in the September sale.

**Hanna:** For the September buyers, one more fact: in September 2024, with no sale at all, 150 families bought their first English package.

**Alex Tutor:** Before opening the files: what would prove Leo right?

> **Exercise:** Leo: “740 families used SEPT10, so the sale works.” What must you know before agreeing?

**Dataset (CSV):** [Klasna promo codes, October 2025 – September 2026](https://productovi.com/datasets/pricing/discount-policy-case/klasna-promo-codes-2025-26.csv)

Every code used by families paying in UAH, all subjects. One code per order: codes never stack. Money in UAH.

- `code`: Code
- `kind`: public_sale, support_chat, win_back, referral, sibling, social, partner or seasonal
- `discount_pct`: Discount, % of the list price
- `fence`: Who could use it
- `period`: When it was valid
- `orders`: Packages bought with the code
- `first_time_family_orders`: Orders from families buying from Klasna for the first time
- `lessons`: Lessons in those packages
- `list_value_uah`: Value of those packages at list prices
- `discount_uah`: Discount given

**Dataset (CSV):** [English packages by month, August 2025 – September 2026](https://productovi.com/datasets/pricing/discount-policy-case/klasna-english-packages-monthly.csv)

English packages bought by families paying in UAH. August 2025 is the last August before the first September sale (September 2025: 10% off 16-packs only). Money in UAH.

- `month`: Month
- `packages_8`: 8-lesson packages (650 a lesson)
- `packages_16`: 16-lesson packages (620 a lesson)
- `packages_32`: 32-lesson packages (580 a lesson)
- `sale_packages`: Packages bought in a public sale
- `code_packages`: Packages bought with another code
- `full_price_packages`: Packages bought at the list price
- `list_value_uah`: All packages at list prices
- `sale_discount_uah`: Public sale discounts
- `code_discount_uah`: Other code discounts
- `refunds_uah`: Refunds of unused lessons

**Dataset (CSV):** [Who bought in the September 2026 sale (SEPT10)](https://productovi.com/datasets/pricing/discount-policy-case/klasna-september-2026-sale-buyers.csv)

The 740 families who used SEPT10 (10% off every English package, 1–30 September 2026), by their history with Klasna. One package per family. Money in UAH.

- `segment`: bought_in_spring_2026, bought_before_march_2026, started_checkout_in_august_2026 (opened checkout in August, did not pay) or first_time
- `families`: Families
- `packages_8`: 8-lesson packages
- `packages_16`: 16-lesson packages
- `packages_32`: 32-lesson packages
- `list_value_uah`: Value at list prices
- `discount_uah`: SEPT10 discount

**Alex Tutor:** Start with the waterfall for English over the code year, October 2025 to September 2026: list value, then sale and code discounts, the 2.5% fee on what was paid, and refunds. Then divide by lessons.

> **Exercise:** English, October 2025 – September 2026: what was the **realized price per lesson** after sale discounts, code discounts, the 2.5% fee on what families paid, and refunds? In UAH, to two decimals.

## The August before

**Sofia:** September 2026 looks huge: 770 English packages. But what happened just before it?

**Nazar:** August is always slow, people are on holiday.

**Alex Tutor:** Then compare August with August. 2025 was the last August before families had ever seen a September sale.

**Hanna:** And look at how many August packages were bought at full price, both years.

> **Exercise:** By how many % did English packages bought in August 2026 change against August 2025? To two decimals; negative for a fall.

**Alex Tutor:** And the share bought at full price?

> **Exercise:** In August 2026, 113 of 230 English packages were bought at full price. What was the full-price share? In %, to two decimals. (August 2025: 330 of 360.)

## Who the sale reached

**Leo:** Fine, August dipped. But 740 families in September! That's growth.

**Sofia:** The buyers file says 560 of them had bought before, 90 opened checkout in August and waited. 180 were first-time families.

**Alex Tutor:** And how many of the 180 would have come anyway? Hanna's baseline: 150 first-time families in September 2024, with no sale. The September restart brings them every year.

**Hanna:** It's one year's number, so treat 30 extra families as an estimate, not a fact.

> **Exercise:** SEPT10 gave 778,760 UAH of discount. If the sale added 180 − 150 = 30 first-time families, how much discount did Klasna give per extra family? In UAH, to two decimals.

## What each code bought

**Nazar:** And the codes? Some of them must work.

**Alex Tutor:** Measure each by what it bought. A fair yardstick is discount per first-time family, with care: some codes are not meant to find new families at all.

**Sofia:** SIBLING10 and HELP20 are fences with another purpose: more lessons from one family, and a social choice.

**Alex Tutor:** Right. And for HELP20, ask only what the check needs: look at the document once, record "eligible", and keep no copy of it. But CHAT10 and the public sales claim to win new families. Check whether they do.

> **Exercise:** Which code brought first-time families most cheaply, in discount per first-time family?

## Writing the policy

**Leo:** So you'd cancel my September sale?

**Alex Tutor:** Replace it with something that buys what you want: new families. A first-package offer for accounts that have never bought, with dates, and nothing for families who'd come back anyway.

**Sofia:** First the two biggest decisions: SEPT10 and CHAT10. Then the full policy.

**Hanna:** Keep the social and sibling discounts. Just make sure they never stack and never go below the floor.

**Alex Tutor:** Check Hanna's first guardrail.

> **Exercise:** **True or false:** under the new policy, a family that qualifies for both HELP20 and SIBLING10 gets both discounts on the same package.

> **Exercise:** In 2–4 sentences, decide what happens to SEPT10 and CHAT10, backing each decision with one or two numbers from the files.

**Alex Tutor:** Now the whole policy. For every discount: what it buys, who gets it and how that is checked, how much, who approves exceptions. Then how you will know it works.

**Leo:** And one line I can say at the all-hands.

**Hanna:** Plus the guardrails: no stacking, nothing below the floor, real dates on every promotion.

**Sofia:** Decision, the numbers that carry it, the rules, and how we measure.

> **Exercise:** Write Klasna's discount policy for 2026/27, with the evidence from the files.

> **Key ideas**
>
> - Draw the waterfall before judging discounts: English realized 563.75 a lesson against a 610.92 list average, and only 56.83% of packages sold at full price.
> - Judge each code by what it bought, for example discount per first-time family: FRIEND5 about 504, CHAT10 about 8,192.
> - A sale on a fixed date trains buyers to wait: August fell 36.11% and September had no full-price English package.
> - Count who would have bought anyway: 75.68% of sale families had bought before, and first-time families beat a no-sale year by about 30.
> - A discount policy names, for every discount, what it buys, who qualifies and how that is checked, the size, the guardrails (no stacking, the floor, real dates, the 30-day reference) and who approves exceptions, and says how it will be measured.

**Alex Tutor:** The next module is about changing the list price itself: the signs it's too low, how to raise it with notice, and what to do about inflation, the hryvnia and a competitor's cut.

- Previous lesson: [Promotions without training buyers to wait](https://productovi.com/courses/pricing/promotions-and-realized-price.md)
- Next lesson: [Signs a price is too low](https://productovi.com/courses/pricing/signs-a-price-is-too-low.md)

---
Productovi Learning. Free, no sign-up needed to read.
