Привет, Хабр! С вами Любовь Давыдова из компании БКС. Занимаюсь развитием ИТ бренда работодателя в компании. Расскажу об одном из наших последних мероприятий.

В декабре мы с партнерами из «Сколково» провели свое первое онлайн-соревнование для разработчиков. Мы решили поделиться опытом организации мероприятия и примерами тематических задач.

Олимпиадный контекст

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

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

В соревнованиях BCS Coding Days приняли участие более 860 специалистов из десяти разных стран. Они боролись за призовой фонд в 1,5 млн рублей, а также предложения о сотрудничестве от организаторов и партнеров.

Всего было три трека — системный анализ, Android и Java. Кейсы к ним мы подобрали так, чтобы участники познакомились со спецификой работы инвестиционной компании, но не «утонули» в ней. Далее, приведем пару примеров задач и поделимся результатами.

Системный анализ

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

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

«Мы хотели познакомить участников с тонкостями бизнес-процессов инвестиционной компании, но большинство из них слишком специфические. Пришли к выводу, что оптимальным вариантом будет фронт личного кабинета «БКС Мир Инвестиций», Сергей Лобанов, руководитель группы системного анализа.

Также при составлении условий мы опирались на запросы пользователей. Сейчас в кабинете можно просматривать акции, валюту, фонды и облигации на российском и зарубежном рынках, но все это не всегда легко сравнивать. Поэтому в одной из задач нужно было проработать логику скринера ценных бумаг — в том числе предложить метрики и форму представления параметров (графики, таблицы).

Так сейчас выглядит раздел «Рынки» в нашем веб-приложении
Так сейчас выглядит раздел «Рынки» в нашем веб-приложении

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

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

Разумеется, в жюри не обошлось без дискуссий, связанных с выставлением оценок. Частым предметом споров была оптимальность интеграции решения с текущим технологическим стеком компании. В таких случаях последнее слово всегда оставалось за специалистом, отвечающим за развитие личного кабинета. Например, один из участников использовал в решении задачи готовый программный продукт стороннего поставщика. Такой подход имеет право на жизнь и свои преимущества, но в конкретном кейсе оказался не оправдан, поскольку приведет к серьёзным финансовым затратам при сопровождении в будущем.

Android-разработка

Кейсы мобильных разработчиков в инвестиционной компании достаточно специфические, но мы хотели представить интересную задачу, которую возможно решить за два дня соревнований. В итоге предложили разработать калькулятор инвестиций, помогающий новичкам подобрать облигации. Идея в следующем — пользователь задает в форме сумму, указывает опции для инвестирования (в рублях или валюте, ИИС или брокерский счет, с пополнением или без), а приложение рассчитывает доходность облигаций по известным методикам.

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

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

«Одно из условий задачи — расчёты должны быть понятны новичкам в инвестициях. Для них подход сильно отличается от профессионалов рынка. Победитель трека сделал акцент именно на этом. Кроме того, он предложил популярный продуктовый подход, который показывает хорошую эффективность в тех ситуациях, когда пользователь мало знаком с продуктом», Константин Петров, руководитель Android-разработки.

Дополнительные баллы мы присуждали за отсутствие багов и работу с современным стеком, который давал преимущество самим участникам. Некоторые использовали фреймворк Jetpack Compose. Он позволил сэкономить время на вёрстке интерфейса и уделить больше внимания бизнес-логике решения.

Java-разработка

На этом треке разработчики писали инструмент, собирающий актуальные данные о клиентском портфеле. По условиям задания, сообщения о составе портфеля клиента — списке ценных бумаг и их количестве — приходили из Kafka. Часть из них отражала текущее состояние портфеля, другая — происходящие в нем изменения. Участникам нужно было пересчитать цену портфеля, используя количество ценных бумаг и их актуальную стоимость.

Для запуска решений мы подготовили инфраструктуру. Например, реализовали вспомогательный сервис (user-catalog), который сопоставлял данные о клиенте из входящего запроса с информацией о клиенте, хранящейся в Kafka. Причем мы специально спроектировали его так, чтобы каждый ответ приходил за 300 мс. Таким образом мы хотели подтолкнуть участников к идее использовать возможности кеширования. Непосредственно данные о стоимости ценных бумаг (котировок) хранились в Redis и обновлялись с разной частотой.

Одной из наших главных задач было сделать так, чтобы участники занимались только разработкой и не волновались ни о чем другом. Для этого мы развернули Kubernetes, подготовили Helm-чарты с вариантами выбора БД и автоматизировали деплой микросервисов. Необходимые мощности нам предоставил партнер — G-Core Labs. На время соревнований облачный провайдер даже выделил специалиста, который оказывал техническую поддержку.

«Мы автоматизировали работу с конфигурационными файлами Docker, чтобы попробовать свои силы на этой задаче могли даже специалисты, не знакомые с виртуальной инфраструктурой», Ярослава Васильева, ведущий разработчик компании БКС.

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

«Также мы применили практики изоляции окружений. Каждый участник работал в собственном namespace — никто не мог подключиться к чужой базе данных и жульничать», Дмитрий Толокнов, Head of DevOps.

Архитектура системы автоматической оценки работ участников
Архитектура системы автоматической оценки работ участников

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

После автоматизированной проверки мы вручную отсмотрели решения участников из топ-10 и оценили качество кода. Оказалось, что мы не покрыли пару сценариев тестами, поэтому дополнительно их перепроверили. В итоге места перераспределились, но призы достались четырем лидерам «автоматического» рейтинга.


Что в итоге

К решению задач на BCS Coding Days подошли специалисты разного уровня, однако каждый из них получил обратную связь. На составление отчетов у нас ушло много времени и сил, но мы хотели, чтобы каждый участник узнал свои сильные и слабые стороны. В целом мы сформулировали несколько рекомендаций, которые помогут участникам подобных мероприятий чуть лучше понимать их «кухню» и точнее соответствовать ожиданиям организаторов:

  • Системным аналитикам (и не только) стоит четко продумывать спецификацию. Это — документ для разработчиков. Он может быть составлен по-разному, но в нем должна быть структура. Отдельное внимание стоит уделить схемам, диаграммам, графикам и таблицам.

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

  • Задавайте вопросы организаторам — они поделятся экспертизой, подскажут, на что обратить внимание [уже после события мы получили комментарии от участников, которые не смогли разобраться в ТЗ]. Также имеет смысл посетить тематические митапы перед мероприятием [раз и два] — на наших онлайн-мероприятиях мы предоставили множество подсказок о программных компонентах, с которыми придется работать.

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


  1. iMiKED
    24.02.2022 13:24

    Отличное мероприятие! Было очень интересно пообщаться с участниками, оценить их взгляд на системный анализ. Конечно, пришлось немало потрудиться, составляя задания и потом проверяя варианты решения. Спасибо нашей команде по треку системного анализа - Сергею Лобанову, Ире Петишевой и Роману Багрову - вместе удалось в сжатые сроки проверить задания и выставить итоговые баллы.

    Ребятки-финалисты, вы - молодцы!

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

    До встречи на следующих мероприятиях от BCS!