«Time-to-market важнее pixel-perfect»: как мы разрабатывали BI-инструмент в «Яндексе»

Руководитель Yandex DataLens Роман Колеченков рассказывает, сколько нужно гипотез и терпения, чтобы превратить сложную внутреннюю систему аналитики в сервис десятков тысяч пользователей.

Yandex DataLens — сервис визуализации и анализа данных, который команда Yandex Cloud развивает с 2019 года. Сейчас в нем реализованы принципы анализа и визуализации данных самого Яндекса: у компании много бизнес-юнитов, разных сервисов и продуктов, и по каждому из них нужна аналитика. Всем нужен гибкий, удобный BI-инструмент. Однако его история намного длиннее и не столь лаконична, как простые графики и дашборды. Таким подход к аналитике в компании был не всегда.

Роман Колеченков
Роман Колеченков

Если ты не разработчик

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

Но было интересно, как там устроена аналитика. Я согласился обсудить вакансию. Мне рассказали о позиции менеджера проекта сопровождения и развития внутренней аналитической системы «Статистика». Звучало ни капли не вдохновляюще — у меня крупный портфель проектов, а тут придется быть менеджером внутреннего проекта, причем сопровождать кем-то когда-то внедренную систему. «Скучно», — решил я. «Ты просто не знаешь Яндекс», — тогда ответили мне.

Старая-добрая «Статистика»
Старая-добрая «Статистика»

В первой беседе со своим будущим руководителем меня зацепили несколько вещей. Во-первых, источником данных для отчетов служил кластер из тысяч серверов, тогда как в моей практике «кластером» назывались кластера из трех-пяти машин. Кроме того, в Яндексе не существовало понятия Lunch Report, когда нажимаешь кнопку «Загрузить отчет» и идешь обедать, пока он загружается — все запросы отрабатывали максимум за минуты, даже если это были отчеты с десятками терабайт данных. И, главное, я почувствовал, что за системой стоит сильная команда разработчиков, знающая «Статистику» от и до.

Потом были ещё собеседования, на одном из которых Алексей Башкеев (сейчас — руководитель Yandex Cloud) рассказал, что существующая «Статистика» требует переосмысления и свежего взгляда. И это звучало для меня как вызов: нужно было создать что-то новое для целого Яндекса. И я согласился.

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

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

Редактор, в котором нужно было описывать график кодом
Редактор, в котором нужно было описывать график кодом

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

Параллельно со «Статистикой» мы начали думать о создании инструмента для аналитиков из внешних компаний. Придумали концепт «Смарт Аналитики» — аналитической платформы с готовыми шаблонами дашбордов. С таким инструментом пользователь может получить готовый дашборд в пару кликов, если есть данные в нужном формате. При этом он уже интегрирован с рекламными продуктами Яндекса. В какой-то момент поняли, что у всего нами придуманного нет самого главного — заказчика, то есть непонятно, для кого мы делаем. Тогда мы приостановили разработку, и я отправился на поиски внутреннего заказчика.

Мораль первая: перед началом проекта нужно найти конкретного заказчика.

Я встретился с коллегами, которые занимались инновационными технологиями в рекламе. У них была очень похожая задача — расширить возможности для рекламодателей. И начинаем мы придумывать разные сценарии для «Смарт Аналитики», делаем дизайн-концепт, прототипируем разные прикладные штуки. Но чем дальше мы продвигались, тем больше понимали, что это должен быть не отдельный продукт, а часть сервисов Яндекс Аудитории и Яндекс Метрики. Самостоятельный продукт так и не выкристаллизовывается. Кстати, возможность создания сегментов в Аудиториях через геополигоны — это кусочек прототипа «Смарт Аналитики».

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

