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

«Проект провалился ровно в 23:47. Не в четверг, а в среду, что было особенно обидно. Gantt-чарт, ещё утром сиявший аккуратными зелёными полосками, теперь напоминал окопы под Верденом. Иван, молча смотрел в экран. Разработчик, наблюдал уже третий сон. Роман, безуспешно пытался разобраться с бэкендом. А до дедлайна оставалось 14 часов. И это был мой звёздный час как проджект-менеджера».

Как до этого дошло...

Принятие решения: Зов Cello

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

«А давай что-нибудь придумаем. Не какой-нибудь соло-принер-стартап на год, а что-то попроще. На одну-две недели бессонной работы. Ну чего тебе, ей-богу, в играх штаны просиживать?»

И в этот самый момент в WhatsApp прилетает сообщение: я, оказывается, УЖЕ участвую в каком-то хакатоне, и все детали мне отправили на почту.
«На какую почту?» — удивлённо спрашиваю я. Девушка на том конце интернета поясняет, что это была почта одной моей знакомой. Всё вышло ошибкой.

Судьбоносной. Определившей целых две недели моей жизни.

а когда не участвовали?

Сборка команды: В поисках «небалованных»

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

  1. «Краудсорсинг MVP». Отсутствие веры/свободных рук в/на проект. «Отдадим на хакатон, сделают условно-бесплатное MVP, а мы его внедрим и заработаем».

  2. «Технологический вызов». Проблема не решена в мире вообще, или существующие решения не устраивают. «Покрутим рулетку — вдруг на этот хакатон придёт гений, который найдёт решение».

  3. «Кадровый майнинг». Даём задачу на нашем узком стеке, а победителям, возможно, предложим работу. Кадров, которые в этом разбираются, — днём с огнём не сыщешь.

  4. «Хайп». Социально значимые проекты, которые никогда не окупятся, но «наведут шуму» вокруг заказчика. Естественно, за условно-бесплатно.

  5. «Бизнес-эффективность». Проблема понятна, решение вроде бы есть, но разрабатывать и внедрять своими силами выходит дороже, чем использовать хакатонцев.

С такими задачами айтишники сталкиваются с разной регулярностью. Лично я обычно обитаю везде, кроме «Технологических вызовов». Поэтому выбор был очевиден. Но кто? Кто потянет такую задачу? Может, 12-летний индус, который на Bandicam записывал взлом Фотошоп в 2011 году? К индусам мы ещё вернёмся.

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

«Нам нужен не всякий программист, – сказал горбоносый. – Программисты – народ дефицитный, избаловались, а нам нужен небалованный». – «Да, это сложнее», – сказал я. Горбоносый стал загибать пальцы: «Нам нужен программист: а – небалованный, бэ – доброволец, цэ – чтобы согласился жить в общежитии…» – «Дэ, – подхватил бородатый, – на сто двадцать рублей». – «А как насчет крылышек? – спросил я. – Или, скажем, сияния вокруг головы? Один на тысячу!» – «А нам всего-то один и нужен», – сказал горбоносый. «А если их всего девятьсот?» – «Согласны на девять десятых».

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

Я решил мыслить шире. Я написал своему старому другу — учёному. С учёными всё проще. Им не платят 300к в наносекунду, они не питаются латте на миндальном молоке. Их интересует наука. Их интересуют опыты, эксперименты и результаты.

За одним учёным потянулся другой. Учёные — на самом деле магниты для одарённых интеллектом людей. Найти разработчика после фразы «У меня в команде два физика-ядерщика» оказалось задачей куда проще.

И вот наша команда готова. В ролях:

  • Я: менеджер проекта, лидер, аналитик, идейный вдохновитель, мотиватор и прочее софт-скильное.

  • Иван: DS-инженер, «фотонщик-лазерщик».

  • Денис: фулстак-разработчик.

  • Роман: DS-инженер, AI-разработчик.

Выбор кейсов:

Выбор задачи — критически важный этап. Неинтересный или нереализуемый кейс может убить мотивацию в первую же рабочую сессию.

