Радар можливостей для продуктової команди B2B-компанії

Щоранку о 05:00 за UTC радар читає весь ринок B2B-компанії – 66 живих джерел із 74, від запитів її власних клієнтів до тендерів, регуляторів, конкурентів, науки й фахової преси кожної галузі, з якою вона працює, – порівнює кожен сигнал з історією його джерела і ще до початку робочого дня кладе на тацю картки можливостей: про потреби, які покупці мають уже зараз, і про бізнес-моделі, що тільки складаються. Якщо класти на запис десять хвилин, на саме лише це читання знадобилося б четверо-п'ятеро аналітиків на повний день.

час на побудову
~5 тижнів розробки · 319 комітів · працює щоранку · ним користується продуктова команда
вперше опубліковано
востаннє оновлено

В одному абзаці

Ринок B2B-компанії записує свої потреби задовго до того, як про них заговорять на дзвінку з продажником, – і записує в стількох місцях, що вашій команді не стане часу все це прочитати. Цей радар читає весь ринок. Щоранку о 05:00 за UTC він переглядає 66 живих джерел – власних клієнтів компанії, а поряд тендери, регуляторів, конкурентів, науку й фахову пресу кожної галузі, з якою вона працює, – і загалом із 74 джерел уже прочитав 9 114 записів, з історією аж від 2018 року. За моєю оцінкою, на запис іде десять хвилин – прочитати, оцінити, занотувати, хто чого потребує, – отже, це близько 1 500 годин роботи аналітика. Звичайний тиждень приносить 1 070 нових записів, а з ними ще майже 180 годин: четверо-п’ятеро аналітиків, які нічим іншим не займаються. Кожен сигнал радар порівнює з історією його джерела, тож уранці нагору спливає нове і те, що набирає силу, а споріднені сигнали складаються в картки можливостей – про потреби, які покупці мають уже сьогодні, і про бізнес-моделі, що тільки починають вимальовуватися. До початку робочого дня ці картки вже лежать на таці. Я збудував радар приблизно за п’ять тижнів і 319 комітів, і від середини вересня продуктова команда бере картки саме з неї.

0 джерела
66 читаються щоранку · голос клієнтів і голос ринку
0 записів
прочитано й оцінено · історія від 2018 року
~0 годин аналітика на тиждень
1 070 записів звичайного тижня · по 10 хвилин на кожен
0 карток
картки можливостей · із 4 258 сигналів і 812 тем

Проблема мовою бізнесу

Наступний напрям бізнесу для B2B-компанії зазвичай записаний раніше, ніж клієнт попросить про нього прямо, – у нотатках про програні угоди, у тендерах, під які покупець уже заклав гроші, у нових правилах, у вакансіях конкурентів, у дослідницьких грантах і у фаховій пресі галузей, з якими компанія працює. Заважає обсяг: понад тисячу записів за звичайний тиждень, десятки джерел і багато мов. Коли ринок читають руками, його читають вибірково, а вибірка пропускає саме ледь помітні ранні сигнали – ті, що вказують на бізнес-моделі, які тільки народжуються. Того дня, коли почалася ця робота, люди, які обирають наступну ставку, вибирали з трьох справжніх карток на своїй дошці гіпотез, і кожну з них написали від руки.

як ринок доходить до людей, які обирають наступну ставку до і після радара
без радара
  • Ринок читають вибірково – кілька стрічок, річний звіт, найгучніший клієнт.
  • Запит у CRM, тендер за кордоном і нове правило регулятора ніколи не зустрічаються в одному місці.
  • «Попит росте» – це відчуття, бо немає бази, з якою його порівняти.
  • Читання ринку з'їдає години тих самих людей, які мали б ухвалювати рішення.
  • Через місяць команда вже не скаже, на чому трималася ідея.
