Marketing OS

Кейс · Marketing OS

Планирование маркетинга в одном контуре: план, проект, задача, эксперимент

Кампания в медиакалендаре, проект с этапами и согласованием, личные задачи и A/B-эксперименты собраны в одном разделе и ссылаются друг на друга. Модели здесь досталась одна роль — подсказчика в календаре.

  1. ПланКампания в медиакалендаре получает фазы, цели, каналы, бюджет и KPI.
  2. ПроектИз шаблона копируется дерево этапов, даты наследуются от кампании.
  3. РасписаниеКод раскладывает задачи назад от даты запуска по длительностям из шаблона.
  4. СогласованиеЭтап уходит на проверку, внешний согласующий отвечает по ссылке без входа в кабинет.
  5. ЗадачиУ каждого исполнителя канбан с путём «план › проект» и приоритетами.
  6. ЭкспериментГипотеза проходит скоринг и гейт запуска, итог уходит в библиотеку выводов.
Содержание ↓
  1. Три инструмента, которые не знают друг о друге
  2. Медиакалендарь
  3. Проект из шаблона
  4. Эксперименты: от гипотезы до вывода
  5. Что считает код, что предлагает модель
  6. Грабли
  7. Как повторить у себя

Три инструмента, которые не знают друг о друге

Обычно план кампаний лежит в таблице, производство ведут в трекере, а про A/B-тесты вспоминают в презентации, когда всё уже закончилось. Связь между ними держится в голове руководителя, и когда спрашивают, почему сдвинулся запуск и что показал похожий тест полгода назад, ответ собирают по трём окнам и паре чатов.

В Marketing OS, которую я строю для своей команды, планирование собрано в одну иерархию: план → проект → задача. Планом служит кампания в медиакалендаре. Внутри неё — проект выпуска с этапами и согласованием, а задачи — это листья дерева этапов, у каждой свой исполнитель и срок. Рядом стоит хаб экспериментов с гипотезами и A/B-тестами.

Медиакалендарь

Кампания бывает двух типов: брендовая 360 или продуктовый запуск. У неё три фазы с отдельными датами (подготовка, активный флайт, посткампейн) и цели трёх уровней: бизнес, маркетинг, коммуникация. Бюджет разложен строками по каналу, сегменту, географии и подрядчику, в каждой строке план и факт. KPI тоже идут парами за период.

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

У каждого креатива есть версии и свой статус согласования. Бриф перепечатывать не нужно, кабинет забирает его из DOCX или Excel. Если кампания связана с производством кампании, из календаря туда ведёт ссылка, а на главной связанная пара занимает одну строку.

Проект из шаблона

Шаблон проекта — дерево этапов до трёх уровней. У каждого этапа длительность по умолчанию и отметка «требует согласования». Когда создаёшь проект, кабинет копирует дерево уровень за уровнем, а даты берёт из кампании. Завести проект можно со страницы плана, из боковой панели кампании или из общего списка.

Кнопка «Авторасписание» просит одну дату — запуска. От неё код идёт назад по задачам-листьям и отводит каждой длительность из шаблона, а если длительность не задана, берёт три дня. Родительский этап получает самое раннее начало и самый поздний срок своих детей. На диаграмме Ганта видны все три уровня.

Статус родителя тоже выводится из детей: он согласован, когда согласованы все, заблокирован, если застрял хоть один, и не начат, пока не начат ни один из них. Во всех остальных случаях родитель в работе. Смена статуса пишется в историю вместе с автором и комментарием. У исполнителя свой канбан по статусам, внутри колонки задачи отсортированы по приоритету, на карточке виден путь «план › проект».

Эксперименты: от гипотезы до вывода

У гипотезы четыре обязательных поля: что меняем, чего ждём, почему так думаем и по какому сигналу поймём, что получилось. Приоритет считают три формулы рядом. Основная — своя формула, в кабинете она называется CVM: охват × влияние × вес метрики × уверенность, делённое на трудозатраты. Фактически это RICE, в котором у каждой метрики свой вес. Вес открытий письма занижен до 0,3, потому что защита приватности в Apple Mail завышает открытия. RICE и ICE стоят рядом для калибровки.

У эксперимента 8 статусов, идут они строго по цепочке. В запуск он переходит только при шести условиях: есть главная метрика, есть защитная, задан минимальный эффект, рассчитан размер выборки, есть контрольный вариант и хотя бы один тестовый. Если чего-то не хватает, карточка на доске возвращается на место со списком недостающего.

Закрывая эксперимент, человек выбирает решение — внедрить, доработать или закрыть — и пишет вывод, пустым его оставить нельзя. Выводы складываются в библиотеку с поиском и тегами. «Эффекта нет» — нормальный итог, его тоже записывают: он экономит следующий такой же тест.

Что считает код, что предлагает модель

Переходы статусов, расписание, свёртку статусов снизу вверх и статистику тестов считает код. Значимость проверяет z-тест для двух долей, перекос трафика между вариантами — хи-квадрат. Отписки, жалобы на спам, доставляемость и недоставленные письма идут как защитные метрики: код сравнивает их с порогами, зашитыми константами, и подсвечивает карточку одним из трёх цветов.

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

Грабли

Невидимые гипотезы. Хаб выглядел готовым, а цикл обрывался на первом шаге: действие «создать эксперимент из гипотезы» было написано и ни разу не вызывалось из интерфейса. Гипотеза без эксперимента не показывалась ни в одном виде доски и пропадала с экрана. Теперь полноту цикла я проверяю поиском: каждое серверное действие обязано вызываться хотя бы из одного компонента.

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

Потолок в 1000 строк. База через API отдаёт не больше 1000 строк за запрос, и счётчики задач в портфеле молча недосчитывались. Все выборки портфеля теперь постраничные.

Медленная панель. Карточка эксперимента открывалась переходом по адресу, и даже закрытие гоняло полный серверный рендер плюс три списка для выпадающих полей, около 3,2 секунды. Server Actions в Next.js выполняются по очереди, Promise.all их не распараллеливает. Сейчас открытие и закрытие живут в состоянии клиента, а списки грузятся один раз на страницу.

Долг, который пока висит: в боковой панели кампании список проектов показывает пустую заглушку, целиком он работает только на странице плана. Заглушка выглядит как «проектов нет», и по ней легко решить, что проект никто не заводил.

Как повторить у себя

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

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

  • Next.js 15
  • TypeScript
  • Supabase (Postgres)
  • Server Actions
  • dnd-kit
  • OpenAI gpt-4.1-mini
  • импорт Excel

Вопросы

Вопросы и ответы

Чем это отличается от таск-трекера?

У задачи здесь есть путь наверх: проект, план кампании, её бюджет и KPI. Руководитель видит портфель целиком, исполнитель видит свои задачи вместе с этим путём и понимает, какой запуск сдвинется, если он опоздает.

Может ли согласовать человек без доступа к кабинету?

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

Модель решает, какой вариант теста победил?

Значимость считает код: z-тест для двух долей и проверка перекоса трафика хи-квадратом, по умолчанию 95% значимости и 80% мощности. Модель в этом не участвует. Внедрить, доработать или закрыть, решает человек, и вывод он обязан записать.

Факт по KPI можно загрузить из таблицы?

Можно. Шаблон Excel с метриками кампании скачивается из неё же: заполняете факт и загружаете обратно. Если в пакете найдутся ошибки, он вернётся со списком, чистый импортируется сразу.

Консультация

Разберём вашу задачу

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

Дмитрий Щеголяев с микрофоном на Мобильном Форуме