Всем привет! Я Ира Чернова
Хочу поделиться опытом участия в хакатоне от Совкомбанка.
Что это такое?
P.S. Хакатон - это соревнование для специалистов какой-то сферы, в основном это разработка, где нужно придумать\реализовать своё решение, за короткий промежуток времени.
Главная задача
Нам было необходимо командой от 1 до 5 человек создать систему для автоматизации процесса рекрутмента начиная от отклика кандидата и заканчивая его выходом на работу. Начало Пн 19:00 - дедлайн Вс 23:59.
Тут хочу указать, что хакатоны можно разделить на два вида:
Данный хакатон я отнесу ко второму виду, что делали и эксперты, открыто говоря, что хотят оценить ваши знания.
Требования к задаче:
Хочу поделиться опытом участия в хакатоне от Совкомбанка.
Что это такое?
P.S. Хакатон - это соревнование для специалистов какой-то сферы, в основном это разработка, где нужно придумать\реализовать своё решение, за короткий промежуток времени.
Главная задача
Нам было необходимо командой от 1 до 5 человек создать систему для автоматизации процесса рекрутмента начиная от отклика кандидата и заканчивая его выходом на работу. Начало Пн 19:00 - дедлайн Вс 23:59.
Тут хочу указать, что хакатоны можно разделить на два вида:
- Есть какая-то проблематика и которую нужно решить придумав своё уникальное и даже абсолютно новое решение (Сейчас это в основном ML, нейросети и DataScience).
- У вторых попроще, решение поставленной задачи. Она представляет из себя практически готовое ТЗ (Нужно то-то, должно быть то-то, интеграция с такими-то сервисами и т.п.). Такие хакатоны нацелены скорее на пиар компании и поиск новых специалистов, хотя и готовый в конце продукт могут забрать в своё использование, но это неточно:) Тут и времени даётся не 3 дня, а, например, неделя и в целом задания понятней.
Данный хакатон я отнесу ко второму виду, что делали и эксперты, открыто говоря, что хотят оценить ваши знания.
Требования к задаче:
- Реализация базы резюме;
- Ролевая модель;
- Этапы подбора.
Начало
Обычно я участвую в составе уже собранной команды, но тут участники сказали, что устали) Поэтому было принято решение искать команду самой. Благо Совкомбанк всё организовал и запилил чат в Телеграме где можно было закинуть предложение о поиске команды..
Целью было поучаствовать в роли frontend-разработчика + мобильные приложения. Но за 2 дня, (а время окончания регистрации уже поджимало), мне предложили поучаствовать в роли дизайнера + мобильные приложения. Так как у меня есть опыт во всех этих вещах, я соглашаюсь и по итогу получается команда из 4 человек:
Первые ощущения
После старта хакатона нам подробно описали задачу и ответили на вопросы. Я начинаю думать, да изи вообще, за неделю два таких продукта можно запилить, особенно после опыта в других хакатонах. Но пыл быстро утихает после созвона с командой).
Всё начинает идти как-то вяло. Сразу стоит отметить, что мои ожидания просто не совпали с реальностью, ничего более, ведь я впервые участвую с незнакомыми мне людьми. Участники команды "рабочие люди" и готовы были уделять только по 5 часов в день, кроме меня, после работы и за первые сутки была нарисована только схема БД бекендером.
Но работа шла, спланировали с чего начать, пообщались со знакомыми HR и накидали какую-то структуру, я начинаю делать дизайн и в начале выдаю итоговую схему на основе того, что обсудили в чате с командой.
Обычно я участвую в составе уже собранной команды, но тут участники сказали, что устали) Поэтому было принято решение искать команду самой. Благо Совкомбанк всё организовал и запилил чат в Телеграме где можно было закинуть предложение о поиске команды..
Целью было поучаствовать в роли frontend-разработчика + мобильные приложения. Но за 2 дня, (а время окончания регистрации уже поджимало), мне предложили поучаствовать в роли дизайнера + мобильные приложения. Так как у меня есть опыт во всех этих вещах, я соглашаюсь и по итогу получается команда из 4 человек:
- 2 бекендера на Java,
- Фронтендер на React+JS
- И я с CapacitorJS и Figma).
Первые ощущения
После старта хакатона нам подробно описали задачу и ответили на вопросы. Я начинаю думать, да изи вообще, за неделю два таких продукта можно запилить, особенно после опыта в других хакатонах. Но пыл быстро утихает после созвона с командой).
Всё начинает идти как-то вяло. Сразу стоит отметить, что мои ожидания просто не совпали с реальностью, ничего более, ведь я впервые участвую с незнакомыми мне людьми. Участники команды "рабочие люди" и готовы были уделять только по 5 часов в день, кроме меня, после работы и за первые сутки была нарисована только схема БД бекендером.
Но работа шла, спланировали с чего начать, пообщались со знакомыми HR и накидали какую-то структуру, я начинаю делать дизайн и в начале выдаю итоговую схему на основе того, что обсудили в чате с командой.
Получается такая логика:
Есть заказчик (это либо руководитель отдела, либо другая компания) - он создаёт заявку на поиск кандидата, описывает кто нужен, для чего нужен и зп. Там же при создании есть возможность сразу назначить исполнителя-рекрутера и добавить дополнительные этапы (тестовое и тех. собеседование) если требуется и тоже с закреплённым исполнителем. В дальнейшем заказчик только отслеживает статусы по заявке и участвует в этапах “ответ по кандидату”, а также в двух дополнительных если они есть и исполнитель он же.
Этапы воронки:
Далее есть рекрутер\HR который берёт в работу\назначает исполнителя и ведёт эту заявку. Заявка для рекрутера представляет из себя разделы с этапами и историей по каждому из них, со всеми участниками и действиями с ними. Также к заявке крепится созданная вакансия, которую можно разместить сразу на нескольких соответствующих сервисах с помощью интеграции и принимать отклики уже в системе, либо просматривать резюме, которые парсятся с тех же сервисов автоматически сразу после создания заявки по указанной в заявке должности.
Тут на сцену выходит роль кандидата. Тут всё просто. Есть личный кабинет со добавленными резюме, поиск вакансий и отклики и приглашения по ним. Из отличий от того же hh, то что этапы тестового и собеседований и их статус отображаются в отклике, можно получить задание и там же его загрузить на проверку. После чего летят уведомления заказчику и рекрутеру об этом.
Ещё были роли Админа, который пока мог только создавать новых пользователей и Руководителя, который может только просматривать статистику.
Есть заказчик (это либо руководитель отдела, либо другая компания) - он создаёт заявку на поиск кандидата, описывает кто нужен, для чего нужен и зп. Там же при создании есть возможность сразу назначить исполнителя-рекрутера и добавить дополнительные этапы (тестовое и тех. собеседование) если требуется и тоже с закреплённым исполнителем. В дальнейшем заказчик только отслеживает статусы по заявке и участвует в этапах “ответ по кандидату”, а также в двух дополнительных если они есть и исполнитель он же.
Этапы воронки:
- Новая;
- В работе, то есть ведётся поиск кандидатов;
- Ответ по кандидату от заказчика;
- Собеседование;
- Тестовое (опционально);
- Тех. собеседование (опционально);
- Оффер кандидату;
- Отказ\Выход на работу (заявка закрывается);
- Испытательный срок (опционально, заявка закрывается).
Далее есть рекрутер\HR который берёт в работу\назначает исполнителя и ведёт эту заявку. Заявка для рекрутера представляет из себя разделы с этапами и историей по каждому из них, со всеми участниками и действиями с ними. Также к заявке крепится созданная вакансия, которую можно разместить сразу на нескольких соответствующих сервисах с помощью интеграции и принимать отклики уже в системе, либо просматривать резюме, которые парсятся с тех же сервисов автоматически сразу после создания заявки по указанной в заявке должности.
Тут на сцену выходит роль кандидата. Тут всё просто. Есть личный кабинет со добавленными резюме, поиск вакансий и отклики и приглашения по ним. Из отличий от того же hh, то что этапы тестового и собеседований и их статус отображаются в отклике, можно получить задание и там же его загрузить на проверку. После чего летят уведомления заказчику и рекрутеру об этом.
Ещё были роли Админа, который пока мог только создавать новых пользователей и Руководителя, который может только просматривать статистику.
Самое интересное только начинается
Закидываю схему в чат на согласование, далее следуем этой структуре, я до 3 утра пилю дизайн под это всё (а в 8 уже рабочий день). Где-то меня заносит и я добавляю новые фичи, в надежде, что мы успеем это реализовать, где-то делаю стандартные функции. Был ещё доп. функционал, вроде календаря событий, заметок, но мысли уже тогда были, что с таким темпом мы не успеем.
Один из примеров страницы:
Закидываю схему в чат на согласование, далее следуем этой структуре, я до 3 утра пилю дизайн под это всё (а в 8 уже рабочий день). Где-то меня заносит и я добавляю новые фичи, в надежде, что мы успеем это реализовать, где-то делаю стандартные функции. Был ещё доп. функционал, вроде календаря событий, заметок, но мысли уже тогда были, что с таким темпом мы не успеем.
Один из примеров страницы:
К концу второго дня уже был готов Swagger, запросы на авторизацию, регистрацию, создание пользователей. Естественно перенёс структуру на готовую БД (PostgreSQL). Основные сущности в проекте были Заявки, Вакансии, Резюме, События, Отклики, Навыки, Пользователи.
Вечером frontend только разворачивает проект с каким-то готовым шаблоном и даёт нам доступ к репозиторию. Backend настраивает там CI/CD и заливает на рабочий сайт.
Совкомбанк предоставил для каждой команды репозиторий в GitLab (правда с одним аккаунтом для всех) и Яндекс.Облако где можно было развернуть свой сайт. Но мы сделали отдельный репозиторий где был backend и frontend и работали поначалу там. Я также настраиваю среду, настраиваю билд apk под андроид, проверяю что всё работает и занимаюсь дальше дизайном.
Проходит ещё день, а на стороне frontend ничего не происходит. Сам фронт перестал выходить на связь. На созвоне решаем дождаться окончания дня и если он не объявится, то web делаю уже я. Я уже начинаю понимать, что могу не вывезти, так как надо доделать дизайн, потом делать фронт, а ещё презентацию для питчинга и что сам питчинг скорее всего ляжет тоже на меня. Но сливаться не хотелось, поэтому доделываю дизайн и сажусь за фронт.
Разворачиваю проект на Vue.js, пилю основу - store, router, переношу основу для дизайна. Делаю меню, шапку, адаптив, быстро делаю смену на тёмную/светлую тему, форму авторизации/регистрации, но пока без основного функционала. Начинаю отправлять запросы через axios и создаю пользователей для каждой роли.
Запросы были сделаны с авторизацией по JWT-токену (который пользователи получали при авторизации через запрос login), а также были ограничения на бекенде по ролям.
Вечером frontend только разворачивает проект с каким-то готовым шаблоном и даёт нам доступ к репозиторию. Backend настраивает там CI/CD и заливает на рабочий сайт.
Совкомбанк предоставил для каждой команды репозиторий в GitLab (правда с одним аккаунтом для всех) и Яндекс.Облако где можно было развернуть свой сайт. Но мы сделали отдельный репозиторий где был backend и frontend и работали поначалу там. Я также настраиваю среду, настраиваю билд apk под андроид, проверяю что всё работает и занимаюсь дальше дизайном.
Проходит ещё день, а на стороне frontend ничего не происходит. Сам фронт перестал выходить на связь. На созвоне решаем дождаться окончания дня и если он не объявится, то web делаю уже я. Я уже начинаю понимать, что могу не вывезти, так как надо доделать дизайн, потом делать фронт, а ещё презентацию для питчинга и что сам питчинг скорее всего ляжет тоже на меня. Но сливаться не хотелось, поэтому доделываю дизайн и сажусь за фронт.
Разворачиваю проект на Vue.js, пилю основу - store, router, переношу основу для дизайна. Делаю меню, шапку, адаптив, быстро делаю смену на тёмную/светлую тему, форму авторизации/регистрации, но пока без основного функционала. Начинаю отправлять запросы через axios и создаю пользователей для каждой роли.
Запросы были сделаны с авторизацией по JWT-токену (который пользователи получали при авторизации через запрос login), а также были ограничения на бекенде по ролям.
Бекендеры начали делать интеграцию с SupeJob.
Отдельная тема про сервисы про SuperJob, HH.ru. Организаторы сообщили, что достаточно сделать просто заглушку, важна была сама структура реализации, как это будет происходить. Но мы не хотели набивать вручную данные, да и в задаче интеграция шла как плюс.
Поэтому мы пошли к API этих сервисов, поняли, что это платно и написали в поддержку с вопросом, возможно ли дать какой-либо доступ на время хакатона хакатона. SuperJob ответили в тот же день и дали недельный доступ, HH.ru ответили в понедельник и тоже дали бесплатный доступ, поздно, хакатон уже завершился, но спасибо и на этом. Так же мы обсудили на созвоне ещё источники для резюме и функционал для кандидатов и второй бекендер стал делать telegram бота, через который можно было разместить резюме и подписаться на уведомления о вакансиях.
Отдельная тема про сервисы про SuperJob, HH.ru. Организаторы сообщили, что достаточно сделать просто заглушку, важна была сама структура реализации, как это будет происходить. Но мы не хотели набивать вручную данные, да и в задаче интеграция шла как плюс.
Поэтому мы пошли к API этих сервисов, поняли, что это платно и написали в поддержку с вопросом, возможно ли дать какой-либо доступ на время хакатона хакатона. SuperJob ответили в тот же день и дали недельный доступ, HH.ru ответили в понедельник и тоже дали бесплатный доступ, поздно, хакатон уже завершился, но спасибо и на этом. Так же мы обсудили на созвоне ещё источники для резюме и функционал для кандидатов и второй бекендер стал делать telegram бота, через который можно было разместить резюме и подписаться на уведомления о вакансиях.
Финишная прямая.
В субботу приступаю к основному функционалу и вникаю что там с запросами на бекенде и понимаю, что снова всё пошло не по плану. Событий нет, Заявки, которые планировались как отдельная сущность в итоге превратились в единое целое с Вакансией, из-за чего теряется половина функционала, задуманного для рекрутера. Этапы относятся к заявке, хотя должны были к кандидатам по этой заявке, т.к. это целевые действия для того же заказчика. На вопрос в чате: "Почему так?" сказали, что так проще… Заметить это изначально просто глядя на запросы в swagger было трудно, по заявкам я думала, что они будут сделаны потом. Ведь мы согласовали логику проекта в чате, что могло пойти не так…
Работаю дальше уже с тем что есть и к 5 утра воскресенья сделан весь фронт - создание заявки/вакансии, редактирование, поиск резюме, их просмотр, создание, отклики, их отправка и приглашения, работа по заявке, смена этапов, поиск по вакансиям и резюме. Весь интерфейс разделён в зависимости от текущей роли. Из-за изменений в беке, пришлось менять дизайн находу. Под все страницы сделан адаптив. И вот вроде всё хорошо, есть что показать и потыкать теперь экспертам, но надо делать ещё презентацию и появляется проблема с авторизацией на андроид. Если её не решить, то и приложения не будет.
Организаторы дали структуру презентации и снова было заметно отличие хакатона. Презентация представляла из себя инструкцию, какой стек использовали, какие решения по итогу сделали, как реализована безопасность, ссылки на все описания/структуры и артефакты, которые получились в ходе работы, ссылка на readme, в котором подробно описано, как запустить проект. Не было описания проблематики, чем был бы полезен продукт, не было экономического анализа, что сколько стоит, какая стоимость дальнейшего развития и поддержки проекта.
Прямо перед окончанием сдачи решений - разбираемся с авторизацией на андроид, описываем readme и допиливаем презентацию. Конечно, с функционалом получилось слабо, но упор был сделан также на дизайн, ещё на QA сессии сказали, что это важный критерий и даже презентация будет оцениваться. Презентацию можно посмотреть по ссылке
Осталось дождаться списка финалистов и возможно защиты. В финал как нам сообщили, проходят 15 команд, по итогу 10 команд получают мерч и 3 денежных призовых места. К питчингу проекта мы заранее не готовились, в 14 часов выдают список финалистов, в который попали мы, а в 17 уже защита, а мы выступаем вторые. Защита на мне, т.к. у других участников опыта нет вообще, а у меня и опыт выступлений есть и Сама думаю, надо добивать себе место хотя бы на мерч 🙂. Быстренько накидываю речь, чуть меняю презентацию, записываю скринкасты продукта и телеграм бота, всё по опыту в других хакатонах и снова облом… Достаточно было просто пролистать презентацию и показать работу проекта в реалтайме, хотя скринкаст всё равно хорошо сработал.
Результаты через два дня.. Всего зарегистрировалось 962 участника, было сформирровано 240 команд и 42 дошли до финала с готовыми решениями из них мы заняли 6 место. На финале отметили достойный дизайн и единственные у кого была полная адаптация под мобильные устройства, что лично меня удивило. Ну на мерч заработали))
Отдельно хочу отметить команду, занявшее 4 место, а точнее это был один человек, который написал достойный продукт. Мне бы ещё ныть из-за нехватки времени))) Но и рада что мы не 4, т.к. это самое обидное место, проверено).
Ну и команда победителей из 5 участников, где все являются разработчиками. Сделали очень много, даже видеозвонки запилили и на защите видео с анимациями сделали.
В целом хочется отметить организацию мероприятия, которая была на уровне. Всё понятно, на вопросы в чатах оперативно отвечали, QA сессии проводили, индивидуальные чекпоинты тоже, эксперты толково отвечали на вопросы.
Из мерча - Заявляли о футболке, сумке на пояс, рюкзаке и толстовке, а по итогу только футболка, сумка на пояс и грамота, ну и пакет с логотипом тоже)) Это, наверное единственный минус)).
Сделанные мной выводы по итогу:
В субботу приступаю к основному функционалу и вникаю что там с запросами на бекенде и понимаю, что снова всё пошло не по плану. Событий нет, Заявки, которые планировались как отдельная сущность в итоге превратились в единое целое с Вакансией, из-за чего теряется половина функционала, задуманного для рекрутера. Этапы относятся к заявке, хотя должны были к кандидатам по этой заявке, т.к. это целевые действия для того же заказчика. На вопрос в чате: "Почему так?" сказали, что так проще… Заметить это изначально просто глядя на запросы в swagger было трудно, по заявкам я думала, что они будут сделаны потом. Ведь мы согласовали логику проекта в чате, что могло пойти не так…
Работаю дальше уже с тем что есть и к 5 утра воскресенья сделан весь фронт - создание заявки/вакансии, редактирование, поиск резюме, их просмотр, создание, отклики, их отправка и приглашения, работа по заявке, смена этапов, поиск по вакансиям и резюме. Весь интерфейс разделён в зависимости от текущей роли. Из-за изменений в беке, пришлось менять дизайн находу. Под все страницы сделан адаптив. И вот вроде всё хорошо, есть что показать и потыкать теперь экспертам, но надо делать ещё презентацию и появляется проблема с авторизацией на андроид. Если её не решить, то и приложения не будет.
Организаторы дали структуру презентации и снова было заметно отличие хакатона. Презентация представляла из себя инструкцию, какой стек использовали, какие решения по итогу сделали, как реализована безопасность, ссылки на все описания/структуры и артефакты, которые получились в ходе работы, ссылка на readme, в котором подробно описано, как запустить проект. Не было описания проблематики, чем был бы полезен продукт, не было экономического анализа, что сколько стоит, какая стоимость дальнейшего развития и поддержки проекта.
Прямо перед окончанием сдачи решений - разбираемся с авторизацией на андроид, описываем readme и допиливаем презентацию. Конечно, с функционалом получилось слабо, но упор был сделан также на дизайн, ещё на QA сессии сказали, что это важный критерий и даже презентация будет оцениваться. Презентацию можно посмотреть по ссылке
Осталось дождаться списка финалистов и возможно защиты. В финал как нам сообщили, проходят 15 команд, по итогу 10 команд получают мерч и 3 денежных призовых места. К питчингу проекта мы заранее не готовились, в 14 часов выдают список финалистов, в который попали мы, а в 17 уже защита, а мы выступаем вторые. Защита на мне, т.к. у других участников опыта нет вообще, а у меня и опыт выступлений есть и Сама думаю, надо добивать себе место хотя бы на мерч 🙂. Быстренько накидываю речь, чуть меняю презентацию, записываю скринкасты продукта и телеграм бота, всё по опыту в других хакатонах и снова облом… Достаточно было просто пролистать презентацию и показать работу проекта в реалтайме, хотя скринкаст всё равно хорошо сработал.
Результаты через два дня.. Всего зарегистрировалось 962 участника, было сформирровано 240 команд и 42 дошли до финала с готовыми решениями из них мы заняли 6 место. На финале отметили достойный дизайн и единственные у кого была полная адаптация под мобильные устройства, что лично меня удивило. Ну на мерч заработали))
Отдельно хочу отметить команду, занявшее 4 место, а точнее это был один человек, который написал достойный продукт. Мне бы ещё ныть из-за нехватки времени))) Но и рада что мы не 4, т.к. это самое обидное место, проверено).
Ну и команда победителей из 5 участников, где все являются разработчиками. Сделали очень много, даже видеозвонки запилили и на защите видео с анимациями сделали.
В целом хочется отметить организацию мероприятия, которая была на уровне. Всё понятно, на вопросы в чатах оперативно отвечали, QA сессии проводили, индивидуальные чекпоинты тоже, эксперты толково отвечали на вопросы.
Из мерча - Заявляли о футболке, сумке на пояс, рюкзаке и толстовке, а по итогу только футболка, сумка на пояс и грамота, ну и пакет с логотипом тоже)) Это, наверное единственный минус)).
Сделанные мной выводы по итогу:
- Такие хакатоны мне не особо заходят. Хочется делать что-то сложное, новое, полезное, а не чьё-то ТЗ.
- В сборных командах как капитан больше уделять времени обсуждениям и следить, чтобы все придерживались общего плана. Постоянная связь и мотивация команды важны.
- Брать выходные на работе если реально нацелен победить, иначе не хватит времени и здоровья)
- Заранее проверить участников команды, пообщаться с ними вживую, чтобы понять их настрой и заинтересованность и определить, свалит кто-то в середине или нет.