Юнит-тестирование для чайников

Отличия от классического P&L

Если не вдаваться в тонкости и различия между P&L и CF, в общем виде экономическая эффективность любой компании — это заработали мы денег или потеряли в конкретный календарный период.


Считается по примерной формуле: (Выручка) — (Себестоимость) — (Расходы на маркетинг и рекламу) — (Коммерческие расходы) — (ФОТ сотрудников) — (Прочие расходы) — (Налоги и проценты по займам) = Прибыль/Убыток

(если убрать из формулы налоги и проценты — получим пресловутую EBITDA)

ВАЖНО: все эти расчёты привязаны к календарю. Мы получаем ответ на вопрос “заработал бизнес денег или потерял в конкретный период времени — месяц/квартал/год”

Этот способ не всегда удобен или применим, особенно в случае, когда действия (и их стоимость) в один период начинает приносить отдачу в другие периоды времени. Классический учёт с этим до конца не справляется в двух случаях :

  • когда нужно связать маркетинговые/рекламные расходы с выручкой, которая в результате этих расходов возникла
  • стоимость создания/развития ИТ-продуктов и выручка/доходы от пользователей этих ИТ продуктов

Недостатки юнит-тестирования

  • Написание тестов может занять больше времени, чем сам код.
  • Плохие или неточные тесты создают ложную уверенность.
  • Для правильной реализации нужно больше знаний.
  • Возможно, важные части кодовой базы нельзя будет покрыть тестами.
  • Некоторые фреймворки не позволяют с лёгкостью тестировать частные методы, что может усложнить юнит-тестирование.
  • Если тесты слишком хрупки (их слишком легко не пройти по ошибочным причинам), то на обслуживание может уйти много времени.
  • Юнит-тесты не отлавливают интеграционные ошибки.
  • UI тестировать сложно.
  • Неопытные разработчики могут тратить зря время на тестирование не тех аспектов.
  • Иногда тестирование элементов с внешними зависимостями или зависимостями времени выполнения может быть очень сложным.

Почему есть проекты второго типа?

ScrumTrekДарт Автотестиусне только не помогает, но вредит проектуследующих основных правил

  • Быть достоверными
  • Не зависеть от окружения, на котором они выполняются
  • Легко поддерживаться
  • Легко читаться и быть простыми для понимания (даже новый разработчик должен понять что именно тестируется)
  • Соблюдать единую конвенцию именования
  • Запускаться регулярно в автоматическом режиме

Что тестировать, а что – нет?

  1. Простой код без зависимостей. Скорее всего здесь и так все ясно. Его можно не тестировать.
  2. Сложный код с большим количеством зависимостей. Хм, если у вас есть такой код, тут пахнет God Object’ом и сильной связностью. Скорее всего, неплохо будет провести рефакторинг. Мы не станем покрывать этот код юнит-тестами, потому что перепишем его, а значит, у нас изменятся сигнатуры методов и появятся новые классы. Так зачем писать тесты, которые придется выбросить? Хочу оговориться, что для проведения такого рода рефакторинга нам все же нужно тестирование, но лучше воспользоваться более высокоуровневыми приемочными тестами. Мы рассмотрим этот случай отдельно.
  1. Cложный код без зависимостей. Это некие алгоритмы или бизнес-логика. Отлично, это важные части системы, тестируем их.
  2. Не очень сложный код с зависимостями. Этот код связывает между собой разные компоненты. Тесты важны, чтобы уточнить, как именно должно происходить взаимодействие. Причина потери Mars Climate Orbiter 23 сентября 1999 года заключалась в программно-человеческой ошибке: одно подразделение проекта считало «в дюймах», а другое – «в метрах», и прояснили это уже после потери аппарата. Результат мог быть другим, если бы команды протестировали «швы» приложения.

Юнит-экономика (как её мама родила)

“Мама с папой” придумали юнит-экономику для ответа на горячий вопрос любого стартапа про целесообразность масштабирования бизнеса за счёт платного привлечения пользователей. Грубо говоря, когда у стартапа появлялись первые пользователи в заметном количестве, юнит-экономика должна была отвечать на вопрос: “А если мы сейчас потратим много миллионов на рекламу и получим взрывной рост — мы выйдем в плюс или нет?” В общем виде самая простая формула юнит-экономики отвечает на вопрос “Что я масштабирую — прибыль или убыток — когда вливаю деньги в рекламу?”

