Хакатон на работе: расстраиваем босса, радуем программиста
В этом посте используется специализированная лексика. Расшифровку можно посмотреть в конце статьи в разделе «Глоссарий»
В последний месяц 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 – в данном контексте, запросы за данными и их ответы;
Окружение – условия, внутри которых работает и выполняется программа;
груминг – обсуждение и планирование задачи;