з радаром
  • Щоранку о 05:00 за UTC прочитано 66 джерел – і голос клієнтів, і голос ринку.
  • Слова клієнта й ринковий запис опиняються на одній картці, коли говорять про ту саму потребу.
  • Кожен сигнал – це частота порівняно з історією свого джерела: з'явився вперше, посилюється, слабшає; а джерело без історії так і каже.
  • Читання зроблене ще до приходу рецензентів, і їхня година йде на рішення про картки.
  • Кожна картка веде до записів, з яких її складено, – таких, якими вони були в день її появи.

Кожен запис, щодня, на тлі власного минулого

Прочитати весь ринок – це насамперед інженерна задача. Стрічка тримає лише кілька десятків останніх записів – одне галузеве видання за один запуск дало 50 нових, – тож радар читає щодня, поки нічого не прокрутилося. Джерело, щойно його вмикають, приносить із собою свою історію, аж до 2018 року, де вона є: назвати сигнал новим можна лише на тлі минулого. А кожен новий різновид джерел заходить через фільтр, перевірений ще до запуску, тож поле зору ширшає, а на ранкову добірку не шкода вашої години.

Другий хід перетворює обсяг на сигнал. Кожен запис стає впорядкованим сигналом – хто чого потребує, з цитатою й датою, – і отримує мітку за частотою порівняно з історією свого джерела: NEW, STRENGTHENING, WEAKENING чи CONTRADICTING. Джерело без історії отримує UNBASELINED і ніколи – NEW, тож неархівована стрічка не видасть увесь свій запас за відкриття. Картці потрібні двоє незалежних свідків, а свідок – це той, хто говорить: три пресрелізи однієї пресслужби – це один свідок. Картки, що спираються лише на власних клієнтів компанії, мають окремий потік, тож рецензент бачить поруч, чого покупці просять уже сьогодні і про що ринок починає просити сам.

картки, що спираються лише на власних клієнтів компанії виміряно 12 вересня · 44 з 51 картки в черзі не мали жодного свідка ззовні
критерій жорсткий фільтр · свідок ззовні обов'язковий два потоки · вирішує людина обрано
картки, викинуті з черги 44 з 51 · 86% жодної
«клієнт просив, а ми не змогли» відсіюються першими лишаються, у власному потоці
рецензент бачить усе ні так

Три сесії в машинному відділенні

Робочий напарник, який спершу читає правила

Кожна сесія з цим радаром – це розмова між мною і Claude Code: я приношу задачу, а він читає код, звертається до живої бази й випускає виправлення за тими самими правилами, яких радар тримається сам.

У кожну сесію йдуть два файли. CLAUDE.md – це 1 332 рядки, і більшість правил у ньому несе з собою збій, який їх породив, тож наступна сесія успадковує разом із правилом і причину. Нотатка першого дня тримає постановку задачі й межі, за які машина не заходить: оцінки на етапах відбору, рух карток і речення гіпотези належать людям; порожня видача – ще не доказ відсутності; цифра впливу без процитованого джерела отримує позначку «неперевірено».

Із живою базою сесії поводяться так, як радар – із доказами. Кожен запит іде в транзакції лише для читання, яку потім відкочують, а кожна зміна того, що радар читає чи вважає правдою, потрапляє в git як міграція – там наступна сесія прочитає, чому так.

Ширше поле зору і фільтр, перевірений ще до запуску

Публічний тендер – найсильніший доказ, який буває в радара: покупець уже заклав гроші під свою потребу. Дослідження перед цим розширенням відправило по агенту на кожен із 24 порталів-кандидатів – перевірити API, файл robots і умови використання, – а агент-скептик ще раз перевіряв кожну знахідку. Читати варто було сім національних порталів. Їхні збирачі писалися в дев’яти паралельних гілках, а потім один інтегратор звів їх докупи.