Поэтому первая базовая формула, с которой начинается вся юнит-экономика, выглядит вот так: Простым русским языком она говорит нам, что стоимость привлечения платящего пользователя должна быть меньше, чем маржа, которую я получаю с этого платящего пользователя (где Маржа = Выручка — Себестоимость) Если она меньше — то вливать деньги в рекламу имеет смысл. Если больше — то наоборот. Потому что при “отрицательной” юнит-экономике, взрывной рост пользовательской базы (и выручки от нее) — повод расстраиваться, потому что приводит к такому же взрывному росту убытков. В терминах дохода формула выглядит так:

Важное про базовую формулу

НА ПОЛЬЗОВАТЕЛЯ! Юнит-экономика работает с так называемыми “удельными” показателями — уходит от вала (сколько всего денег мы получили) к показателям “на голову”, или на единицу чего-то (в данном случае — на одного платящего пользователя).

Собственно, вот это “на пользователя” (per Unit) и дало этой форме экономического анализа имя. Юнит-экономика по русски становится “Экономикой на пользователя”.Зачем так, и как от удельных показателей переходить обратно к валу, я дальше объясню. А пока просто запомните!

Рекламная модель

Сегодня я хотел бы рассказать о том, как рассчитывать доход от проекта, при продаже рекламы на нем, так называемая рекламная модель. А именно, как рассчитать стоимость тысячи показов, сколько должно быть клиентов, какой должен быть средний чек и так далее.

Рассмотрим пример, некоторый узкоспециализированный сайт, который собирает качественную аудиторию под свой контекст. Предположим, у нас имеется 30 000 уникальных пользователей в месяц, при этом наша ниша позволяет продавать их достаточно дорого, CPM — 1000 рублей.

«CPM — cost per mille, стоимость 1000 показов рекламоносителя»

Давайте рассмотрим нашу рекламную модель, и определим сколько мы можем заработать на нашей аудитории, сколько должно быть клиентов и как мы должны им продавать. Для расчетов будем использовать подход юнит-экономики для смешанных моделей.

В данном случае мы имеем 30 000 пользователей, так как у нас просто сайт и они смотрят контент, то конверсия у нас 100%, далее мы указываем цену контакта с одним пользователем, так как CPM — 1000 рублей, то один контакт стоит 1 рубль. Следующий параметр NS -определяет число баннеров (рекламных площадок) на странице — 2, а APCL — сколько в месяц просматривается страниц одним пользователем. Кроме того мы пока установили параметр IR в 50%, что означает, что продаем мы только 50% показов, которые генерируются нашими пользователями.

Фактически мы определили наш инвентарь, который нам надо продать. Предположим, у нас есть один менеджер по продаже рекламы, который может инициировать 10 контактов в день или 220 в месяц. Под контактом подразумевается контактирование с новым клиентом, и ведение его до какого-то разумного результата. Конверсия нашего менеджера 10%, при этом его вознаграждение следующее, 44 000 рублей составляет фиксированная часть оплаты, и 1% от платежа, в виде премии. Давайте посмотрим, сколько можно заработать с нашим бизнесом на рекламе.

И так, нижняя строчка показывает наши отношения с клиентом. Менеджер совершает 220 контактов и с конверсией 10% получаем 22 клиента. При этом, эти клиенты выкупают 50% показов, которые генерирует проект. Всего мы генерируем 30 0000×2×100×50% = 3 000 000 показов, по цене 1 показ за 1 рубль. Эти показы равномерно распределяются между нашими 22 клиентами. Итого, каждый клиент в среднем платит 136 363 рубля. Чтобы продать показы, которые у нас имеются, надо купить нашу аудиторию, причем покупаем мы 100% показов и тратим на это 300 000 рублей, которые также равномерно по 13636 рублей расходятся на всех наших клиентов. Также с каждой продажи мы платим 1% нашему менеджеру. Пока для простоты считаем, что клиент живет с нами один месяц. И за этот месяц мы заработаем на нашем проекте 3 000 000 рублей, при этом contribution margin составит 2 626 000,из которых 300 000 мы потратим на привлечение нашей аудитории, а 44 000 отдадим в качестве заработной платы менеджеру плюс 30 000 в качестве премии в виде 1% от оборота, который он принес в компанию.