Забавно, что для каждой задачи организаторы прописали «Рекомендуемые роли» — что-то в духе «Датасаентист, Фронтенд-разработчик, Бэкенд-разработчик, Продакт-менеджер». Очень круто.

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

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

taskScore
taskScore

Итерационным методом сократили список до пяти самых интересных задач.

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

Итак, «Редактор лидарных карт для автоматического удаления динамических объектов». Про решение и технические нюансы можно будет прочитать в отдельной статье [статья пока не написана]. Там — без воды. Там — суровые харды.

Постановка процессов

В музыкальном мире говорят: «Гитару можно сделать из чего угодно, даже из Gibson, Fender и Ibanez». С процессами работает примерно так же.

Моя задача — обеспечить инженерам комфортную среду, но при этом чётко понимать, «где мы находимся».
Условия:

  • Срок: 14 дней.

  • Команда: 3 инженера и я, все в разных точках России.

  • Общий настрой: заряженный.

Учитывая эти факторы, я выбрал, на мой взгляд, самый подходящий для хакатонов фреймворк — Extreme Programming (XP). Подробно описывать его не буду, информации в сети много. Вот что я из него взял и «доделал под себя»:

  1. Коммуникация: постоянное присутствие.
    Мы запланировали график работы: с 16:00 до 2:00 по МСК. Условие было одно: если работаешь — зайди на сервер в Discord. Не нужно ничего говорить, возможно, ты будешь там один, но ты должен зайти. Так другие, возвращаясь с работы, видели: кто-то уже в деле. Легкая манипуляция на эмоциях или здоровый подход для формирования причастности?

  2. Одна обязательная встреча в день — а-ля стандартный дейли-митинг. Все рассказывали, что сделали, обменивались мыслями, разбирали непонятное.

  3. Прозрачность. Я открыл инженерам доступ к своим аналитическим доскам и документам, где вёл подготовку питча, анализа, плана, вопросов к представителям хакатона. Пока не знаю, как это повлияло (статья пишется до ретро), но цель была — показать, что я не просто «говорящая голова», а реально работаю.

  4. Парное программирование. Стак DS получилось запереть в одной комнате по счастливой случайности. Они работали вместе.

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

В итоге у нас получился вот такой Gantt-чарт (это один из снимков ближе к концу проекта). Здесь нет ничего лишнего: дата, дедлайн, заметки, встречи. Каждый ряд — отдельный специалист со своими задачами. Цветовые статусы.

В общем, получилось так, что каждый член команды абсолютно чётко видел, что от него требуется, и, главное, был с этим согласен.

Планирование и Дейлики

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

У нашей задачи была забавная условность: она принципиально отличалась от современных систем автопилотирования. Обычно мир использует комбинацию лидаров, радаров и камер. А нам достались только лидарные системы.

Здесь здорово проявил себя вид брейншторма «шесть шляп». Но есть разница между придумыванием решения стандартной бизнес-задачи и решением странной, не до конца изведанной истории.

Не всегда сразу понятно, обречена идея или нет. И «шляпа критика» не всегда может её сразу «развалить». В условиях хакатона, где нет времени на проверку гипотез, эту шляпу пришлось надеть каждому, вне зависимости от остальных.

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

Что там с индусами: в поисках недостающих пазлов мы закинули удочку в мировой океан знаний. И — клюнуло! Наши поиски вывели нас на работу учёных из Индии — Джойти Макаде и её коллег, которые как раз решали задачу фьюжна LiDAR и камер. План был прост и гениален: найти первоисточник, выйти на созвон и перенять опыт. Я написал письмо с предложением пообщаться и отправил его в Пуну. Ответа я жду до сих пор. Таков был мой первый блин в международном научном коммьюнити — комом. Если у вас есть успешный опыт «пробивания» к учёным — научите! Как наладить такой мост?

Первые результаты

Очень хочется написать, что всё прошло «по плану», согласно красивому Gantt-чарту. Но в этом хакатоне это было не про нас. Я планировал ровный темп, чтобы не сидеть безумно по ночам и успеть к мягкому дедлайну. Сделать всё за неделю, а вторую посвятить тестам и полировке.

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