Доки перед витягом сигналів не з’явився фільтр, збирачі стояли вимкнені. Кожен тендер називає покупця, тож без фільтра оренда авто чи замовлення офісних меблів пройшли б у ринковий потік як свідки ззовні. Фільтр будували двоє агентів паралельно, ще троє атакували його з різних боків, а шостий виправляв знайдене – тринадцять із чотирнадцяти справжніх проблем закрили ще до першого коміту. На оголошеннях, які дослідження вже розмітило, фільтр погоджувався з розміткою так само часто, як дві незалежні розмітки самого дослідження між собою, – і лише тоді я сказав «вмикай».

Для продуктової команди поле зору за одне пообіддя розширилося на шість національних порталів, і тепер тендер стає карткою завдяки тому, що він купує.

Відрізнити новий бізнес від старого – суддя без права голосу, доки люди не погодяться

Радар для нового бізнесу мусить спершу знати старий. Більшість карток у ранній черзі просили того, що компанія вже продає, і картка не мала як про це сказати. Тепер окремий суддя звіряє кожну картку з реєстром можливостей компанії – 91 рядок, і кожен я переглянув сам, – і каже, чи потреба вже закрита, закрита частково, досі відкрита чи раніше закривалася послугою, яку відтоді згорнули. Найцікавіший саме останній вердикт: коли росте попит на вміння, яке компанія раніше продавала лише разовими проєктами, це продукт, який просить, щоб його нарешті зробили. Права голосу суддя поки не має: рецензент бачить його вердикт лише як підказку.

Я оцінюю суддю просто на картці – «Right» чи «Wrong…» – не бачачи чужих оцінок. Після двадцяти оцінок згода трималася на 70%, але показовішим за середнє був напрямок помилок: п’ять промахів із шести применшували те, що компанія вміє.

Сесія зупинилася після одного виправлення, виміряного на оцінених картках, і одного досліду, який відкинули, коли він нічого не змінив; третя здогадка була б уже вгадуванням. Доки мої оцінки не скажуть іншого, суддя лишається підказкою.

сеанс звʼязку мої нотатки до дизайну помічника · 28 вересня

«Ми це вже робимо» – тут суддя знає насправді гірше, ніж мої колеги, які щодня наші послуги або продають, або покращують. Я би оцінив точність судді у 80%, а точність колег – у 90–95%, тож суддя має важити менше, ніж рішення людей.

Керівник відділу продажів уже спирається на цей вердикт, щоб швидше відхиляти картки, – тому суддя мусить спершу довести свою точність на моїх оцінках.

«Надіслано» означає «на дошці»

Надіслати картку – найважливіше рішення в усьому ланцюжку, і радар лишає його людині, тож кнопка мусить казати правду. Того ранку, коли я надіслав першу картку, портал написав «надіслано», записав моє ім’я й запропонував скасувати – а дошка лишилася порожньою.

Причина ховалася поза кодом, у проксі, який по-різному поводився із запитами на створення і на читання, – тому кожна перевірка, що лише читала, проходила. Виправлення поставило Jira першою, а рішення – другим, тож тепер портал може написати «надіслано», тільки коли картка вже існує.

Проба, яка знайшла причину, була нешкідливою за задумом: запит на створення без заголовка Jira перевіряє повністю й відхиляє, тож він підтверджує кожне інше поле, а дошка команди лишається чистою.

Для людей, які ухвалюють рішення, «надіслано» стало фактом, на який можна покластися, а журнал рішень – записом, який можна перевірити: кожне надсилання, відмову й повернення підписано ім’ям того, хто це зробив.

Що працює щоранку

Робота починається щодня о 05:00 за UTC, тож черга готова ще до початку робочого дня. Десять кроків ідуть у продуманому порядку: першими читаються рішення з дошки, щоб наступні кроки бачили свіжі мітки, а троє суддів ідуть останніми, щоб збій будь-кого з них не зачепив решти.