Теперь давайте посмотри, сколько мы заработаем, если будем продавать 100% инвентаря.

Как видим, ровно в 2 раза больше, однако при этом чтобы продать в 2 раза больше инвентаря нам надо либо поднять средний чек на клиента, либо увеличить число клиентов в 2 раза. Теперь можно сделать вывод, наш заработок зависит от проданного инвентаря, а не числа клиентов. А вот число клиентов определяет величину среднего чека

Важно понимать, что мы не можем растить число клиентов быстро, так как нам придется увеличивать число менеджеров, которые с ними работают. Давайте исходить, из того, что один менеджер не может вести более 22 клиентов

Если для наших клиентов комфортная цена порядка 70 000, то, нам нужно иметь 4 менеджеров, которые будут работать с 880 потенциальными клиентами и 88 реальными клиентами. При этом наш CM немного уменьшиться, так как мы будем платить заработную плату уже 4 сотрудникам, а не одному. Зато понижение цены должно стать более привлекательным для наших клиентов, что должно позволить привлечь больше людей.

Таким образом подход к расчету смешанных моделей можно использовать для расчета рентабельности рекламной модели.

Так же я подготовил видео с демонстрирующее данный подход

Очень коротко, что такое юнит-экономика и в чём её отличие от перфоманс-маркетинга

Если вы совсем не знакомы с концепцией юнит-экономики, то рекомендуем обратиться к материалам, которые пишут Илья Красинский и Даниил Ханин. Сокращения и обозначения в их методологиях разные. Вот здесь больше отсылок на их работы. Наша статья про конкретный инструмент — калькулятор.

Итак, юнит-экономика — это подход, в котором вы сравниваете все расходы, связанные с конкретным клиентом, и все доходы, которые он вам принёс. И понимаете, что вы масштабируете — прибыль или убыток. Это, конечно, не вся экономика, потому что мы не учитываем постоянные затраты. В самом простом виде эту модель описывает элементарная формула:

(средний чек — средние затраты на клиента) * повторные покупки — стоимость привлечения клиента

Вообще, кажется очень похожим на перфоманс-маркетинг, да? Мне тоже так поначалу показалось

Но разница вот в чём: когда научишься думать в терминах юнит-экономики, то понимаешь, что все решения, которые кто-то (дизайнер / маркетолог/ директор по продукту / директор по продажам / юрист / начальник производства/ неважно кто ещё) принимает в продукте, принимаются только для того, чтобы что-то в этой формуле изменилось. А кроме того, у большинства таких изменений есть и тёмная сторона: например, да, капитан, если поднять чек, то может упасть конверсия.

И когда это понимаешь, становится гораздо проще принимать решения об инструментарии. В отличие от перфоманс-маркетинга, инструменты тут связаны не только со стоимостью лида, доступностью трафика и конверсией, но и вообще со всеми процессами в компании. Поскольку мы продакшен, для нас (и наших клиентов) это знание очень ценное, потому что оно позволяет обсуждать цену в терминах окупаемости, а не в терминах затрат. И это вообще-то упрощает продажу и увеличивает срок счастливой совместной жизни нас и клиента.

В общем, разработав настольную игру и поработав директором по продукту, я научился в любом сценарии видеть его экономическую форму записи. Кстати, да, с точки зрения UX юнит-экономика — это просто сценарий пользователя, нарисованный в Excel, а не в Figma.

Анализ юнит-экономики

Определение бизнес-юнита


Мы уже выяснили, что показатели юнит-экономики выражаются на единицу продукции или на одного клиента

Поэтому первое, что важно сделать, когда дело доходит до анализа экономической эффективности компании — это определить базовую единицу или юнит

Бизнес-юнит — это фундамент, который зависит от специфики деятельности компании. Вот некоторые примеры:

  • Для торговой или производственной компании обычно юнитом выступает розничный покупатель. Для супермаркета это покупатель, посетивший точку в торговом центре, а для производителя обуви — конечный покупатель через любой канал продаж.
  • У провайдеров телеком-услуг юнитом является клиент, подключающий мобильную связь, домашний интернет, спутниковое телевидение или другую услугу.

