Владислав Марков, наш специалист по внутренним коммуникациям, в корпоративном блоге на портале «Хабрахабр» поделился итогами первого в истории CUSTIS внешнего хакатона. Как мы выбирали формат и придумывали концепцию? Где и как искали участников? С какими трудностями столкнулись и какую извлекли пользу? Об этом — в статье «Галактический хакатон: как убедить молодых разработчиков перейти на свою сторону» на сайте издания.

Ранним утром 20 мая мы, команда организаторов первого в истории CUSTIS хакатона, радовались разгоравшемуся теплому дню (что для весны 2017 — эксклюзив). Каждый думал о своем: админы изучали графики нагруженности Wi-Fi-диапазона, девушки из PR- и HR-отделов сверлили взглядом списки участников, кураторы из департамента разработки почему-то вспоминали Макаренко и лучшие навыки управления распределенными командами. Антикафе во «Флаконе», где мы должны проводить хакатон, еще закрыто, узкие проезды между лофтами еще не наполнились густым туманом от вейпов и гулом гироскутеров. Мы были уверены в том, что все готово, но легкое волнение нас не покидало.

Это было утро перед Битвой. Спустя 15 часов мы, усталые, но довольные, прощались на том же месте, вспоминали яркие моменты, благодарили участников и друг друга и точно знали, как нужно проводить хакатоны. Спокойствие и чувство выполненного долга.

Этот пост для тех, кто испытывает трепет при мысли о том, что предстоит организовать подобное мероприятие без многомиллионных бюджетов силами команды в 20 человек, или раздумывает, стоит ли оно того.

Содержание

С чего все началось

Лучшие друзья HR-брендинга

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

Что мы практиковали раньше:

  1. Ярмарки вакансий и карьерные форумы. Отличная возможность познакомиться с молодыми айтишниками, рассказать о компании, заинтересовать и пригласить следить за нашими предложениями. Работает только на далеких временных горизонтах и отличается низкой конверсией, если не звать ребят присоединиться к другим активностям компании.
  2. Семинары, митапы, воркшопы и мастер-классы для студентов и молодых специалистов, сопутствующие активности в соцсетях (задачки, конкурсы, образовательный контент). Крутой способ познакомить новичков с опытными специалистами компании, в игровом формате показать, как устроена работа в крупных проектах, и помочь ребятам понять, выбирать ли этот путь профессионального развития. Здесь конверсия выше: сила предметных и практических коммуникаций творит чудеса. Несколько постоянных слушателей наших семинаров до сих пор работают у нас.
  3. Стажировки и летние школы. Самый эффективный с точки зрения коммуникаций формат. Стажировка позволяет «в бою» оценить не только скилы, но и командные, организаторские и профессиональные компетенции каждого участника. Благодаря стажировке, которую мы делали пять лет назад, мы познакомились с очень талантливыми ребятами и сразу же пригласили их в команду. Недостаток: при таком формате возрастает нагрузка на кураторов стажировки и требуется колоссальное количество трудозатрат ключевых сотрудников из производства.

Почему мы выбрали формат хакатона

Представьте, что сразу несколько ключевых проектов компании выходят в стадию продакшена с высокими темпами отгрузок функционала. Открытых вакансий — пара десятков, основные технологии — Java и С#. Аутсорсинговыми командами утолить ресурсный голод нельзя, так как люди нужны в ядро проектной команды. И нужны классные разработчики: со светлой головой, большим добрым сердцем и огнем в глазах, пусть с маленьким опытом в суровой промышленной разработке. А еще необходимо то, чего не даст ни одно интервью с эйчаром и решение тестовых задачек на собеседовании: в короткие сроки проверить, что молодой разработчик действительно талантливый, а мы действительно интересны ему как команда. Мы твердо решили, что друзья познаются в бою.

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

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

Неудивительно, что за подготовку первого внешнего хакатона взялись заядлые участники и вдохновители хакатонов внутренних.

Выходим в свет

Рождение идеи

Нет ничего проще, чем объявить хакатон на тему, актуальную для отрасли или конкретной компании. Как показывает скроллинг выдачи в Гугле, хакатон можно устроить практически по любому поводу, была бы в основе идея, которая будоражит отрасль или отдельных ее игроков: алгоритмы machine learning, нейросети и компьютерное зрение, банковские микросервисы, социальные и благотворительные проекты и даже целые технологические стартапы с TTM в 48 часов.

Что нам нравилось в формате:

Что мы хотели привнести от себя:

Идея «Битвы технологий» оказалась настолько привлекательной, что мы твердо решили: устроим айтишный турнир! Там не будет жюри и экспертных комиссий, не потребуется защищать свой проект перед переодетыми в инвесторов пиэмами, не нужно даже участвовать в конкурсе красоты кода. Все просто — как в гонках или в бизнесе — нужно что-то построить, испытать и выставить на одну арену с соперником. И пусть победит сильнейший!

Проверяем на профессионалах

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

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

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

