Хакатон на работе: расстраиваем босса, радуем программиста

Пост создан 2022-12-4

В этом посте используется специализированная лексика. Расшифровку можно посмотреть в конце статьи в разделе «Глоссарий»

В последний месяц 2022 года лиды из наших core-команд решили провести хакатон. Я никогда не была на хакатоне.

За семь лет весь мой опыт коллективного группового программирования укладывался в полчаса, когда мы с коллегой вдвоём красили кнопку (а она не красилась).

«Да, конечно» — скептично подумала я, «будет весело».

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

Через восемь часов, в обстановке крайней суеты, мы наконец-то собрали веб-приложение.

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

На этом историю можно было заканчивать, если бы только не одно но.

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

«Я ожидал все то, что у нас было, но еще немного больше», — задумчиво ответил лид.

«Что это значит?», — вопрошала я. «Разве мы не молодцы?»

Давайте разберёмся.

Что пошло не так 

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

Что мы пытались взять:

  • strapi;
  • Next.js;
  • Vercel (затем heroku);
  • GraphQL;
  • WebSockets;
  • OAuth;
  • Nivo (графики);
  • ... (я пришла к тому моменту, когда от половины идей отказались).

Напишем по Hello World и пойдем в бар

Неизвестный участник хакатона

В первые пару часов быстро стало понятно, что strapi – не то, что нужно для быстрого MVP; авторизовывать пользователей незачем; GraphQL не ложится в архитектуру (потому что архитектуры нет).

Время скипнулось до обеда.

Мы потеряли заинтересованную аудиторию из начальников.

Получается, технический лид прав, мы проиграли этот хакатон?

Усиление

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

Робкий голос одного из участников предложил: «А может, ну его нахрен, этот strapi?»

Голоса со всех сторон продолжили: «Тогда выкидываем и комнаты! Тогда и GraphQL! Будем класть JSON’ы!»

Мы резали фичи так же активно, как предлагали их утром. Если какая-то мысль обсуждалась дольше, чем 15 минут, на фичу ставилась печать «потом» и она сразу же откидывалась.

Через пару часов мимо моего носа проплыл ноутбук, на котором была моя вёрстка, причёсанная и обогащенная веб-сокетами. Кто-то ревьюил пулл-реквесты. Кто-то собирал графики на скудных тестовых данных.

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

За десять минут до дедлайна мы наконец-то собрали свое первое MVP, на лицах всех причастных была неописуемая реакция: радость, страх, недоверие.

Мы открыли приложения на своих телефонах... Заработало.

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

Почему разработчики довольны?

Это точно экраны, которые я рисовала?

Дизайнерка после просмотра демо

Я отчаянно рефлексировала над тем, что сказал технический лид. Как же так вышло, что он не разделяет нашу радость?

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

Однако, мы получили MVP – Minimal Viable Product – минимально жизнеспособный продукт.

Жил он только до тех пор, пока работал сервер технического лида. Требуются еще десятки пулл-реквестов, чтобы собрать реально конкуретноспособное приложение.

Выводы

Могли ли мы сделать лучше? Если кратко: да. Сделали ли мы плохо? Нет!

Чего не хватило в хакатоне (по моему мнению):

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

  • первоначального груминга технологий. При наличии второго дня, можно было бы потратить первый на обозначение технологий, списка задач и DoD – Definition of Done – точки, при которой мы заканчиваем разработку и переходим в тестирование;

  • разделения ответственности. Было бы здорово разбиться по маленьким группкам по 3-4 человека и не пытаться поучаствовать во всех задачах;

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

Хакатон дал нам больше, чем возможность собрать приложение.

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

  • Уверенность в своих силах и силах соседа.

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

Что касается моего скептичного отношения к хакатонам: я узнала, что все еще могу писать код спонтанно. А это и есть то, за что мне понравилась разработка.


Глоссарий

хакатон - hacker + marathon - закодить что-то в короткое время;

пулл-реквест – предложение изменений в код;

API – в данном контексте, запросы за данными и их ответы;

Окружение – условия, внутри которых работает и выполняется программа;

груминг – обсуждение и планирование задачи;