В приведенных выше примерах описаны бизнес-модели, ориентированные на конечных потребителей. У них только один тип юнита. Тем не менее, это не единственно возможный вариант.

Поставщики услуг инфраструктуры работают в разных географических точках. Например, предоставляют телекоммуникационным компаниям физическую инфраструктуру: беспроводные вышки или, распределённые центры обработки данных.

Каждый из этих типов физической инфраструктуры связан со значительными капиталовложениями. В этом случае юнит — это не только клиент, но и само оборудование.

В случаях, когда имеется несколько бизнес-юнитов, рекомендуется один выделять как основной, а другие обозначать как вторичные.

Метрики юнит-экономики

Как только бизнес-юниты определены и зафиксированы, можно рассчитать точную юнит-экономику бизнеса.

Одним из ранее упомянутых примеров был поставщик интернет-услуг. Бизнес-юнитом этой компании является пользователь, и здесь есть две базовых метрики:

  • Стоимость привлечения клиента, CPA. Метрика отвечает на вопрос: «Сколько денег потратит компания, чтобы один клиент начал пользоваться её услугами?»
  • Сумма дохода, получаемая от одного клиента за весь период времени, в течение которого он использует интернет-сервис. Это LTVLifetime Value.

В случае розничного магазина юнит-экономика будет связана с доходом, генерируемым ежемесячно каждым активным покупателем. Часто его выражают через среднемесячный или еженедельный доход на одного клиента, в зависимости от периода, который компания применяет для анализа.

How to approach unit economics as a SaaS startup

Unit economics can be approached from two angles — looking at the ratio of customer lifetime value (LTV) to customer acquisition costs (CAC), or the payback period on CAC.

LTV to CAC ratio

As part of your unit economics analysis, you’ll be looking closely at your customer lifetime value and customer acquisition metrics, and the ratio between the two.

An ideal ratio is considered to be 3:1, where you get three times the value of acquisition from each new customer.

If your ratio is lower (e.g. 1:1), it will mean it costs you as much to acquire one customer as they spend on your product. If this is the case, you should be looking at ways to refine your sales, acquisition, and pricing models.

If your ratio is high (e.g. 6:1), it means you could be missing out on valuable opportunities. As each customer ends up being worth more to your startup than it costs to onboard them, you can afford to allocate more of your time and budget to sales and marketing. The money you spend at this stage will be made back over the lifecycle of each customer.

Payback period on CAC

This takes into account the time a company needs to pay back the cost of acquiring a customer. The average startup has a payback length of 15 months based on gross margin.

Shorter payback times are advantageous as less working capital is needed, which in turn gives companies the ability to grow faster.


Lighter Capital reached out to Ruben Gamez, Founder of BidSketch, for his thoughts on these two approaches to unit economics.

Любой долгосрочный проект без надлежащего покрытия тестами обречен рано или поздно быть переписанным с нуля

В своей практике я много раз встречался с проектами старше года. Они делятся на три категории:

  • Без покрытия тестами.Обычно такие системы сопровождаются спагетти-кодом и уволившимися ведущими разработчиками. Никто в компании не знает, как именно все это работает. Да и что оно в конечном итоге должно делать, сотрудники представляют весьма отдаленно.
  • С тестами, которые никто не запускает и не поддерживает.Тесты в системе есть, но что они тестируют, и какой от них ожидается результат, неизвестно. Ситуация уже лучше. Присутствует какая-никакая архитектура, есть понимание, что такое слабая связанность. Можно отыскать некоторые документы. Скорее всего, в компании еще работает главный разработчик системы, который держит в голове особенности и хитросплетения кода.
  • С серьезным покрытием. Все тесты проходят.Если тесты в проекте действительно запускаются, то их много. Гораздо больше, чем в системах из предыдущей группы. И теперь каждый из них – атомарный: один тест проверяет только одну вещь. Тест является спецификацией метода класса, контрактом: какие входные параметры ожидает этот метод, и что остальные компоненты системы ждут от него на выходе. Таких систем гораздо меньше. В них присутствует актуальная спецификация. Текста немного: обычно пара страниц, с описанием основных фич, схем серверов иgetting started guide’ом. В этом случае проект не зависит от людей. Разработчики могут приходить и уходить. Система надежно протестирована и сама рассказывает о себе путем тестов.