Утверждаем формат

Мы проектировали формат около месяца, после чего настало время зафиксировать основные детали мероприятия. Финальный вердикт выглядел так:

Запускаем в производство

Концепция

Когда мы определились с игровой платформой, стало ясно, что для успешного продвижения нашей идеи в массы нужно что-то более оригинальное, чем предложение сыграть в морской бой. И достойный замысел родился там же, в недрах нашего департамента разработки: «Айтишники всех поколений искренне любят вселенную „Звездных войн“. Так почему бы не назвать наш турнир галактической битвой, а весь антураж — от интерфейсов серверной части приложения до оформления площадки — адаптировать под эту концепцию?». Морской бой не в тренде — да здравствует космический бой!

Технологическая часть

Чтобы обеспечить всех участников главным орудием пролетариата 21 века — настроенной средой разработки и удобными компьютерами, наши админы тщательно выбрали и арендовали 26 ноутбуков. На них были развернуты Visual Studio и IDEA, а на площадку мы привезли и подключили к локальной сети резервный сервер (его роль блистательно сыграл мощный десктоп) на случай, если удаленный будет недоступен.

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

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

Сервер приложения устроен очень просто и не требует какого-либо контейнера (обычное standalone java-приложение). Он подключается ко всем очередям в RabbitMQ и слушает их. В этом плане технологически сервер похож на клиентские приложения. Можно сказать, что все боты и сервер образуют микросервисы, перевязанные каналами RabbitMQ. Сложность здесь только в том, что сервер хранит множество информации: текущие и прошедшие игры, статистику и т. д. Чтобы это не вызвало проблем, для всех таких данных есть лимиты по количеству, то есть старые сведения забываются и запоминаются новые.

Написан сервер на Kotlin, но никакой особой котлинской магии не используется — в основном функциональщина и extension-методы.

Подробнее о том, как строится взаимодействие ботов с сервером, а также о техническом задании для команд можно почитать в мануале, который мы раздавали участникам перед стартом турнира.

Площадка

Параллельно мы стартовали трек поиска площадки, подходящей по техническим и эстетическим параметрам.

Мы хотели:

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

В итоге мы все-таки нашли несколько аутентичных мест, в которых сам старина Вейдер почувствовал бы себя как дома. Большое их преимущество — готовый тематический декор и, конечно же, управляющие, хорошо знакомые не только со «Звездными войнами», но и с ИT (в лице гик-культуры, как правило).

Наш шорт-лист выглядел так:

Плюсы. Метро «Китай-город» и «Лубянка» в шаговой доступности, своя кухня (нам было очень важно накормить наших участников полноценным обедом и ужином), удобные «кабинки» с диванчиками и столами на четверых, общая вместимость площадки — 60–80 человек, дружелюбный персонал и тематический декор.
Минусы. Достаточно темное подвальное помещение, соседство с «ароматным» продуктовым магазином оранжевого цвета, высокая стоимость аренды.
Плюсы. Метро «Дмитровская» (относительно недалеко от центра), уютная атмосфера, стильный интерьер, лавка комиксов и гик-сувениров, просторный зал с удобными рабочими зонами. Свежий ремонт (ребята не очень давно открылись) и отзывчивость организаторов к нашим пожеланиям, демократичная стоимость аренды. В самом антикафе еды нет, но прямо под Geek Square есть ресторан. С ними мы договорились на кейтеринг для наших участников.
Минусы. Некоторые сложности в навигации по «Флакону», необходимость отдельно договариваться с разными контрагентами (был нужен более широкий канал для подключения и кейтеринг). Разместить с комфортом можно человек 20 (вместе с организаторами), больше было бы душно и тесно.

Мы остановили свой выбор на антикафе. Это была любовь с первого взгляда, которой мы легко простили все недостатки.

Маркетинг и работа с заявками

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

Мы представляли себе портрет потенциального участника (и сотрудника) так:

Нам предстояло:

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

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

Первыми в бой были брошены e-mail’ы. Текст приглашения участников был оформлен в стилистике мероприятия. Мы сделали две рассылки по партнерским базам и две — по своим. Рассылки проводились в несколько этапов. Охват: 10 000 человек. Результат: 29 регистраций (конверсия = 0,29).

Затем мы подключили SMM-артиллерию и порекламировались в группах «Типичный программист» и «Программирование ITmozg» Вконтакте. О нас узнали 42 000 и 12 000 человек соответственно. Результат: 10 регистраций (конверсия = 0,02) и 5 регистраций (конверсия = 0,04) соответственно.

Еще несколько тысяч человек удалось охватить с помощью корпоративного профиля на Фейсбуке и репостов коллег, партизанского маркетинга в сообществах ВК и тематических каналах в Телеграме. Наше сообщество CUSTIS Young ВК не принесло нам новых регистраций, но стало хорошей точкой оперативного взаимодействия с ребятами, у которых были оргвопросы.

На выходе форма регистрации показала занимательную статистику:

