Discovery: интервью, JTBD, проверка проблемы
Discovery — это не «сходить поговорить с парой клиентов перед началом разработки». Это дисциплина принятия решений в условиях, где вы почти наверняка ошибаетесь, и задача — узнать об ошибке за неделю, а не за квартал.
В обзорной статье трека мы посчитали экономику роли:
доля идей, которые действительно улучшают целевую метрику, держится около 1/3
даже у зрелых команд. Discovery — это машинка, которая отсеивает две трети
до того, как они превратятся в код.
Ниже — от первых принципов: почему опрос «нужна ли вам такая фича?» систематически врёт, как устроено интервью, которое не врёт, что на самом деле утверждает JTBD, как превратить десять расшифровок в приоритизированный список проблем и как перепроверить их числами.
1. Зачем: цена решения, принятого не в тот момент
1.1. Стоимость информации падает во времени, стоимость ошибки растёт
Возьмём фичу стоимостью c = 8 человеко-недель. Решение «делать» принимается в момент t₀.
Если гипотеза неверна, вы узнаете об этом:
| Момент обнаружения | Что уже потрачено | Что уже нельзя отменить |
|---|---|---|
| 5 интервью, 1 неделя | ~1 чел.-неделя | ничего |
| прототип, 2 недели | ~3 чел.-недели | немного дизайна |
| релиз + A/B, 10 недель | ~10 чел.-недель | код, документация, обучение поддержки |
| через год в проде | ~10 + поддержка | обратная совместимость, ожидания клиентов |
Ключевая асимметрия: последняя строка никогда не обнуляется. Выпущенная и никому не нужная фича продолжает стоить денег вечно — её тестируют при каждом релизе, она усложняет интерфейс, её нельзя выключить, потому что «ей пользуются два крупных клиента».
Отсюда практический принцип, который в разных формулировках повторяют Марти Каган (SVPG, «Product Discovery») и Тереза Торрес (producttalk.org):
Discovery — это не этап перед разработкой. Это параллельный поток, который никогда не останавливается, и его продукт — не документ, а решения.
1.2. Четыре риска, и почему интервью закрывает только один
Каган раскладывает риск идеи на четыре независимых:
купят ли / будут ли пользоваться"] I --> U["Риск юзабилити
смогут ли разобраться"] I --> F["Риск реализуемости
сможем ли построить"] I --> B["Риск жизнеспособности
сойдётся ли с бизнесом, правом, брендом"] V --> M1["интервью, JTBD,
предпродажи, fake door"] U --> M2["прототип,
юзабилити-тест"] F --> M3["техническое прототипирование,
spike"] B --> M4["юнит-экономика,
legal, security"]
Интервью и JTBD-исследование бьют по риску ценности — самому дорогому и самому часто игнорируемому. Остальные три требуют других инструментов, и путать их нельзя: десять восторженных интервью ничего не говорят о том, окупится ли фича (это юнит-экономика) и получится ли её сделать за спринт.
1.3. Discovery как поиск, а не как сбор требований
Разница между «сбором требований» и discovery — в направлении причинности.
- Сбор требований: решение уже принято кем-то (заказчиком, CEO, крупным клиентом), задача продакта — записать его без искажений. Успех = точность записи.
- Discovery: решение ещё не принято, известна только желаемая перемена в поведении (outcome). Задача — найти множество проблем, мешающих этой перемене, и выбрать, какую атаковать. Успех = отброшенные варианты.
Если вы не отбрасываете варианты, вы не занимаетесь discovery — вы занимаетесь транскрибированием чужих решений.
2. Каркас: дерево возможностей
Тереза Торрес предложила структуру, которая не даёт скатиться в «хаотичный сбор пожеланий» — opportunity solution tree (producttalk.org/opportunity-solution-tree).
+15% к доле команд, дошедших
до второго проекта за 30 дней"] O --> P1["Возможность 1
«не понимаю, с чего начать
после первого проекта»"] O --> P2["Возможность 2
«не могу позвать коллег,
заявка висит у админа»"] O --> P3["Возможность 3
«первый проект — тестовый мусор,
стыдно показывать»"] P2 --> P2a["не знаю, кто админ"] P2 --> P2b["админ не понимает,
зачем это ему"] P2a --> S1["Решение A
показать имя админа
в модалке приглашения"] P2a --> S2["Решение B
кнопка «попросить доступ»
с готовым текстом"] P2b --> S3["Решение C
письмо админу с описанием
ценности для команды"] S2 --> E1["Эксперимент
fake door на 10% трафика,
метрика — CTR по кнопке"] S2 --> E2["Прототип + 5 юзабилити-тестов"] style O stroke-width:2px
Правила, которые делают дерево рабочим, а не декоративным:
- Корень — исход, а не фича. «Увеличить активацию до 40%», не «сделать онбординг».
- Возможности формулируются словами пользователя и всегда как проблема/потребность, а не как решение. «Нужен экспорт в Excel» — это решение, замаскированное под проблему; настоящая возможность за ним обычно «мне нужно показать отчёт руководителю, который не заходит в ваш продукт».
- Сравнивать решения можно только внутри одной возможности. Сравнивать «улучшить онбординг» с «добавить SSO» бессмысленно — это разные ветки. Формальные методы сравнения — в статье о приоритизации.
- Одна возможность за раз. Выбрали ветку — довели до эксперимента — вернулись.
Дерево — это ещё и защита от главной политической проблемы продакта: когда приходит «сделай вот эту фичу», вы не спорите, а спрашиваете «какую возможность она закрывает и почему она лучше двух других в этой же ветке».
3. Почему прямой вопрос не работает
3.1. Три механизма искажения
Вежливость. Люди не хотят вас расстраивать. На вопрос «полезная идея?» ответ «да» стоит собеседнику ноль и избавляет от неловкости. Роб Фицпатрик называет весь класс таких ответов «комплиментами» и предлагает считать их шумом, а не данными («The Mom Test»).
Плохая интроспекция о будущем. Человек честно не знает, что он сделает. Намерение и поведение расходятся систематически — разрыв «intention–behaviour» измеряется десятилетиями в социальной психологии; в продуктовом контексте это выглядит как «конечно, я бы платил 10 $» → конверсия 0.4%.
Вопрос как подсказка. «Насколько вам мешает, что нет тёмной темы?» создаёт проблему в момент задавания. До вопроса человек о ней не думал; после — у него есть мнение, и он его выскажет.
3.2. Правило: прошлое вместо будущего, конкретика вместо обобщения
Единственный надёжный источник — то, что человек уже сделал. Прошлое поведение не нужно предсказывать: оно случилось, у него есть дата, обстоятельства и потраченные деньги.
| Плохой вопрос (гипотетика/мнение) | Хороший вопрос (прошлое/поведение) |
|---|---|
| «Вы бы пользовались отчётами по команде?» | «Расскажите, как вы в последний раз готовили отчёт по команде» |
| «Это для вас важно?» | «Когда это последний раз случалось? Что вы тогда сделали?» |
| «Сколько бы вы заплатили?» | «Сколько вы сейчас на это тратите — деньгами, людьми, часами?» |
| «Вам нравится идея?» | «Что вы пробовали, чтобы это решить? Почему бросили?» |
| «Пользуетесь конкурентом X?» | «Покажите, что вы делали в X на прошлой неделе» |
Три сигнала, что проблема настоящая, а не выдуманная (Фицпатрик): человек уже тратит на неё деньги, уже построил костыль (таблица, скрипт, отдельный человек в штате), уже пробовал и бросил чужие решения. Костыль — самый сильный сигнал: его строят только тогда, когда боль превышает стоимость постройки.
3.3. Что делать с «комплиментами»
Комплимент нельзя записать в заметки как факт — его нужно обменять на конкретику:
- «Классная идея!» → «Спасибо. А когда у вас последний раз возникала эта ситуация?»
- «Мы бы точно взяли» → «Что должно произойти внутри компании, чтобы бюджет одобрили? Кто подписывает? Когда ближайшее окно?»
- «Обязательно напишите, когда будет готово» → «Давайте зафиксируем предзаказ / пилот на две недели / встречу с вашим финансистом».
Каждый шаг — это запрос обязательства (времени, репутации, денег). Отказ от обязательства при восторженных словах — это отрицательный результат, и это отличный результат: вы узнали правду за 40 минут.
4. Интервью: как оно устроено
4.1. Ход разговора
Ничего не продаём, 40 минут, можно записать?» R-->>P: Согласие на запись Note over P,R: Ноль слов о продукте и об идее P->>R: «Расскажите про последний раз, когда вы готовили отчёт» R-->>P: История, обрывочная и с обобщениями P->>R: «Это было в какой день? Что вы открыли первым?» Note right of P: Возврат к конкретному эпизоду,
чтобы включить память, а не мнение loop Пока история не станет по шагам R-->>P: Шаг истории P->>R: «И что дальше?» / «Почему именно так?» P->>N: Дословная цитата + маркер эмоции end R-->>P: «Ну там пришлось руками в Excel сводить, как обычно» P->>R: «Расскажите про это подробнее. Сколько это заняло?
Что было бы, если не сводить?» Note over P,R: Найден костыль — главный улов интервью P->>R: «Что вы пробовали, чтобы этого избежать?» R-->>P: Список отвергнутых альтернатив и причины P->>R: Запрос обязательства: «Готовы уделить час,
чтобы посмотреть прототип на следующей неделе?» R-->>P: Да / уклончивое нет — обе ветки информативны P->>N: Заметки в течение 15 минут после звонка
Обратите внимание, чего в диаграмме нет: демонстрации продукта, вопроса «а если бы мы сделали X», презентации. Всё это переводит разговор из режима «респондент вспоминает» в режим «респондент оценивает» — и включает вежливость.
4.2. Воронка вопросов
Внутри каждой темы двигайтесь сверху вниз, никогда наоборот:
1. Открывающий «Расскажите, как вы это делаете сейчас»
2. Эпизодический «Когда это было в последний раз? Что случилось?»
3. Уточняющий «И что вы сделали дальше? Кому написали?»
4. Причинный «Почему именно так, а не через отчёт в системе?»
5. Оценочный «Насколько это было проблемой по сравнению с ...?»
Правило пяти секунд молчания: после ответа сделайте паузу. Самая ценная часть ответа — вторая, она приходит после того, как человек закончил социально приемлемую формулировку.
4.3. Роли и гигиена
- Два человека на интервью: один ведёт, второй пишет дословные цитаты. Ведущий не может одновременно слушать и конспектировать без потерь.
- Дословность важнее пересказа. «Клиенту не хватает аналитики» — бесполезно. «Я каждый понедельник в семь утра выгружаю CSV и пересчитываю руками, потому что начальник смотрит только PDF» — из этого рождаются решения.
- Запись + расшифровка. Память искажает в сторону вашей гипотезы; это подтверждение задним числом, а не исследование.
- Разбор в тот же день, максимум на следующий: 3 главные цитаты, 1 сюрприз, 1 опровергнутое ожидание.
4.4. Сколько интервью нужно
Два разных вопроса, которые постоянно путают.
Вопрос А: «сколько нужно, чтобы найти проблемы?» Здесь работает логика насыщения.
Классическая оценка Нильсена для юзабилити: пять пользователей находят ~85% проблем
интерфейса при вероятности обнаружения одной проблемы p ≈ 0.31
(NN/g).
Формула: доля найденных проблем = 1 − (1 − p)ⁿ. Для проблемных интервью
насыщение обычно наступает на 8–15 разговорах в одном сегменте;
в качественной социологии типичная оценка — 9–17 интервью до насыщения.
Вопрос Б: «сколько нужно, чтобы оценить, у скольких людей эта проблема есть?» Здесь интервью не работают в принципе — нужен опрос или данные. Никакие 20 интервью не дадут вам «проблема у 40% пользователей»; они дают перечень проблем, а не доли.
Кривая насыщения считается тривиально — и её стоит рисовать по ходу исследования, чтобы решение «остановиться» было основано на данных, а не на усталости:
"""Кривая насыщения: сколько новых кодов приносит каждое следующее интервью."""
from typing import Iterable
def saturation_curve(coded: Iterable[set[str]]) -> list[tuple[int, int, int]]:
"""coded — список множеств кодов (тем), извлечённых из каждого интервью
в хронологическом порядке.
Возвращает список (номер интервью, новых кодов, всего кодов).
Сложность: O(sum |Sᵢ|) по времени, O(|U|) по памяти, где U — все коды.
"""
seen: set[str] = set()
out: list[tuple[int, int, int]] = []
for i, codes in enumerate(coded, start=1):
new = codes - seen
seen |= codes
out.append((i, len(new), len(seen)))
return out
interviews = [
{"ручной_excel", "отчёт_для_руководителя", "нет_прав_доступа"},
{"ручной_excel", "дубли_данных", "отчёт_для_руководителя"},
{"нет_прав_доступа", "ручной_excel", "срочность_по_понедельникам"},
{"ручной_excel", "отчёт_для_руководителя", "дубли_данных"},
{"ручной_excel", "срочность_по_понедельникам"},
{"ручной_excel", "отчёт_для_руководителя"},
]
for n, new, total in saturation_curve(interviews):
bar = "#" * new
print(f"интервью {n}: новых кодов {new} (всего {total}) {bar}")
# интервью 1: новых кодов 3 (всего 3) ###
# интервью 2: новых кодов 1 (всего 4) #
# интервью 3: новых кодов 1 (всего 5) #
# интервью 4: новых кодов 0 (всего 5)
# интервью 5: новых кодов 0 (всего 5)
# интервью 6: новых кодов 0 (всего 5)
# → три интервью подряд без новых кодов: насыщение по этому сегменту достигнуто
Важная оговорка: насыщение достигается внутри сегмента. Если вы поговорили с 15 менеджерами среднего звена и остановились, вы ничего не знаете о владельцах малого бизнеса — там кривая начнётся заново.
4.5. Кого звать и как не испортить выборку
- Сегмент определяется поведением, а не демографией. «Команды, которые за последний месяц создали ≥2 проекта и хотя бы раз выгружали CSV» — рабочее определение. «Маркетологи 25–40 лет» — не рабочее.
- Ошибка выживших — главный убийца качества: вы говорите только с активными пользователями продукта. Обязательно добавляйте отвалившихся и тех, кто не купил. Причина отказа информативнее причины покупки.
- Не платите слишком много. Крупное вознаграждение приводит профессиональных респондентов, которые дадут вам любые ответы. Лучший стимул — искренний интерес к их проблеме плюс обещание поделиться результатами.
- Не зовите знакомых и дружественных клиентов на проверку ценности: они максимально вежливы и максимально нерепрезентативны.
Карта того, какой метод что вообще способен рассказать:
Правило чтения карты: гипотезы рождаются слева, подтверждаются справа сверху. Интервью не доказывают ничего, кроме существования явления; аналитика и эксперименты не объясняют ничего, кроме масштаба.
5. Jobs To Be Done
5.1. Что JTBD утверждает на самом деле
Основной тезис: люди не «покупают продукты», они нанимают решение, чтобы продвинуться в конкретной ситуации к желаемому результату (Клейтон Кристенсен, «Know Your Customers’ Jobs to Be Done», HBR, 2016).
Из этого следуют два практических вывода, ради которых теория и нужна.
Вывод 1: конкурент — не тот, кто в вашей категории. Настоящий конкурент — всё, что человек может нанять на ту же работу, включая «ничего не делать» и «сделать руками». У Slack конкурент — не Teams, а совещание и почта. У онлайн-курса — не другой курс, а YouTube, ментор на работе и прокрастинация.
Вывод 2: категории пользователей по демографии почти бесполезны. Один и тот же человек в разных ситуациях нанимает разные продукты на разные работы. Стабильна не персона, а связка «ситуация + мотивация + желаемый результат».
5.2. Две школы, и почему их путают
| JTBD-as-Progress (Кристенсен, Моэста, Клемент) | ODI / Outcome-Driven Innovation (Тони Ульвик) | |
|---|---|---|
| Что такое job | стремление к прогрессу в жизненной ситуации | функциональная задача, разложенная на шаги |
| Метод | switch-интервью о моменте покупки | job map + количественный опрос |
| Выход | нарратив, силы, таймлайн | список outcome-высказываний с числами |
| Где сильно | понять «почему» и найти неочевидные конкуренты | приоритизировать сотни потребностей |
| Источник | jtbd.info, «Demand-Side Sales 101» | strategyn.com, «Jobs to be Done: Theory to Practice» |
Обе школы полезны, но отвечают на разные вопросы. Не пытайтесь мерить силы прогресса в анкете и не пытайтесь вытащить нарратив из опроса на 500 человек.
5.3. Формат job story
Классические user story («как маркетолог, я хочу…») теряют главное — контекст. Job story (формат Intercom) начинается с ситуации:
Когда <ситуация>,
я хочу <мотивация>,
чтобы <ожидаемый результат>.
Плохо: «Как менеджер, я хочу дашборд, чтобы видеть метрики». Хорошо: «Когда в понедельник утром руководитель просит статус по проектам, я хочу за 5 минут собрать цифры, которым доверяю, чтобы не выглядеть неподготовленным и не тратить вечер воскресенья».
Из первого варианта следует «сделать дашборд». Из второго — минимум четыре разных решения: дашборд, еженедельная рассылка в 8:00, экспорт-ссылка для руководителя, Slack-бот. И решения теперь можно сравнивать по тому, насколько хорошо они закрывают ситуацию. Дальше эти формулировки становятся входом для требований и user stories.
5.4. Четыре силы прогресса
Боб Моэста описал механику переключения: человек меняет решение, только когда сумма сил «за» перевешивает сумму сил «против».
Практический смысл: продуктовая работа — не только усиливать PULL (рассказывать, как у нас хорошо). Чаще выигрыш дают снятие тревоги и разрушение привычки:
| Сила | Как выглядит в реальности | Что с ней делает продукт |
|---|---|---|
| Push | «отчёт занимает целый вечер каждую неделю» | усилить осознание — показать цифру потерь |
| Pull | «хочу собирать отчёт за 5 минут» | демо на данных клиента, а не абстрактный маркетинг |
| Тревога | «а если данные разъедутся», «а если не разберусь» | импорт за вас, откат, пилот, гарантия, живой человек |
| Привычка | «мой Excel уже настроен, я его знаю» | миграция шаблонов, режим совместимости, экспорт в привычный формат |
Практически всегда самая недооценённая клетка — тревога. Команды вкладывают в маркетинг (Pull), когда воронка ломается о «страшно переносить данные».
5.5. Switch-интервью: таймлайн покупки
Ключевой инструмент JTBD — восстановление хронологии решения, а не обсуждение продукта.
Что даёт этот таймлайн, чего не даёт обычное интервью:
- Триггерное событие — точка, где формируется спрос. Это готовый таргетинг: если люди начинают искать после смены руководителя, вы знаете, кому и когда показываться.
- Слова активного поиска — это ваши поисковые запросы и заголовки на лендинге. Люди ищут не «платформа управления проектами», а «как быстро собрать статус по проектам».
- Отброшенные варианты — реальная карта конкурентов, включая «остаться в Excel».
- «От чего отказались» — то, что продукт вытеснил; это и есть измеримая ценность.
6. От расшифровок к решениям: синтез
Самый недооценённый этап. Десять расшифровок без синтеза — это ноль знания; они лежат в Notion, и каждый помнит из них то, что подтверждает его позицию.
6.1. Кодирование
Тематический анализ в три прохода:
- Открытое кодирование: размечаете каждую содержательную фразу коротким кодом
близко к словам респондента (
руками_сводит_в_excel,боится_что_данные_разъедутся). Никакой интерпретации на этом шаге. - Осевое кодирование: группируете коды в темы (
костыли_вокруг_отчётности). - Отбор: темы, встречающиеся у ≥N респондентов и связанные с вашим исходом, становятся возможностями в дереве.
Простой инструмент, чтобы увидеть картину целиком, — матрица «код × респондент». Считать её вручную бессмысленно, а кода тут на двадцать строк:
"""Матрица код×респондент: частота, покрытие сегментов и кандидаты в возможности."""
from collections import defaultdict
# после кодирования: кто какие коды упоминал и из какого сегмента
transcripts = {
"R1": {"segment": "SMB", "codes": {"ручной_excel", "отчёт_руководителю", "страх_миграции"}},
"R2": {"segment": "SMB", "codes": {"ручной_excel", "дубли_данных"}},
"R3": {"segment": "ENT", "codes": {"нет_прав_доступа", "отчёт_руководителю", "страх_миграции"}},
"R4": {"segment": "SMB", "codes": {"ручной_excel", "отчёт_руководителю"}},
"R5": {"segment": "ENT", "codes": {"нет_прав_доступа", "аудит_изменений"}},
"R6": {"segment": "SMB", "codes": {"ручной_excel", "отчёт_руководителю", "дубли_данных"}},
}
freq: dict[str, int] = defaultdict(int)
by_segment: dict[str, set[str]] = defaultdict(set)
for rid, t in transcripts.items():
for code in t["codes"]:
freq[code] += 1
by_segment[code].add(t["segment"])
n = len(transcripts)
print(f"{'код':<22}{'упом.':>6}{'доля':>8}{'сегменты':>14}")
for code, cnt in sorted(freq.items(), key=lambda kv: -kv[1]):
segs = ",".join(sorted(by_segment[code]))
print(f"{code:<22}{cnt:>6}{cnt / n:>8.0%}{segs:>14}")
# код упом. доля сегменты
# отчёт_руководителю 4 67% ENT,SMB
# ручной_excel 4 67% SMB
# страх_миграции 2 33% ENT,SMB
# дубли_данных 2 33% SMB
# нет_прав_доступа 2 33% ENT
# аудит_изменений 1 17% ENT
#
# Сложность: O(Σ|codes|) по времени, O(|codes| + |segments|) по памяти.
Читать это надо так: отчёт_руководителю встречается в обоих сегментах —
кандидат в «общую» возможность. нет_прав_доступа живёт только в ENT —
это возможность для конкретного сегмента, и решение будет другим.
Критическое предупреждение. Столбец «доля» здесь — доля среди тех, кого вы позвали, а не среди пользователей. При n = 6 и неслучайной выборке 67% не значат ничего, кроме «встречается часто у этих шестерых». Использовать это число в презентации для руководства как «у 67% пользователей проблема с Excel» — это подлог. Проценты по интервью — эвристика для себя, не аргумент для других.
6.2. Приоритизация возможностей
Когда возможностей набралось два десятка, нужен способ выбрать. Быстрая версия — двумерная карта: как часто ситуация случается × насколько она болезненна.
Более строгий вариант из ODI — opportunity score Ульвика. Респондентов просят
оценить по 10-балльной шкале важность результата (I) и удовлетворённость текущим
решением (S); возможность тем больше, чем важнее и хуже удовлетворено:
opportunity = I + max(0, I − S)
Смысл формулы: важное и плохо решённое (I=9, S=3 → 15) обгоняет важное и уже
хорошо решённое (I=9, S=8 → 10) и неважное (I=3, S=1 → 5).
Значения выше ~12 обычно считают недообслуженными потребностями.
Разбор шкал и других формул сравнения — в статье о
приоритизации.
7. Проверка проблемы числами
Интервью говорят, что явление существует. Чтобы понять масштаб, нужны данные. Это самый пропускаемый шаг discovery — и самый дешёвый: обычно данные уже есть.
7.1. Ищите следы костыля в логах
Если респонденты сводят данные руками в Excel, в продукте останется след: повторяющиеся выгрузки, одни и те же фильтры, работа по понедельникам утром.
-- Сколько аккаунтов регулярно выгружают CSV — след ручной сводки отчётов.
-- Определение "регулярно": >= 3 недель из последних 8 с хотя бы одной выгрузкой.
WITH weekly AS (
SELECT
account_id,
date_trunc('week', event_ts) AS wk,
count(*) AS exports
FROM events
WHERE event_name = 'report_exported'
AND event_ts >= now() - interval '8 weeks'
GROUP BY 1, 2
),
regular AS (
SELECT account_id, count(*) AS active_weeks, sum(exports) AS total_exports
FROM weekly
GROUP BY 1
HAVING count(*) >= 3
)
SELECT
count(*) AS accounts_with_workaround,
(SELECT count(DISTINCT account_id) FROM events
WHERE event_ts >= now() - interval '8 weeks') AS active_accounts,
round(100.0 * count(*) / nullif(
(SELECT count(DISTINCT account_id) FROM events
WHERE event_ts >= now() - interval '8 weeks'), 0), 1) AS share_pct,
round(avg(total_exports), 1) AS avg_exports_per_account
FROM regular;
Дополнительные запросы, которые почти всегда что-то находят:
- обращения в поддержку с текстовым поиском по словам из интервью;
- отвал в конкретном шаге воронки, о котором рассказывали респонденты;
- «повторение действия N раз подряд» — почти всегда признак отсутствующей массовой операции.
Как строить такие метрики системно — в статьях о метриках и о продуктовой аналитике. Если запросы приходится писать самому и данные лежат в сыром виде — базовые понятия конвейеров описаны в треке data engineering.
7.2. Опрос: сколько людей нужно и как читать результат
Опрос отвечает ровно на один вопрос: «какая доля сегмента X сталкивается с Y». Оценка доли — это доверительный интервал, и его надо считать. Нормальное приближение врёт на малых выборках и крайних долях; используйте интервал Вилсона.
"""Доверительный интервал для доли (Вилсон) и необходимый размер выборки."""
import math
Z95 = 1.959963985
def wilson_interval(successes: int, n: int, z: float = Z95) -> tuple[float, float]:
"""Интервал Вилсона для доли. Корректен при малых n и p близких к 0/1.
Сложность O(1)."""
if n == 0:
return (0.0, 1.0)
p = successes / n
denom = 1 + z * z / n
centre = (p + z * z / (2 * n)) / denom
half = z * math.sqrt(p * (1 - p) / n + z * z / (4 * n * n)) / denom
return (max(0.0, centre - half), min(1.0, centre + half))
def sample_size(margin: float, p_expected: float = 0.5, z: float = Z95) -> int:
"""Сколько ответов нужно для полуширины интервала не больше margin.
p=0.5 — консервативная оценка (максимум дисперсии)."""
return math.ceil(z * z * p_expected * (1 - p_expected) / (margin * margin))
for k, n in [(8, 12), (40, 60), (200, 300), (2000, 3000)]:
lo, hi = wilson_interval(k, n)
print(f"{k}/{n}: p̂={k / n:.0%}, 95% CI = [{lo:.0%}, {hi:.0%}], ширина {hi - lo:.0%}")
print("нужно ответов для ±10%:", sample_size(0.10)) # 97
print("нужно ответов для ±5% :", sample_size(0.05)) # 385
print("нужно ответов для ±3% :", sample_size(0.03)) # 1068
# 8/12: p̂=67%, 95% CI = [39%, 86%], ширина 47% ← из этого нельзя делать выводы
# 40/60: p̂=67%, 95% CI = [54%, 77%], ширина 23%
# 200/300: p̂=67%, 95% CI = [61%, 72%], ширина 11%
# 2000/3000: p̂=67%, 95% CI = [65%, 68%], ширина 3%
Первая строка — ровно та ситуация, когда команда после 12 интервью заявляет «у двух третей пользователей эта проблема». Честный интервал — от 39% до 86%: разница между «нишевая история» и «главная боль продукта». Вывод недопустим.
И отдельно: уменьшение случайной ошибки не лечит смещение выборки. Опрос на 3000 человек, разосланный только активным пользователям, даст узкий интервал вокруг неправильного числа. Точность ≠ корректность.
7.3. Проверка спроса до строительства
Когда проблема подтверждена, а решение ещё нет, спрос проверяют дешёвыми пробами:
| Проба | Что измеряет | Чем опасна |
|---|---|---|
| Fake door / кнопка-заглушка | реальный интерес в контексте продукта | бьёт по доверию, нужна честная заглушка и малый трафик |
| Лендинг + платный трафик | готовность оставить контакт | измеряет качество лендинга не меньше, чем спрос |
| Concierge — делаем руками за клиента | ценность результата без продукта | не масштабируется, легко принять энтузиазм за спрос |
| Предпродажа / письмо о намерениях | деньги и подпись — сильнейший сигнал | медленно, работает в B2B |
| Wizard of Oz — интерфейс есть, внутри люди | поведение при полном UX | дорого держать |
Порядок силы сигнала: деньги > потраченное время > оставленный контакт > клик > слова. Планируйте пробу так, чтобы результат нельзя было толковать двояко: критерий успеха («≥12% из увидевших кнопку нажмут её») фиксируется до запуска. Подробно — в статье про MVP и эксперименты.
8. Гипотеза как единица работы
8.1. Формулировка
Гипотеза, которую нельзя опровергнуть, бесполезна. Рабочий шаблон:
Мы верим, что <изменение> для <сегмент, определённый поведением>
приведёт к <измеримый эффект на метрике>.
Мы поймём, что правы, если <метрика> изменится с <baseline> до <порог>
за <срок> при <объём выборки>.
Если этого не произойдёт, мы <что конкретно сделаем>.
Пример: «Мы верим, что кнопка “попросить доступ у админа” в модалке приглашения для пользователей без прав на приглашение увеличит долю команд с ≥2 участниками на 7-й день. Правы, если доля вырастет с 22% до ≥27% за 3 недели при ≥4000 команд в каждой ветке. Если нет — отказываемся от ветки “не знает, кто админ” и переходим к возможности “админ не понимает ценности”».
Последняя строка — обязательная. Без заранее описанного действия при провале команда всегда найдёт способ объяснить отрицательный результат («трафик был плохой», «надо было ярче кнопку»).
8.2. Жизненный цикл
найдены следы в логах Наблюдение --> Отброшено: единичный случай,
не связан с исходом Возможность --> Гипотеза: сформулирован критерий
и порог успеха Возможность --> Заморожена: важна, но не в текущем
квартальном фокусе Гипотеза --> Проверяется: выбран дешёвейший тест
прототип / fake door / A-B Проверяется --> Подтверждена: порог достигнут Проверяется --> Опровергнута: порог не достигнут Проверяется --> Неопределённо: мало данных
или сломан замер Неопределённо --> Проверяется: чиним замер,
добираем выборку Опровергнута --> Возможность: возвращаемся
к другому решению ветки Подтверждена --> ВРазработку ВРазработку --> Выпущено Выпущено --> Измерено: сравниваем с прогнозом Измерено --> [*] Заморожена --> Возможность: сменился фокус Отброшено --> [*]
Две дуги здесь важнее остальных:
Опровергнута → Возможность, а не→ [*]. Провалившееся решение не закрывает проблему; проблема остаётся, а вы теперь знаете о ней больше.Выпущено → Измерено. Без неё команда никогда не узнаёт, была ли она права — и точность прогнозов не растёт годами.
8.3. Ведите журнал решений
Минимальная запись на каждое продуктовое решение (можно yaml в репозитории, можно база в Notion — важен факт, а не инструмент):
id: OPP-2026-014
исход: активация команд, доля с 2+ участниками на 7-й день
возможность: "не может позвать коллегу — нужен админ"
свидетельства:
интервью: [R3, R7, R11, R12] # ссылки на расшифровки
цитата: "я написал в общий чат, кто у нас админ, и на этом всё заглохло"
данные: "18% команд имеют >=1 отклонённое приглашение за 30 дней"
гипотеза: "кнопка 'попросить доступ' поднимет долю команд 2+ с 22% до 27%"
тест: A/B, 3 недели, 4000 команд на ветку
результат: "22.4% -> 23.1%, p=0.21 — не подтверждена"
решение: "ветка закрыта, переходим к 'админ не понимает ценности'"
дата: 2026-05-14
Через год такой журнал становится самым ценным активом команды: он показывает, какие классы гипотез у вас систематически не сбываются, и калибрует интуицию. Заодно он прекращает споры «мы же это уже пробовали» — пробовали, вот запись, вот цифры.
9. Как это выглядит в проде
Ритм вместо проектов. Тереза Торрес формулирует минимальный порог непрерывного discovery: минимум одно интервью в неделю, которое проводит продуктовая тройка (продакт, дизайнер, инженер), а не отдельный «отдел исследований» («Continuous Discovery Habits»). Причина в том, что знание, полученное исследователем и переданное документом, теряет ~90% полезной части: детали, интонацию, сомнения.
Постоянный поток респондентов. Разовый набор занимает недели и убивает регулярность. Рабочие способы: авто-приглашение внутри продукта после релевантного действия («вы только что третий раз выгрузили отчёт — поговорим 20 минут?»), очередь из продаж и поддержки, панель постоянных участников.
Репозиторий исследований. Расшифровки, теги, цитаты в одном поисковом месте. Без него организация переспрашивает одно и то же каждые полгода и «открывает» уже известные проблемы.
Инженеры на интервью. Самый дешёвый апгрейд качества решений: инженер, слышавший боль своими ушами, предлагает варианты, до которых продакт не додумается, и перестаёт спорить о приоритетах.
Discovery не останавливает delivery. Это два параллельных потока: пока команда строит подтверждённое, discovery готовит следующее. Если discovery — «фаза перед спринтом», он первым и вылетит под давлением сроков.
10. Типичные ошибки
- Питчить вместо слушать. Как только вы рассказали идею, интервью закончилось — дальше вы слышите вежливость.
- Спрашивать о будущем. «Будете пользоваться?» — данные нулевой ценности.
- Считать проценты по интервью. «6 из 9 сказали» — это не 67% рынка (см. §7.2).
- Говорить только с довольными. Отвалившиеся и не купившие знают больше.
- Один сегмент под видом всех. Насыщение внутри сегмента не переносится на другие.
- Записывать выводы, а не цитаты. «Нужна аналитика» — потерянная информация.
- Discovery как разовая фаза. Через два месяца выводы протухают, а команда продолжает ссылаться на них ещё год.
- Подтверждающий поиск. Вы уже решили строить фичу и ищете, кто это одобрит. Противоядие: до интервью письменно зафиксировать, какой ответ вас переубедит.
- Ловушка «клиент попросил». Просьба — это уже решение клиента; ваша работа — вернуться на шаг назад, к его ситуации.
- Игнорировать данные, которые уже есть. Половина гипотез проверяется одним SQL за час — до всяких интервью.
- Оценивать discovery по количеству интервью. Метрика — количество изменённых решений, а не проведённых разговоров.
- Отсутствие критерия провала. Гипотеза без заранее записанного порога всегда «частично подтверждается».
11. Мини-итог
- Discovery закрывает риск ценности — самый дорогой из четырёх; остальные требуют других инструментов.
- Прямые вопросы о будущем и о мнении систематически врут. Спрашивайте о прошлом поведении: что делали, когда, сколько заплатили, какой костыль построили.
- Комплимент — не данные. Обменивайте его на обязательство: время, деньги, репутация.
- JTBD переводит фокус с персоны на ситуацию + мотивацию + результат, находит настоящих конкурентов и через четыре силы объясняет, почему люди не переключаются. Чаще всего мешает тревога, а не отсутствие функций.
- Синтез обязателен: кодирование → темы → возможности в дереве. Проценты по интервью — эвристика для себя, не аргумент для других.
- Масштаб проблемы проверяется данными и опросом с доверительным интервалом, а не количеством интервью.
- Гипотеза = изменение + сегмент + метрика + порог + срок + что сделаем при провале.
- Ритм важнее размаха: одно интервью в неделю всей тройкой годами бьёт квартальное исследование на 40 человек.
Источники
- Rob Fitzpatrick, «The Mom Test» — momtestbook.com
- Teresa Torres, «Continuous Discovery Habits» и дерево возможностей — producttalk.org
- Marty Cagan, «Inspired»; четыре риска и product discovery — svpg.com/product-discovery
- Clayton Christensen et al., «Know Your Customers’ Jobs to Be Done», HBR 2016 — hbr.org
- Bob Moesta, «Demand-Side Sales 101» — demandsidesales.com
- Alan Klement, «What is Jobs to be Done» — jtbd.info
- Tony Ulwick, Outcome-Driven Innovation и opportunity score — strategyn.com
- Steve Blank, «The Four Steps to the Epiphany» / customer development — steveblank.com
- Ash Maurya, «Running Lean» — leanstack.com
- Erika Hall, «Just Enough Research» — abookapart.com
- NN/g, «Why You Only Need to Test with 5 Users» — nngroup.com
- NN/g, «When to Use Which User-Experience Research Methods» — nngroup.com
- Strategyzer, Value Proposition Canvas — strategyzer.com
- E. B. Wilson, «Probable Inference, the Law of Succession, and Statistical Inference», JASA 1927 — происхождение интервала Вилсона
Что дальше
Проблема найдена и подтверждена. Следующий вопрос — как измерять, что решение работает: какие метрики выбрать, что такое North Star и почему без юнит-экономики любая продуктовая гипотеза остаётся наполовину непроверенной.