Проекты первого типа – крепкий орешек, с ними работать тяжелее всего. Обычно их рефакторинг по стоимости равен или превышает переписывание с нуля.

Contribution Margin

Важность сходимости юнит-экономики для бизнеса пропагандируется большинством фондов, экспертов, менторов и разнообразных коучей. Однако мало кто, может объяснить, что рассчитывают эти формулы и почему нужно рассчитывать именно это

Для начала, давайте познакомимся с математикой юнит-экономики, в целом я написал множество разнообразного материала на эту тему и вы легко можете познакомиться с ними. Мы начнем же с базовой формулы, которую придумал Илья Красинский, и которая растиражирована множеством его последователей и подражателей.

Revenue = UA x (ARPPU x C1 — CPA)

Я специально записал ее в изначальном виде, как это делал Илья. Но использование термина Revenue — который означает оборот, мне не нравится, так как, что в этой формуле, что в самой юнит-экономике, мы понимаем совершенно другую сущность, а именно, сколько мы зарабатываем на самом факте продажи с потока пользователей, без учета постоянных издержек. Для этого наиболее близким термином будет Contribution Margin, который показывает доход с единичной продажи без учета постоянных издержек.

Ключевыми понятиями тут являются отсутствие (не учет) постоянных издержек, а также понятие пользователей и их потока. Второе понятие пока нас не будет интересовать, а вот первое как раз и является основной для данной статьи.

Почему нас не интересует учет постоянных издержек? Что это вообще за издержки, которые мы решили не учитывать? Для ответа на эти вопросы, давайте рассмотрим два вида бизнеса, проектный и продуктовый, на самом деле, они делятся несколько иначе, а именно, у одних расходы растут пропорционально доходам, а у других нет. Представить это можно следующим образом.

Как видно из картинки, во втором случае у нас доходы растут, скажем так, экспоненциально, при этом расходы продолжают расти линейно. Такие бизнесы интересны тем, что позволяют заработать больше за меньший промежуток времени, в целом большинство IT стартапов относятся именно ко второму виду.

Так в чем же магия этой самой величины Contribution Margin, почему важно рассчитывать именно ее, а не скажем прибыль, что было бы не менее логично? А все дело в том, что данная величина не имеет никакого отношения к вашей бухгалтерии и не является метрикой, которая нужна для учета финансов или чего-либо из этой отрасли. Задача Contribution Margin в юнит-экономике показать живете ли вы и ваш бизнес или уже начали умирать

Для этого давайте посмотрим на стандартную картинку развития бизнеса со временем.

Что мы видим на этом рисунке, это финансы, которые имеет наш бизнес с течением времени. Сначала, у нас есть стартовые инвестиции, которые мы тратим на развитие бизнеса, затем получаем первые ангельские инвестиции и уходим ниже нуля, мы не зарабатываем в это время, затем спустя какое-то время мы начинаем зарабатывать и денежные поступления начинают расти. Спустя время мы покидаем долину смерти и проходим точку безубыточности и начинаем быстро расти.

Также на рисунке я изобразил два вектора, вниз и вверх, которые называются CM — Contribution Margin. Эта величина показывает нам, есть ли у нас шанс пройти точку перелома и начать зарабатывать или нет. Если CM отрицательный, то мы будем разоряться и каждое наше действие приводит к росту убытков, если CM положительный, то значит, у нас есть шанс пройти точку безубыточности и стать прибыльным бизнесом.

Таким образом, знак CM показывает нам направление вектора денежного потока, а величина CM показывает скорость изменения денежного потока. Фактически знание Contribution Margin говорит нам, и в частности инвестору, что происходит с нашим бизнесом в целом, есть ли шанс выжить или нет, без относительности наших постоянных издержек. Кроме того, данная величина позволяет оценивать нам принимаемые нами решения, если наше решение изменяет значение CM в лучшую сторону, то данное решение имеет смысл делать, а если нет, то такое решение делать не стоит.

И так, правильная формула для оценки сходимости юнит-экономики

CM = UA x (ARPPU x C1 — CPA)

Кейс 4. Продажа станков

