Победа на VK Hackathon 2018
Как я уже говорил, хотел попасть на хакатон несколько лет, но был не готов делать проект в таких интимных условиях с незнакомыми людьми, а из знакомых никто не отзывался что-то. И вот в этом году Гриша позвал меня участвовать.
Вообще, ещё в середине процесса я понял, что здесь именно та атмосфера, на которую я рассчитывал. Получил в точности желанный мною экспириенс от этого мероприятия. В работе программиста есть определенная романтика, одной из составляющих которой является, например, кодинг ночью и кодинг в условиях длительной непрерывной концентрации. Так вот хакатон возводит эти вещи в абсолют, и поэтому интересен. К тому же, было любопытно испытать конкретно свои силы в подобных условиях. Плюс полезный опыт: нужно вложить максимум своих способностей, максимум своего внимания, уметь быстро выделить самое нужное и не застрять в мелочах.
Кодинг без сна
Первый день показалось, что много времени убили почти впустую на всякую отладку и подводные камни. Начали в 17, ушли около 5 утра. Кому-то удалось поспать 5 часов, но это максимум. Было чувство, что не успеваем совсем.
Второй день кодили почти непрерывно с 11 утра субботы до 11 утра воскресенья. Разумеется, не спали. Прогулялись пару раз, прерывались на еду. Некоторые крупные модули начинали делать уже заполночь, и всё равно реализовали не в точности в том виде, как хотели, но хотя бы вышла рабочая демка.
Ночью сознание совсем плыло. Я уже не особо понимал, что происходит, не мог воспринимать внешнюю среду, не слышал вопросы. У меня в мозгу остался единственный узкоспециализированный процесс, отвечающий за программирование.
На дни хакатона я снял небольшую студию в двух шагах от Главного Штаба, где проходило мероприятие. В итоге побывал в этой квартире всего лишь около 4 часов суммарно, за два дня.
Последнее обновление мы отправили в репозиторий в 10:55 утра воскресенья (предоставление репозиториев со всем процессом создания было частью условий хакатона, что логично), за 5 минут до окончания. Затем в таком состоянии после суток программирования нужно было презентовать проект партнёрам, которые, собственно, и формировали пул задач. Меня сразу порадовал вопрос от партнёров «Уже сделано, да?», то есть они прекрасно понимали, что законченный продукт после хакатона не выйдет, и возможно не ожидали даже рабочей демки.
По результатам 20 команд из ~120 вышли в финал и уже презентовали на большой сцене перед судьями.
Немного технических подробностей
Конкретно мы делали приложение для системы организации доноров крови DonorSearch.org. Делали на платформе VK Apps.
В команде два фронтендера (Vuejs): я и Лёша, и два бэкендера (C#): Гриша и Лена.
Партнёрами нам было предоставлено API для получения станций переливания и некоторые тестовые данные, но копию БД пришлось поднять у себя. Проблем по пути возникло множество: например, мой сервер в какой-то момент отрубался от большого количества подключений к нему (была гипотеза, что у маршрутизаторов в зале не выдерживает 22 порт SSH) и доступ к управлению базой мы теряли, хотя бэкенд работал. Ещё возникали самые непредвиденные баги связанные с портированием официальной библиотеки VKUI с React на Vue и особенностями подхода этих движков к отрисовке.
За минуту до презентации перед партнёрами мы увидели, что у нас в production build слетел наш кастомный красно-белый стиль. Вообще, мы внезапно наткнулись на нерешённый баг в webpack и убили на него тоже какое-то время, но помогло это не до конца. Тестировали всё на dev build, кто бы мог подумать, что в современных инструментах разработки есть баги настолько критичные, что вызывают разное поведение в версии для разработки и в конечной сборке.
А уже после презентации выяснилось, что приложение не совсем корректно работает у новых пользователей при первом запуске. Но менять уже ничего было нельзя.
Всего мы отправили около 90 коммитов во фронтенд и столько же в бэкенд. На бэкенде вышло 2219 строк кода, а на фронтенде внезапно 15664, но это из-за package-lock.json, который содержит >10000 строк, а ещё SVG-иконок, которые содержат суммарно около 2000 строк. Настоящих строчек около трёх тысяч.
Про продукт
У нас было несколько целей и несколько групп потенциальных пользователей.
Во-первых, те, кто уже вовлечён в процесс сдачи крови — для них мы предложили таймлайн с организацией шагов по каждой донации в виде событий-карточек с интерактивными элементами. Например, перед донацией появляется карточка с памяткой, нажатие на которую открывает список того, чего нельзя делать за сутки-двое до сдачи. И конечно заранее приходит уведомление с напоминанием. А на карточке самой донации есть адрес центра и возможность загрузить в систему фотографию-справку с подтверждением (так система проверяет и ведёт статистику).
Во-вторых, те, кто только пришёл. Для них у нас подробные описания сложных моментов, карточки-подставки, а также учёт станций, которые принимают новичков (не все станции готовы принять того, кто сдаёт первый раз в жизни).
Ещё есть карта с изображением тех станций, которым нужна кровь той группы, которую указал текущий пользователь, и если он подходит им по другим параметрам (допустим, наличие регистрации в том городе, где хочет сдать).
Я вот в теме полный профан, и я не знал, что нельзя просто в любой момент прийти и сдать. Ну это ведь кровь, она всегда нужна! Оказалось нет, у станций бывает переполнение (точнее — лимит возможностей по обработке донаций) и они не принимают кровь каких-то групп в эти периоды. Всё это мы учли.
На момент написания этой статьи демка приложения есть вот тут, но неизвестно, запустится ли она у вас, потому что:
- Мы можем прямо сейчас её переделывать и, например, удалить всю базу данных
- API партнёра могут переделывать, и наше приложение перестанет его понимать
- Могут быть какие-то редкие условия, которые мы просто не учли
И партнёры и мы намерены продолжать работу и довести дело до релиза полноценного продукта. А площадка VK Apps настроена разместить нас в каталоге сервисов ВКонтакте, который доступен с мобильных клиентов.
Финал
После презентации перед партнёрами в состоянии «не спал больше суток, занимаясь сложной интеллектуальной работой в состоянии стресса и сжатых сроков» мы вышли в финал и нужно было ещё и презентовать продукт на главной сцене.
Время на презентацию было ограничено тремя минутами, это очень очень мало, я говорил максимально быстро, пропускал слайды, и всё равно не уложился.
Я уже на презентациях понял, что мы весьма на уровне, хотя утром у меня было ощущение «Ничего не успели, провал». Ещё и презентацию фактически делали второпях под конец, не успели навести лоск, взяли шаблон.


Работы оценивались по семи критериям:
- уникальность/актуальность идеи проекта;
- соответствие поставленной в кейсе задаче;
- практическая применимость, возможность внедрения и использования;
- дизайн и функциональность (наглядность, понятность интерфейса);
- техническая (технологическая) реализуемость прототипа;
- качество представления информации и проведения презентации прототипа;
- законченность.
Всё логично. Ты можешь делать что-то своё, но тогда получишь ноль баллов по второму пункту и должен сильно выделиться по всем остальным. Или, скажем, можешь использовать всякий сложный «машин-лёрнинг», но отстать в практической применимости и дизайне. Были и такие примеры — люди приходили с интересной технологией, которую непонятно, куда девать. Или люди сделали много всего, но на базовых шаблонах и браузерных визуальных элементах.
Была номинация в каждом из направлений: Технологии, Культура, Городская среда, Благотворительность, Медиа, Образование. Победители в рамках направления получали по 100 000 на команду.
Отдельно шли категории «Выбор ВКонтакте» и «Выбор коллег» (голосование среди участников хакатона) — обе взяла одна и та же команда, получив по 200 000 и 100 000 на команду соответственно.
Когда объявили победителя в блоке «Благотворительность», и это оказались не мы, я расстроился, потому что мне казалось, что мы в целом чуть лучше конкурентов. Сидел в смешанных чувствах до самого конца. Я понимал, что сам хакатон мне понравился в любом случае, но на награду хотя бы в рамках направления я тоже весьма рассчитывал.
И потом в конце объявили главных победителей — наша команда «Рабочее название».
Эмоции я перевариваю до сих пор, но на такую серьёзную победу в первом же хакатоне в своей жизни я не рассчитывал даже в самых смелых мечтах. Оказалось, по сумме баллов мы опередили всех. Были отдельные приложения, которые красивее нашего. Отдельные те, которые технически совершеннее. Среди презентаций так вообще многие были на голову выше (в одной из команд даже была художница, которая нарисовала всю презентацию целиком). Но вот именно баланс всех нужных характеристик у нас оказался максимальным: потенциально актуальное, технически современное, визуально приятное и работающее приложение, решающее понятную задачу.
Замечания организаторам
Некоторые люди в чате участников были недовольны буквально всем подряд. А ещё некоторые люди писали мне сообщения о том, что ВК Хакатон ужасен, организация отстой, места куплены.
Как я уже говорил выше, я ещё в середине понял, что мне очень нравится, и я получаю все нужные мне эмоции и опыт, за которыми пришёл. Хакатон проводился в Главном Штабе — было приятно по нему гулять, хватало зон для «посидеть и обсудить какой-то нюанс».
Кормили трижды в день, весьма неплохо. Как раз простая пища, которая не отвлекает своей изысканностью, а позволяет банально удовлетворить потребности организма и вернуться к работе. Пловы, мясо с овощами, сосиски, макароны. Бесконечный чай/кофе и сладости — очень кстати!
В чате кто-то жаловался, что сложно постоянно проходить через проверку при входе (скан сумки + рамка). Мне кажется, правильный ответ на эту проблему: бросать курить. Другой причины выходить из здания много раз банально нет.
В общем, организация весьма порадовала. Выражаю благодарность команде ВК и команде волонтёров.
Но есть и замечания.
Во-первых, тесновато. У меня дома для одного стоит стол примерно такого же размера, как там был для четверых. Мы с Гришей упирались ноутбуками друг в друга. Для прохода между рядами (то есть, каждый раз, когда в принципе встаёшь из-за стола), приходилось отвлекать сидящих людей и просить их подвинуться. Главный Штаб очень большой, имело смысл договориться о выделении трёх залов, а не двух.
Во-вторых, сетевые фильтры под столами были такими, что свои ноутбуки мы могли воткнуть в них только с очень значительным усилием.
Ну и несколько интересных наблюдений
Команды со всякими смешными названиями большей частью в финал не прошли. Наше «Рабочее название» на грани. Но если команда называлась как-то типа «Где был Вася», то почти в 100% случаев её участники не смогли предложить ничего интересного. Совпадение? Не думаю.
90% парней. Ладно, допустим, конкретно программированием в патриархальной России девушки занимаются мало. Но где дизайнерши и художницы?
Некоторые команды пришли по приколу явно без каких-то амбиций, делали что-то совершенно не соответствующее направлению, активно кидали во все чаты, одна из команд даже продвигала своё крайне примитивное приложение с помощью рекламы ВКонтакте, это было забавно, но подобные команды отняли место у каких-то других людей, которые могли бы отнестись более серьезно. Надеюсь, организаторы учитывают опыт предыдущих хакатонов при рассмотрении заявок на новые.
