Привет, Хабр! В конце 2024 года прошел большой внутренний хакатон для команды разработки VK Tech. Такое мероприятие провели впервые: команды разных продуктов объединили в единое направление RnD всего год назад. И вот теперь, когда мероприятие прошло, а полученный опыт осмыслен и усвоен, мы хотим во всех деталях рассказать о том, как это было.

Немного об идее хакатона
Весь прошлый год внутри VK Tech мы развивали инженерную культуру и InnerSource-подход: наши инженеры открывали исходный код друг другу (некоторые репозитории были доступны только внутри продуктовых команд), наращивали использование наработок соседних команд, готовились принимать доработки и изменения в свои репозитории, а также дорабатывать соседние проекты.
Примечание: InnerSource — это применение лучших практик из OpenSource внутри корпорации. Впервые об InnerSource написал Tim O’Reilly в далеком 2000-м году в статье Open Source and OpenGL. Не раз писали об этом и на Хабре. Мы тоже поделимся нашим опытом в следующих статьях.
Хакатон стал отличным форматом, который позволил нам не только подвести промежуточные итоги проделанной работы, но и донести до команд две ключевые мысли.
Во-первых, важно делиться опытом и отдавать в сообщество свои полезные наработки. Главным условием для участия было наличие исходного и финального репозиториев в каталоге InnerSource-проектов (наш общий каталог для шеринга наработок в рамках InnerSource), готовых к переиспользованию и развитию соседними командами.
Во-вторых, важно искать возможности как для улучшения рутинных процессов, так и для поиска инновационных идей. Мы дали возможность занести на хакатон абсолютно любую идею: от инструмента для работы, до которого давно не доходили руки, или внутреннего продукта, которого очень не хватало своей или смежным командам, до эксперимента, который не ложился в продуктовый роадмап. Принести идею мог абсолютно любой — от финансиста до разработчика.
Таким образом, на этапе сбора мы привлекли 30 идей под разные кейсы и задачи применения — от генераторов, утилит и библиотек до ботов и внутренних мини-продуктов.
По итогам отбора до основной конкурсной части хакатона было допущено 9 проектов. Три из них, по мнению жюри, стали победителями. На них и остановимся подробнее.

Генератор синтетических данных на основе метаданных или образца данных
Победителем хакатона стал проект Максима Титова, Владимира Северова и Даниила Хасанова. Они создали инструмент для генерации синтетических данных на основе метаданных или образца данных. То есть не типичный фейкер для создания простых данных (имя, фамилия, номер телефона), а сервис для создания полноценных, структурированных датасетов в соответствии с определенным форматом.
Востребованность подобной разработки обусловлена тем, что, в частности, для тестирования всевозможных высоконагруженных систем нам нужен большой объем данных. Причем зачастую у команды продукта на старте нет тестового датасета, соответствующего будущей боевой нагрузке. При этом Open-Source-генераторов под наши требования нет. Как результат, нам часто приходилось генерировать данные костыльно, «на коленке».
Примечание: Алгоритм генерирования данных раньше был переусложнен. Так, для каждой задачи приходилось писать новый скрипт под необходимый формат и для учета всех изначальных условий — это были Lua-скрипты для запуска непосредственно в Tarantool, скрипты для k6 на JavaScript, и даже Golang-приложения. Везде использовался встроенный модуль рандома, и вокруг него хардкодились параметры и конструкции для максимально быстрого решения текущей задачи.
Разработка генератора синтетических данных на основе метаданных или образца данных фактически решила нашу проблему.
Теперь о деталях:
На разработку в рамках хакатона ушло 2 дня и 43 коммита;
Delivery реализован на HTTP API + CLI;
Реализована генерация разных типов данных: базовые типы (строки, числа), расширенные типы (UUID, datetime), внешние ключи;
Вывод реализован в CSV и HTTP API.
В процессе разработки генератора активно использовался AI:
VK LLM + VK Copilot (внутренний продукт VK) для написания автотестов и генерации кода уже решенных проблем;
VK LLM для генерации пресетов логических типов данных;
VK LLM API для генерации конфигураций по образцу данных (в планах).
На уровне архитектуры генератор разделен на три слоя:
Delivery;
Use case;
Output.