А теперь для контраста представим, что мы продаём станки. Один станок стоит очень много, и мы закладываем в них большую маржу. К примеру, возьмем станок с ЧПУ. Первый попавшийся в Директе стоит почти 3 000 000. Директ обещает нам 100% трафика по 28,70 ₽ за клик, но при этом прогнозирует максимальную ставку в 300+ ₽, поэтому заложим 49 ₽ за клик (хотим быть повыше). При этом конверсия не самая высокая (у нас, как у многих в этой нише, сайт не оптимизирован под мобильные, а ставки для мобильных мы не скорректировали и получаем много отказного трафика). А ещё у нас и менеджеры ленивые — пропускают заявки, но так как цены у нас хорошие, то всё же процентов 20 сделок мы закрываем. В итоге у нас получаются очень дорогие лиды, и даже несмотря на никакой ретеншн, мы отбиваем свои затраты за счёт высокой маржинальности.

Зачем нужно было разрабатывать калькулятор?

Есть одна проблема: если вы директором по продукту ещё не работали, вам несколько сложнее рассуждать в подобной логике, чем мне. И, в частности, это было сложнее для наших менеджеров и дизайнеров. Поэтому мы сделали калькулятор, с которым можно прямо на встрече с клиентом обсуждать, как вот этот сайт / приложение / рекламный канал / креатив / интранет / любая другая идея будет окупаться.

Вот как работает наш калькулятор на примере ecommerce.

Мы предлагаем ввести основные параметры экономики любого подобного проекта:

  • сколько у вас доступных пользователей в канале UA;
  • сколько вам стоит один визит CPC;
  • сколько вам стоит конверсия в право контакта C1;
  • сколько вам стоит конверсия в покупку C2;
  • какой у вас средний чек AvP;
  • какие у вас средние затраты (тут лежит всё, что вы потратите по факту покупки, включая стоимость продажи, но не включая стоимость привлечения) COGs;
  • сколько у вас будет повторных покупок Ret.

Заранее скажу, что у нас была обширная внутренняя дискуссия о том, как канонически верно называть всё это по-английски

Но, честно говоря, это не очень интересно — важно понимать, что это значит в реальной действительности.. Обычно перед попыткой внесения данных в калькулятор у нас с клиентом происходит вот такой разговор:

Обычно перед попыткой внесения данных в калькулятор у нас с клиентом происходит вот такой разговор:

— Да, но у нас же нет этих данных! — Ничего страшного, давайте для начала просто прикинем грубо. В какой отрасли вы работаете? Ага, вот я посмотрел, в вашей тематике вот столько стоит средний клик. Давайте будем оптимистами и скажем, что конверсия будет 4%… Сколько вам обычно платят? — … — Ну, давайте вашего коммерческого директора спросим, он назовёт какую-то приблизительную сумму. И так далее.

По итогу мы понимаем, сколько вообще можно заработать, а главное, насколько наша модель чувствительна к колебаниям

Например, если шаг в полпроцентных пункта конверсии выносит вас из окупаемости, вы можете позволить только очень и очень контролируемые по цене каналы и вам ультраважно отслеживать любые изменения в конверсионной воронке. Или наоборот: когда вы торгуете высокомаржинальным товаром, не стоит ограничивать себя в удельно дорогих инструментах

Становится понятно, когда и стоит ли вообще инвестировать в разработку или редизайн сайта или приложения. А иногда выясняется, что разрабатывать нужно не фронт-, а бек-интерфейсы, потому что источник инновации в поднятии маржи за счёт удешевления процесса.

Кстати, пару слов об инновациях. Юнит-экономика превращает слово «инновация» из баззворда в конкретное знание. Это ответ на вопрос о том, каким способом сделать дешевле один из ключевых процессов бизнеса

И, что немаловажно, обнаружить эти ключевые процессы.

Едем дальше. После того как вы закинули в калькулятор ваши метрики, он вам покажет примерно такое:

Это коллекция основных метрик, которые имеет смысл обсуждать с клиентом. Про каждую из них можно написать отдельную статью, но мы сейчас не будем этого делать, конечно же.