К 2017 у нас уже есть понимание того, как развивать «Статистику», и опыт дизайна внешней аналитической системы. Мы решаем делать «Смарт Аналитику» как классический BI-инструмент, доступный и внутренним, и внешним пользователям — то есть систему, где можно построить условный график над любым источником, не написав при этом ни строчки кода. То есть мы принципиально изменили саму идеологию сервиса: пользователь приходит с любым набором данных и отображает их как хочет, не упираясь в предложенные сценарии и шаблоны. Начинали разрабатывать одно, но по факту сделали совершенно другое.

В это же время к запуску готовится Облако (сейчас — Yandex Cloud), идея которого — собрать на одной платформе сервисы для решения различных бизнес-задач. Мы успешно продаем идею сделать «Смарт Аналитику» одним из этих сервисов. Так начинается наша облачная история.

Через пару месяцев мы представляем прототип API, который, кстати, до сих пор лежит в основе бэкенда DataLens.

Название DataLens появится чуть позже, летом 2018 года. Тогда же мы определили для себя цели, которым следуем и по сей день: популяризировать анализ данных, повысить доверие пользователей к облачным технологиям и, как следствие, помогать клиентам Yandex Cloud принимать точные бизнес-решения на основе реальных данных.

Когда время резко ускорилось

2018 год был годом интенсивной разработки. Мы одновременно делали две версии системы — обкатывали фичи на внутренних пользователях и выкатывали их для внешних. Первое живое демо DataLens состоялось в июле 2018 года. В октябре начинается закрытое превью для ограниченного круга внешних пользователей.

Внутренняя альфа-версия DataLens, июль 2018
Внутренняя альфа-версия DataLens, июль 2018

4 апреля 2019 года мы запускаем открытое превью, но пускаем по заявкам. И за несколько месяцев DataLens набирает более 2 тыс. заявок. За время превью мы собрали довольно много фидбека. Выявили и исправили большое количество багов и сложных сценариев.

Наконец, 1 октября 2019 года мы анонсируем запуск DataLens на конференции Yandex Scale.

Сервис про коммьюнити

Изначально DataLens не был бесплатным. Но плата за пользователей, как у конкурентов казалась нам несправедливой — так как за лицензию приходится платить вне зависимости от того, как часто пользуешься сервисом. И мы придумали систему оплаты по сессиям — тарифицировали 10-минутные интервалы работы пользователя с системой. Был бесплатный тариф, условно, со 100 сессиями, чего примерно хватило бы на месяц небольшую компанию с 3-5 пользователями. А в платном тарифе можно было сессии продлевать, дополнительные пакеты покупать. Плюс, сессии по работе с источниками в Облаке сделали дешевле, считая, что это будет драйвером для перехода в Облако.

И во всем этом были не правы.

Конечному пользователю схема с покупкой пользовательской лицензий была гораздо понятнее, тогда как история с сессиями оказалась совершенно непонятно — как ими управлять, как считать, как контролировать? Да, DataLens стал своеобразным каналом, через который клиенты вообще узнавали про Облако, но вот конкретно «дешевыми сессиями» мы никого туда не привели. Ну и с точки зрения позиционирования разделение на «бесплатный» и «платный» тарифы играло в минус: всем казалось, что бесплатный — просто этап перед обязательным платным.

В итоге платный тариф отменили. Это позволило продвигать сервис «в массы».

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

Взгляд изнутри

С технической точки зрения DataLens — синглтенантное (single tenant) решение, то есть все десятки и сотни тысяч пользователей по факту работают в единой инсталляции, распределенной по трем дата-центрам и обеспечивающим безопасный и отказоустойчивый доступ к данным. Мы работаем с самым актуальным стеком технологий — Python 3.10, Flask, TypeScript, aiohttp, asyncpg, aiomysql, arq, attrs, React, Node.js и другими.

Сегодня над DataLens работает команда из 20 разработчиков, двух менеджеров проекта (один занимается производственным циклом, второй работой с пользователями — поддержка, обучение). Также в команде есть UX-дизайнер и ответственный за развитие бизнеса. Вообще DataLens довольно тесно интегрирован с другими «облачными» продуктами — мы привлекаем техписателей, переводчиков, других специалистов. И многие стояли у истоков проекта.