Уже сейчас с помощью генератора мы автоматизировали тестирование для Tarantool Column Store вместо написания множества скриптов на Python под работу при разных профилях нагрузки. При этом решение также можно применять для широкого пула других задач. Среди возможных сценариев:
тестирование алгоритмов;
автоматизация нагрузочного тестирования в рамках нужных пайплайнов;
исследовательский анализ данных;
генерирование данных для их последующей визуализации;
защита чувствительных данных и их подмена на сгенерированные;
симуляция атак и не только.
Производительность решения, протестированная на разных типах данных и на разном количестве потоков, демонстрирует довольно высокие показатели.
Типы колонок | Число потоков | Примерный RPS |
Число | 8 | 11 100 000 |
Число Х2 | 8 | 5 880 000 |
Число Х3 | 8 | 4 000 000 |
UUID | 8 | 1 250 000 |
UUID X2 | 8 | 625 000 |
Число + UUID | 8 | 1 220 000 |
Число + STR(16) | 4 | 2 000 000 |
Число + STR(16) | 8 | 3 850 000 |
Число + STR(16) | 16 | 6 250 000 |
Разработанный в рамках хакатона генератор потенциально закрывает потребности сразу несколько групп пользователей.
Разработчики. Во время работы над проектами, требующими тестовых данных для проверки функциональности, разработчикам часто нужно быстро генерировать наборы данных в удобном для использования формате. Генератор позволяет подключаться через CLI-интерфейс, задавать нужные параметры генерации и сохранять сгенерированные массивы данных в нужных директориях.
Сторонние системы. В отдельных кейсах может требоваться интеграция генератора данных с другими HTTP-сервисами для автоматической загрузки полученных данных для тестирования. Возможность подключения к разработанному генератору через HTTP API позволяет успешно загружать данные в целевые HTTP-сервисы, обеспечивая быстрое получение актуальных тестовых данных.
Инженеры по тестированию. Тестировщикам для нагрузочных тестов часто нужно быстро и автоматически генерировать большие объемы тестовых данных в рамках процесса CI/CD. Генератор можно встроить в CI/CD и успешно создавать данные в рамках нужных пайплайнов.