Ну и да, бывают и другие формулы. Например, если вы рекламное издание и продаёте доступ к аудитории. Или у вас приложение, а продажи происходят внутри него. Или ещё как-то. Все их легко сделать в Excel, и когда-нибудь их научится считать наш калькулятор. И да, часто в таких историях намного больше дополнительных параметров, а цифры вводятся не руками, а подтягиваются из CRM, GA, ваших производственных ARM и прочего.

Наш калькулятор — это простой инструмент для обсуждения быстрых стартовых гипотез. Вот здесь он живёт. Сейчас мы работаем над его второй версией, поэтому, если вам как раз не хватает какой-то фичи, то самое время нас о ней попросить. Предварительно попользовавшись текущей версией, конечно :–) Написать можно на почту kulakov@gmail.com.

Чтобы проиллюстрировать работу калькулятора мы попросили нашего digital-стратега Евгения Кузнецова смоделировать несколько кейсов.

What Are Unit Economics and Why Are They Important?

Simply put, unit economics are a measure of the profitability of selling/producing/offering one unit of your product or service. If you’re a widget company selling widgets, the unit economics will be a relationship between the revenue you receive from selling a widget and all the costs associated with making that sale. For companies offering a service, for example Uber, the unit economics will be the relationship between the revenue from their service (e.g., one taxi ride) vs. the costs associated with offering and servicing the customer.

At a high level, the point of unit economics is to understand how much profit a business makes before fixed costs so that one can estimate how much a business needs to sell in order to cover its fixed costs. Unit economics are thus a fundamental part of breakeven analysis.

For startups who are still in growth mode, this sort of analysis is crucial. It charts a path that the company can follow in order to wean its way off external equity funding. Figure 2 below displays this graphically. As volumes increase, profits before fixed costs (named “contribution” in the chart) tick up and to the right, eventually crossing paths with the fixed cost line. The point in which they cross is the breakeven point.


Going deeper, there are two ways one can approach the calculation of unit economics, and the key differentiating factor is how one defines a unit. If one were to define a unit as one item sold, then the unit economics becomes a calculation of what’s commonly referred to as the contribution margin. Contribution margin is a measure of the amount of revenue from one sale that, once stripped out all the variable costs associated with that sale, contributes toward paying fixed costs.

If instead one defines a unit as one customer, then the commonly calculated metrics are customer lifetime value (CLV) and its relationship with customer acquisition costs (CAC). In essence, these are the same as contribution margin, in that they express the profitability of one customer vs. the cost of acquiring said customer. But the main difference is that they are not fixed in time. Rather, CLV measures the total profit generated by a customer throughout the lifetime of that customer’s relationship with the company. The reason this is important is that startups naturally have to invest in acquiring customers, often at a loss on the first sale. But if the customer makes multiple transactions with the company in time, the company will be able to recoup, and hopefully make a substantial return on the initial investment.

A more detailed explanation/tutorial of what unit economics are and how to calculate them are beyond the scope of this article. But for those who are new to unit economics and how to calculate them, here is a good introductory post on contribution margin, and here are two on CLV and CAC. The latter are admittedly more focused on eCommerce, but the general principles stand for any business. And in any case, the web is awash with tutorials on how to calculate these metrics. For those who want to really nerd out about unit economics, I recommend reading Peter Fader’s work, widely considered the guru on the subject (and incidentally, my old business school professor).

Пишем первый юнит-тест

TestSuite

TestSuite

Это атрибут. Атрибуты определяют особые поведения компилятора. Данный атрибут сообщает компилятору Unity, что код является юнит-тестом. Благодаря этому он отобразится в Test Runner при запуске тестов. Создаём экземпляр Game. Всё остальное вложено в game, поэтому когда мы создадим его, в нём будет находиться всё, что нужно тестировать. В среде продакшена скорее всего все элементы не будут находиться внутри одного префаба. Поэтому вам потребуется воссоздать все объекты, необходимые в сцене. Здесь мы создаём астероид, чтобы можно было следить за тем, двигается ли он. Метод возвращает экземпляр созданного астероида. Компонент Asteroid имеет метод (если вам любопытно, как работает движение, то можете взглянуть на скрипт Asteroid внутри RW / Scripts). Отслеживание исходной позиции необходимо для того, чтобы убедиться, что астероид сместился вниз. Все юнит-тесты Unity являются корутинами, поэтому нужно добавить мягкий возврат. Также мы добавляем шаг времени в 0,1 секунды, чтобы симулировать течение времени, за которое астероид должен был двигаться вниз. Если вам не нужно симулировать шаг времени, то можно вернуть null. Это этап утверждения (assertion), на котором мы утверждаем, что позиция астероида меньше исходной позиции (то есть он сдвинулся вниз). Понимание утверждений — важная часть юнит-тестирования, и NUnit предоставляет различные методы утверждений. Прохождение или непрохождение теста определяется этой строкой. Разумеется, никто не наругает вас за оставленный после завершения тестов беспорядок, но другие тесты могут из-за него закончиться неудачно