Age statistics2.png

Приятно было наблюдать, что ИT все возрасты покорны и молодыми разработчиками ощущают себя ребята 16 лет и старше. Сильно старше.

Experience.png

Примерно та же картина с опытом наших конкурсантов. Большого разрыва в опыте разработки не получилось, а значит, всем должно быть интересно.

Technology.png

А вот эта диаграмма хорошо отражает рыночные тренды.

Notebook.png

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

Графу анкеты «Расскажи о себе» мы придумали, чтобы ребята могли поделиться коротким резюме о своем опыте и задать вопросы организаторам. Помимо обстоятельных рассказов о достижениях и ожиданиях участников (а таких было большинство) мы получили нетривиальное собрание занимательных фактов:

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

В последний день перед хакатоном мы подвели финальную статистику:

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

Готовность №1

В ночь перед турниром мы привезли на площадку все оборудование (ноутбуки, сервер, призы), еще раз протестировали интернет-соединение, проектор и акустику. Все шло отлично до тех пор, пока мы не решили расположить диванчики и столы так, чтобы в основной части кафе разместились все восемь команд. Мы прибегали к фен-шую и 3D-визуализации, меняли местами столы и пуфы, но идеальной рассадки так и не получили. В некотором смятении, но с надеждой, что в итоге всем командам будет одинаково удобно, мы отправились по домам.

CUSTIS TechBattle: Java vs. C#

Утро

Ранним утром 20 мая мы, команда организаторов… Стоп, мы уже об этом рассказывали. Если отвлечься от субъективных переживаний, мы предпринимали вот что:

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

Foto 1 cut.jpg

Что такое реальная конверсия, мы поняли за полчаса до старта турнира. Несмотря на активный утренний follow up, уговоры, торг с аргументами про печеньки, к началу битвы пришли только 14 из 31 заявившихся участников. Нужно было заранее опираться на отраслевую статистику и понимать, что до большинства бесплатных мероприятий доходит около 50% «подтвердившихся» участников.

В 11:05 было принято волевое решение начинать битву. Те, кто в это утро смог победить сон, трудности навигации по «Флакону» и плотный кофе-брейк, уже были достойны приза организаторских симпатий. И, руководствуясь принципом «четырнадцать смелых шестнадцать спящих не ждут», мы объявили начало турнира. Мы представили себя и компанию, рассказали о наших кураторах. После этого разбили участников на пять команд по технологиям (слепой жребий и цветные бейджи помогли нам) и комфортно разместили на площадке (нет худа без добра!).

Foto 2.jpg

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

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

День

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

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

Foto 3.jpg

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

Солнце клонилось к горизонту, и мы решили провести первый чемпионат. Для этого команды прервали бесконечный процесс совершенствования кода и выставили своих ботов на общую арену. Когда все команды сыграли установленное количество игр по круговой системе и посмотрели визуализацию самых успешных боев, мы составили первый рейтинг. Из него стало ясно, что уровень команд, участвующих в битве, сильно (хотя и не критично) отличается. Но поскольку девиз битвы требовал победы сильнейшего, мы решили это во внимание не принимать.

Foto 4.jpg

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

Вечер

Мы понимали, что в означенный вначале тайминг не укладываемся. К финалу очередного этапа оптимизации одна из команд одолела главного босса сервера — Йоду. Остальные команды тоже почувствовали себя уверенно перед финалом, одной из них даже удалось «положить» сервер в очередной жаркой битве.

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

Foto 5.jpg

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

Foto 6.jpg

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

После Битвы

Обратная связь

После турнира мы получали отзывы и вопросы от участников и собирали воедино фидбек. Кураторы пристальнее просмотрели код, созданный участниками, и оценили общий уровень команд. Эйчары продолжали общаться с ребятами и получали вопросы о возможности присоединиться к нашей команде.

В целом мы получили благодарные отзывы: участники были довольны проделанной работой, многие просили оставить доступ на сервер, чтобы совершенствовать ботов уже после битвы и однажды устроить Йоде и другим ботам реванш.

Итоги

На момент написания поста мы поддерживаем связь с большинством ребят. Пятеро из них (в том числе победители битвы) выразили интерес к сотрудничеству и сейчас проходят собеседования с нашими эйчарами и руководителями производственных подразделений. Хотя наш хакатон собрал мало участников, мы считаем его успешным, так как:

Чем в итоге оказался крут хакатон (справедливо для участников и организаторов):

С какими вызовами нам пришлось столкнуться:

Мы с удовольствием поделились историей о нашем «хэндмейдовом» хакатоне, постарались акцентировать внимание на деталях и нюансах, которые почти невозможно учесть, делая такое мероприятие в первый раз. Не хотим громко заявлять, что этот текст претендует на гордое имя мануала DIY-хакатоностроения. Каждая компания уникальна в своей организационной культуре и ищет свой особый путь к сердцам молодых специалистов. Все вольны выбирать свои инструменты работы с HR-брендом.

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

Материалы