Разработка библиотеки для взаимодействия с ботом VK Teams на node.js
Второе призовое место занял проект Александра Шаталова, Ольги Ли, Никиты Боровикова, Дениса Савельева и Виталия Ящука. Они создали SDK, с помощью которого любой разработчик с экспертизой в JavaScript может быстро разработать бот для VK Teams. Этот продукт мы используем внутри VK и поставляем корпоративным клиентам.
Востребованность решения обусловлена тем, что, по опросу GitHub, в 2023 году JavaScript занимает первое место среди всех языков программирования, но JavaScript SDK для VK Teams не было (были для Python, Java и Golang).
В рамках хакатона всего за два дня продукт был практически полностью упакован:
написан SDK, в него встроена работа с VK Copilot API;
написана документация;
сгенерированы примеры ботов;
разработана административная панель для удобной настройки команд для бота.
Помимо этого, функционал для взаимодействия с VK Copilot интегрирован в SDK.
В архитектуре библиотеки реализован принцип инверсии зависимости, то есть решение представляет собой класс, состоящий из множества модулей. При этом каждый из модулей внутри библиотеки независим и взаимозаменяем без затрагивания основного кода.
Разработка библиотеки позволила получить комплексный эффект.
Улучшение производительности разработки ботов. С SDK благодаря стандартизации разработка ботов ускоряется, время на подготовку и настройку сокращается до минимума.
Расширение аудитории и увеличение вовлеченности. SDK дает возможность легко создавать и масштабировать ботов с использованием популярного языка JavaScript. Это может повысить активность создания и применения ботов в разных сценариях.
Повышение качества взаимодействия с пользователями. Инструменты SDK могут включать шаблоны, готовые компоненты и лучшие практики для создания более качественного бота, что влияет на опыт пользователей.
Расширение функционала VK Teams. Предоставление функциональности ботов и административной панели вместе с VK Teams позволяет расширить возможности мессенджера и повысить его ценность для конечных пользователей.
Библиотека потенциально закрывает потребности двух групп пользователей:
JS-разработчики. Разработчики получают пакет с библиотекой, написанной на JavaScript, и документацию по разработке, благодаря чему можно быстрее и качественнее разрабатывать нужных ботов.
Аналитики (или другие пользователи без экспертизы в JavaScript). После подготовки бота разработчиками аналитики можно с помощью административной панели добавлять нужные команды или кнопки и проверять их работу в реальном времени.
RePlaice OpenAPI
В тройку лидеров также вошел проект команды в составе Александра Яковлева, Дмитрия Будкова и Андрея Бердюгина. В рамках хакатона они доработали часть фичей для инструмента RePlaice.
RePlaice — инструмент, который позволяет:
автоматически генерировать Mock-серверы на основе OpenAPI-спецификаций, упрощая создание тестовых сред;
синхронизировать имитированные данные с актуальными API, устраняя расхождение между ожидаемыми и реальными данными;
настраивать ответы через удобный GUI, моделируя различные пользовательские сценарии.
RePlaice решает целый пул задач:
устраняет необходимость вручную создавать и поддерживать JSON-файлы для Mock;
синхронизирует имитированные данные с актуальными OpenAPI-спецификациями, исключая расхождения между Mock и реальными API;
позволяет начать разработку клиентских приложений до завершения работы над серверной частью, то есть снижает зависимости от бэкэнд-разработки;
генерирует и обновляет Mock-сервер автоматически при изменении API без необходимости перезапуска, чем снижает трудоемкость обновлений;
обеспечивает удобный GUI для редактирования Mock-ответов, упрощая моделирование сложных пользовательских сценариев.
Конкретно в рамках хакатона для RePlaice были реализованы:
графический интерфейс;
возможность работы с группой YAML-файлов (раньше инструмент работал только с одним файлом);
возможность редактирования Mock-ответов.
В процессе доработки команда использовала:
Eslint и Prettier для форматирования и отслеживания ошибок;
Nest.JS для обеспечения чистоты архитектуры;
Git Hooks;
TypeScript для типизации;
Jest для написания Unit-тестов;
VK Copilot для подготовки документации и тестирования.
RePlaice прежде всего полезен разработчикам клиентских приложений. Нередко у специалистов уже есть OpenAPI-спецификации, и надо начать разработку фронтовых фич до полной готовности бэкенда. RePlaice решает эту проблему: после подключения RePlaice можно запустить Mock-сервер с реалистичными данными, которые генерируются из OpenAPI-спецификации. В итоге Mock-сервер запускается и функционируют все endpoints, описанные в OpenAPI.
Таким образом, решение потенциально дает комплексный профит: производительность разработки растет, качество Mock повышается, использование и поддержка становятся удобнее, ресурсы экономятся.

Краткие итоги по результатам InnerSource-хакатона VK Tech
Благодаря проведению хакатона мы получили полезный опыт и смогли достичь поставленных целей: расширили каталог InnerSource-проектов, подтвердили преимущества InnerSource-подхода, смогли в игровой форме реализовать те проекты, для которых в рабочем процессе не хватает фокуса.
Одновременно опыт проведения InnerSource-хакатона позволил нам сделать несколько важных выводов.
В VK Tech много сервисов, на базе которых можно строить более сложные и функциональные решения под различное применение. Причем реализовывать такие проекты можно даже маленькой командой в сжатые сроки.
Внедрение InnerSource-подхода в VK Tech позволяет повышать качество, скорость и гибкость разработки. Уже сейчас совместное использование и развитие кодовой базы становится мощным драйвером для прокачки внутреннего стека команд и вывода компании на новый уровень технологической зрелости.
Развитие инженерной культуры — приоритетное место приложения усилий. Команды с сильной инженерной культурой гораздо продуктивнее и эффективнее: пишут код более высокого качества, всегда готовы к инновациям и быстрым экспериментам, тестируют гипотезы и учатся на ошибках друг друга, автономны в принятии технических решений, привлекают талантливых инженеров, постоянно себя улучшают и готовы к масштабированию. В этом всем мы убедились на примере команд участников хакатона.
При этом проекты, разработанные в рамках InnerSource-хакатона, имеют практическое значение: все они потенциально полезны не только команде VK Tech, но и более широкому инженерному комьюнити. Поэтому со временем все они смогут войти в стек доступных решений или будут представлены в виде свободно распространяемых библиотек.