від усього ринку до ранкової добірки без людей – доки людина не натисне «надіслати»
  1. ● 01
    74 джерела
    66 увімкнено · 9 114 записів · читання від 05:00 за UTC
  2. ● 02
    4 258 сигналів
    хто чого потребує, з цитатою й датою · частота порівняно з історією джерела
  3. ● 03
    812 тем
    сигнали, зібрані за змістом · ті самі факти дають ті самі теми
  4. ● 04
    ранкова добірка
    320 ідей · 135 запропоновано, 177 відсіяно, 8 злито · два потоки
  5. ● 05
    дошка
    «надіслати» натискає рецензент зі списку, вхід через Slack · 106 рішень на сьогодні · наслідки читаються наступного ранку
  • за розкладом, без людини
  • один ключ із вузькими правами

Власні клієнти компанії – це третина того, що читає радар; решта дві третини – ринок, який розмовляє сам із собою.

хто говоритьзаписівщо з цього дізнаються ті, хто обирає наступну ставку
власні клієнти компанії – запити в CRM, нотатки про угоди й продажі, служба підтримки, робочий чат≈3 300чого покупці просять сьогодні і що компанія втратила, бо цього не мала
фахова преса галузей, з якими компанія працює≈2 350куди рухаються ці галузі, ще до того як це стане запитом
річні галузеві звіти – 1 305 процитованих фактів із 99 звітів≈1 300проблеми, які галузь виміряла в себе сама · контекст, ніколи не свідок
конкуренти – їхні блоги, новини й довідкові сторінки≈740куди суперники роблять ставки
наукові статті й публічне фінансування досліджень≈590що стає можливим і хто платить, щоб це з’ясувати
публічні тендери≈420потреби, під які покупець уже заклав гроші
регулятори й реєстри – правові акти, стягнення≈390нові обов’язки й попит, який вони народжують
вакансії≈30на які вміння суперники шукають людей

Кожну картку можна прочитати від кінця до початку, і сторінка картки стежить, щоб це читання лишалося чесним. Ось слід справжньої картки від 8 вересня, без її теми:

одна картка – назад до першого запису що показує сторінка картки
  1. ● 01
    картка
    твердження · у кого проблема · ранг і журнал фільтрів записано на ній
  2. ● 02
    її машинне відділення
    кожне число заморожено 8 вересня, 10:59 · промпт extract_signal v4 · модель закріплено
  3. ● 03
    заморожені докази · 4
    "the evidence as it stood when the card was written"
  4. ● 04
    кожен сигнал
    цитата, організація, дата · версія промпту, що його прочитала
  5. ● 05
    перший запис
    джерело, посилання, час збору · збережена копія поряд з оригіналом
судді – без права голосу, доки їх не відкалібрують кожен лише читає; жоден поки нічого не відсіює
  1. ◐ 01
    покриття
    чи компанія вже це робить – або робила раніше? · люди оцінюють суддю
  2. ◐ 02
    підтвердження
    чи видно цю потребу ззовні? · 10 274 перевірки
  3. ◐ 03
    річні звіти
    чи вимірював цю проблему галузевий звіт? · поріг збігу перевірено до запуску

Увесь цей архів можна ще й просто розпитати. Помічник-дослідник, якого команда питає в Slack, відповідає з того самого сховища через набір інструментів, що лише читають, – пошук за словами й за змістом, схожі картки, історія компанії, кроки конкурентів, тендери, сліпі плями, – щонайбільше дванадцять викликів за один хід. Усе, що потребує з’єднання таблиць, він рахує в пісочниці, де лежить один зріз даних і більше нічого. На його рахунку вже 114 ходів розмови. Перш ніж його випустили до людей, помічника навмисно намагалися зламати, а тоді пробним запуском прогнали через справжню модель 39 погоджених питань, і кожну відповідь перевіряв код.

Рахунок за читання – у ваших цифрах

Скільки коштувало б читати цей ринок уручну