Всегда важно подчищать (удалять или сбрасывать) код после юнит-теста, чтобы при запуске следующего юнит-теста не оставалось артефактов, которые могли бы повлиять на этот тест. Нам достаточно просто удалить игровой объект, потому что для каждого теста мы создаём полностью новый экземпляр game.

Учет CPA по когортам

Сегодня так получилось, что сразу 2 человека спросили меня об одном и том же, а именно, как правильно учитывать затраты на привлечение пользователя в когорту, если мы знаем, что пользователь приходит по разным каналам. В итоге я решил расписать как правильно вести учет таких заходов.

Давайте посмотрим как правильно учитывать маркетинговые расходы в юнит-экономике по когортам. Для начала представим, что наш бюджет 100 000 рублей в месяц и мы его тратим на два канала G и Я поровну, по 50 000 рублей. В первый месяц работы наш маркетинг принес нам 8000 посетителей 3000 из канала G и 5000 из канала Я. Давайте запишем это в таблицу.

Обратите внимание на то, как отличается среднее значение CPA по каналам (16,67+10)/2 и среднее по больнице, рассчитанное через весь бюджет и весь трафик. Теперь давайте посмотрим на второй месяц, предположим наш бюджет будет прежним, но теперь мы выделим на канала Я чуть больше денег, так как он принес нам больше пользователей

Однако, во второй месяц, часть пользователей пришедших на сайт, на самом деле это возвращенные пользователи, которые пришли из других каналов. Давайте посмотрим на наши когорты в разрезе каналов.

Причем мы должны понимать, что 700 пользователей, которые пришли в когорту G1 во второй месяц, могли быть приведены рекламной активностью в канале Я, во второй месяц. Тогда наша таблица будет выглядеть следующим образом

Как видим, у нас 350 человек из когорты G1 вернулись через канал Я, и 200 человек из Я1 через канал G. Теперь нам осталось посчитать, как изменилось CPA для каждой из когорты во второй месяц. Для этого нам надо понять на сколько увеличился бюджет на формирование когорты за счет дополнительных трат на возврат пользователей во второй месяц через разные каналы.

Фактически, сумма по G1 показывает реальную стоимость AC для когорты G1 и мы можем пересчитать CPA.

Пример расчета. Часть 2

Давайте теперь посмотрим, а как наш бизнес зависит от того, как идут дела у франчайзи. В нашем примере, франчайзи имели 3000 лидов и с конверсией 1% в первую покупку превращал их в 30 клиентов

Пока мы не обращаем внимание на сам бизнес и по этому считаем, что клиенты у франчайзи одноразовые и не возвращаются за покупками повторно, хотя это тоже, безусловно, сильный фактор, который оказывает сильный вклад в нашу экономику

Предположим, что мы проработали стандарты и обучили нашего франчайзи, и теперь его бизнес имеет 20 000 лидов, и конверсия поднялась до 2%.

Как мы видим, наш бизнес стал интереснее для всех, и франчайзи стал зарабатывать на порядок больше, так и наш доход увеличился. Теперь давайте также сравним, что будет если мы откажемся от паушального взноса или от роялти.

На этот раз отказа от любого из доходов не приводит нас к краху. Но при этом паушальный взнос все еще остается сильным фактором и дает нам 50% доходов. Теперь давайте проведем еще один эксперимент. Повысим роялти с 2% до 5%.

Обратите внимание, доход франчайзи изменился не сильно, а вот наш доход вырос кратно. При этом величина паушального взноса перестает играть существенную роль на наш доход, а следовательно наша франшиза может начать лучше продаваться


С этим читают