Как и любой веб-сервис, DataLens изнутри делится на два мира — фронтенд и бэкенд.Так, первым разработчиком бэкенда стал Дмитрий Федоров, именно он был автором первой версии API, а сейчас руководит всей разработкой бэкенда DataLens.

Нам важно было запилить первую версию в сжатые сроки, чтобы проекту дали «зеленый свет». Задач было много, а людей мало. Лучше других языков я знал Python 3, так что на погружение в особенности других языков и их экосистем времени особо не было. А экосистема Python имеет множество библиотек для работы с базами данных и с данными в целом. На тот момент внутри команды это было очевидным решением, с которым никто и не пытался спорить.

Дмитрий Федоров, разработчик бэкенда

Группой фронтенда DataLens руководит Гаджи Гаджиев.

Начало работы над сложным проектом — это всегда атмосфера стартапа. Три-четыре части сервиса проектировались и разрабатывались параллельно, почти все из них с нуля. BI-системы — это вообще очень плотные в плане функций продукты, как правило, с многолетней историей — голова шла кругом, когда мы прикидывали, сколько нам еще возможностей не хватает. Нередко понимание приходило уже во время реализации, и в результате макеты, сверстанные интерфейсы и API иногда устаревали еще до выкатки. Команда все это воспринимала стоически: дизайн, фронтенд, бэкенд — ребята отлично держались.

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

Гаджи Гаджиев, руководитель фронтенда

За развитие бизнеса DataLens отвечает Павел Дубинин. Мы с ним познакомились лет 12 назад еще на прошлом месте работы, когда Паша пришел ко мне собеседоваться на вакансию стажера. Тогда он был студентом 3-го курса, но сильно отличался от остальных кандидатов широким кругозором и пониманием технологий баз данных и аналитических систем. И это был первый кандидат, ради которого я пошел вне стандартной процедуры найма и сразу предложил работу без специальных заданий.

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

У нас обычно нет времени, чтобы долго писать ТЗ, согласовывать, прорабатывать какие-то экзотические визуализации или кастомизации в UI. Важнее бежать проверять следующую гипотезу и воплощать инсайты в наши продукты. Собственно, поэтому у нас и родился лозунг: time-to-market важнее pixel-perfect. При этом мы стремимся к тому, чтобы сразу из коробки в DataLens соблюдались базовые принципы дизайна и инфографики, чтобы визуализации сразу получались аккуратными, минималистичными.


Павел Дубинин, менеджер по развитию бизнеса DataLens

Сегодня наша основная задача — формирование комьюнити вокруг DataLens. И похоже, нам удалось создать одно из крупнейших и активных BI-коммьюнити в России - у нас около 20 тыс. внутренних пользователей и десятки тысяч - внешних. И, кстати, оно, кажется, уже живет без нашего участия — пользователи сами друг другу помогают.

Если говорить о развитии DataLens как внутреннего корпоративного инструмента, то если раньше сервисом пользовались около 45% сотрудников, что в принципе довольно высокий показатель для BI-системы даже в IT-компании, то сегодня это около 70%. Кроме штатных сотрудников, с DataLens работает большое количество людей вне штата — например, колл-центры, склады, поддержка бизнеса.

И все это стало результатом того, что мы снизили порог входа в систему, упростили пользовательские сценарии — ее понимает нетехнический человек.

Кстати, прошлой осенью DataLens появился в курсе информатики 8 класса в Яндекс.Учебнике — ребят учат пользоваться дашбордом, находить на дашборде нужную информацию, прививают культуру принятия решений на основе анализа данных. И глобально это работает на наши основные цели, которые мы сформулировали перед запуском.

Подписывайтесь на блог Yandex Cloud, чтобы узнавать еще больше новостей и историй об IT и бизнесе.

Другие истории, которые активно читают наши подписчики:

2222
1 комментарий

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

Ответить