Звичайний тиждень приносить радарові близько 1 070 нових записів: за останні сім днів їх надійшло 2 375, але 1 305 із них – одноразовий імпорт фактів із річних звітів. Вкажіть, скільки хвилин один запис забирає у вашого аналітика і скільки коштує його година, – і побачите, якого відділу це вимагало б.

читання вручну: —рік у такому темпі: —лишається вашим людям: —

працює у вашому браузері · 0 мережевих запитів · щоразу той самий результат

Межі радара записано в коді, і тест їх перевірить

Радар, що читає тексти клієнтів, мусить тримати свої межі там, де їх перевірить тест. Модель усередині запуску не має інструментів: на вхід – текст, на вихід – структура за суворою схемою, а мітку поза дозволеним словником Python просто викидає, тож ворожа сторінка може хіба що збрехати своїм змістом. З текстів клієнтів вирізають усе, що схоже на імейли, телефони, номери карток, IBAN і токени, ще до того, як їх побачить будь-яка модель. Інструменти тримає лише помічник-дослідник, і всі вони тільки читають – через роль у базі даних, яка бачить самі представлення; ці права аудитор може перевірити сам.

app/gemini.py · єдиний вихід до моделі
text
text in → schema-constrained JSON out
no tools · pinned model version
every call → llm_calls (prompt version, tokens, error)
labels outside the enum → dropped in Python

Нові версії сервер підтягує сам: що п’ять хвилин він бере головну гілку, збирає її, перевіряє стан і, якщо новий коміт не піднявся, повертається до останнього справного. Відкат повертає код, але ніколи не міграцію, тож кожна міграція мусить лишати попередній коміт робочим, – і близько сотні автоматичних перевірок безпеки окремих змін цю межу втримали.

Робота відділу аналітики ринку – щоранку на таці

Читання, на яке відділ аналітики ринку витратив би тиждень, зроблене ще до приходу рецензентів, і їхня година йде на картки. За перший тиждень із чергою вони розбирали картки швидше, ніж машина їх створювала: 58 відхилили, 27 надіслали, і в черзі лишилося дві. Змінилася сама розмова на нараді: картка приходить зі своїми свідками, з частотою порівняно з історією й з оцінками суддів поруч, тож нарада витрачає час на головне – чи робити ставку, а питання, чи справжні докази, приходить уже з відповіддю. Рецензенти й прямо сказали, де машина недотягує. Відгук керівника відділу продажів про докази на картках був коротким: «Перший факт – так, а інші здаються часто не зовсім релевантними». Дві правдоподібні причини спершу виміряли на живих даних, обидві виявилися хибними, і тепер картка каже, які з її цитат справді підтверджують твердження, а решту показує окремо. Рішення рецензентів наступного ранку повертаються в запуск, тож кожна нова добірка ближча до того, що шукають люди, які відбирають гіпотези.

Тепер бракує самих карток, і туди йде наступна робота: більше свідків ззовні компанії й судді, які доведуть свою точність на оцінках рецензентів і тоді отримають право голосу. Суть радара від цього не змінюється: звичайний тиждень приносить близько 1 070 записів, у вересні з них виходило приблизно три картки на день, а найцінніші картки приходять раніше, ніж про них попросить клієнт, – потреба, під яку ринок уже почав закладати гроші, або попит, що знову росте на вміння, яке компанія раніше продавала лише разовими проєктами. Такий попит – це продукт, який просить, щоб його нарешті зробили.

П’ять тижнів. Одна людина. 66 джерел щоранку, майже 180 годин читання на тиждень, зробленого ще до початку робочого дня, і 135 запропонованих карток – кожна зі своїми доказами.


Цей кейс описує архітектуру й робочу дисципліну. Клієнт, його галузь, назви його продуктів і кожне джерело, що вказало б на одне чи друге, свідомо лишаються абстрактними; будь-якій компанії знадобиться саме устрій радара – читати весь ринок і щодня, порівнювати кожен сигнал із його власним минулим, берегти докази, а ставку лишати людині.