Я собрал команду. Мы обсудили происходящее и поняли: задача сложнее, чем мы ожидали. Базовые навыки риск-менеджмента позволили мне предусмотреть и такой сценарий. Мы пересобрали Gantt, заново всё оценили. За первую неделю я выяснил истинные боли заказчиков, засыпав их бесконечным потоком вопросов, они не совпадали с тем, что было описано в предоставленном ими ТЗ. Например, в ТЗ они просили создать редактор лидарных файлов(с функцией удаления облаков), а в реальности, они уже пользовались отличной программой GLIM, которую переплюнуть в удобстве за 2 недели хакатона было бы крайне тяжело.

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

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

Сдаваться после 10 дней работы не хотелось никому. Поэтому запасаемся энергетиками, друзья. И пашем маленькими ручками. Это будет ЛЕГЕН...

Производство решения.

ДАРНО!!! — подумал я тогда.

Первая сложность была очевидной: в выходные люди готовы помочь, а в будни у всех дела. Разметку данных пришлось взять на себя. Всю ночь со вторника на среду я обрабатывал данные. Через четыре часа ко мне подключился ещё один человек, и через 6 часов массив был готов. Благо, я заранее расписал руководство по ручной обработке, планируя сделать это за 2 часа силами многих.

И вот мы в ситуации: до дедлайна — 48 часов. Из них 14 — на сон, 4 — на еду, 16 — на работу. Итого — 14 хардкорных часов.

Что можно сделать за 14 часов? — подумает неподготовленный читатель.
14 часов. Есть данные для обучения. Больше — ничего.

И тут наступил «День плохого ТЗ, убогого MVP и игнора».

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

Такую свободу можно дать только человеку, который знает своё дело и глубоко погружён в проект. Это очень рискованная комбинация, которая зависит и от самого человека, и от окружения. Благо, мне удалось создать нужную атмосферу свободой действий и своевременным погружением команды в контекст через регулярные резюме и суммаризации встреч.

Весь вечер я потратил на базовую презентацию, которая была ещё очень далека от питч-дека стартапа.

Ударный темп задан, но до дедлайна — один сон. А команда датасаентистов внезапно исчезла из интернета. Я проверил все их возможные места присутствия — нигде их не обнаружил. Даже подумал о самом плохом. Прождав ответа лишний час, я пошёл спать. Спалось плохо. Пессимистичные мысли лезли в голову: «Неужели все разбегутся в последний момент?»

Но настоящий лидер не имеет права транслировать такие мысли. Я искоренил их своим мощным эмоциональным интеллектом и стал надеяться на лучшее.

Финальный день

Я проснулся. Увидел в 3 ночи по МСК, что разработчик всё-таки что-то написал. Плюс датасаентисты в 9 утра отписались, что у них «уже что-то складывается с нейронкой». Обрадовался. Но — рано.

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

Вечером, когда я вернулся с работы, выяснилось, что разработчик случайно лег спать, не доделав интеграцию. Мы с остальными уже начали гуглить «Python-разработчик от нуля до сеньора за 1 час», но я решил применить способность «призыва людей». Написал паре проверенных разработчиков, один откликнулся, залетел в Discord, за 30 минут объяснил, что и как делать, как истинный техлид, — и ушёл в закат.

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

Я впервые так рисковал с дедлайном. Отправил решение в 1:59:36, когда до конца оставалось меньше полминуты. Целый фильм с Томом Крузом, а не хакатон.

Загружаю файлы на облако, копирую ссылки, открываю доступы, нажимаю заветную кнопку «Отправить решение» и... сайт начинает дико зависать... Сердце замерло. Но в итоге, отдышавшись, снова пошло. Сайт проглотил наше решение. Первый этап пройден.

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

Эпилог

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

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

Закончу одной цитатой: кто не ошибается — тот не молодец. Думайте.

А я пошёл проводить ретро. Может быть, мы этим составом поучаствуем где-то ещё.

Комментарии (5)