Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Привет, Хабр! Хотим познакомиться поближе и запускаем серию статей «IT-команды в Quadcode»: будем подробно рассказывать о наших технических командах и отвечать на ваши вопросы. Текст будет полезен всем, кто хочет узнать, как работают IT-специалисты в финтехе. Начнём с Trading Platform: о процессах, проектах и собеседованиях в команде читайте в статье.
Начало: как команда появилась в Quadcode и чем она занимается
Trading Platform сформировалась в 2020 году из специалистов двух команд: Market Gateways и Trading Cluster. Обе команды занимались торговыми инструментами:
Trading Cluster работала с инструментами, которыми уже давно пользовались клиенты (например, опционами).
А Market Gateways была своеобразной R&D (research and development) командой и разрабатывала новые инструменты (например, криптобиржу).
Чтобы быстрее достигать бизнес-целей, две команды решили объединить в одну — Trading Platform.
Чем занимается команда
Флагманский продукт Quadcode — SaaS-платформа, клиенты — трейдинговые компании. Платформа предоставляет им возможность создавать брокеров с широкой линейкой торговых инструментов, среди которых Digital и FX-опционы, маржинальный Forex.
Эти инструменты в виде микросервисов (торговых движков) разрабатывает, модернизирует и поддерживает команда Trading Platform.
Например, сейчас в работе инструмент для инвестиций — это три микросервиса, которые позволяют клиентам покупать и продавать акции. Он работает по принципу классических инвестиций.
Из прошлых разработок команды можно отметить маржинальный Forex. Проект оказался большим и нагруженным, необходимо было работать с маржинальным балансом, который пересчитывается на каждую котировку (примерно четыре раза в секунду). На платформе десятки вариантов активов: например, акции, криптовалюты, золото и другие.
Для маржинального Forex команда впервые применила шардирование: развернула два экземпляра приложения, каждый из которых обслуживает свою часть клиентов.
Звучит это довольно легко, но на деле нужно было решить различные инженерные задачи: например, организовать отправку сообщений (роутинг) в нужный экземпляр приложения и корректно собирать данные с двух приложений для отчётов.
Сейчас маржинальным Forex пользуются 20 000 клиентов, которые держат открытыми 50 000 позиций.
Немного в стороне от торговых микросервисов стоит микросервис внутреннего биллинга. Его задача — предоставлять интерфейс для хранения балансов пользователей и работы с ними. С внутренним биллингом взаимодействует внешний биллинг, обрабатывающий заявки на ввод и вывод денег, торговые движки, клиентские приложения. База данных внутреннего биллинга постоянно растёт и обрабатывает десятки запросов в секунду. Сейчас команда Trading Platform работает над задачей, которая аналогична шардированию маржинального трейдинга. Это позволит поставить вторую базу для внутреннего биллинга и тем самым распределить нагрузку.
Стек и команда
Стек
Стек в команде монолитный:
Ребята пишут на Golang, а автотесты — на Java.
Из баз данных — PostgreSQL. В команде используют: хранимые процедуры, CTE, декларативное партиционирование, систему очередей PgQ.
Компания использует собственную шину данных IQ Bus. В команде Trading Platform разработали кодогенерацию для работы с шиной, в её основе — собственный язык описания контрактов IqDL.
Кодогенерация позволила значительно сократить затраты на разработку: шаблонный код (для работы с транспортом, базами данных, метриками, логированием, документацией и т. п.) генерируется автоматически, разработчики сконцентрированы только на бизнес-логике. А язык IqDL теперь активно использует вся компания.
Команда
Сейчас в команде девять человек. Это тимлид, пять Golang-разработчиков и три тестировщика: один занимается ручным тестированием (QA Engineer), двое — автоматизацией тестирования (QA Automation).
В перспективе QA Engineer тоже станет QA Automation: в команде везде, где возможно, отказываются от ручного тестирования. Также постепенно переходят на флоу, при котором автоматические тесты стартуют параллельно с разработкой.
У разработчиков есть специализация, которая возникла естественным образом: кто-то из ребят ближе к одному микросервису, кто-то к другому. Например: один занимается маржинальным трейдингом, второй — маржинальным трейдингом и внутренним биллингом, третий — опционами, четвёртый — микросервисом инвестиций. При этом ребята в команде стараются расширять экспертизу и много общаются.
Команда опытная: среди пять разработчиков три сеньора и два мидла. Все пишут на Golang, а у половины ребят в бэкграунде C++. Кстати, когда ищут в команду новых коллег, то обращают внимание на резюме разработчиков C++, потому что (как показала практика) с опытом на плюсах можно относительно легко переучиться на Golang.
Об опыте перехода с C++ на Golang мы попросили рассказать Алексея, который раньше работал разработчиком в команде Trading Platform.
Алексей Черных
Architect в Quadcode
Переход с C++ на Golang был на удивление прост. С++ — педантичный язык, который позволяет получить максимально точное представление о выполняемом коде, но при этом многословен, изобилует конструкциями и модификаторами. Код довольно сложно автоматически генерировать. И C++ — это только язык. Библиотечные зависимости, code style и другие задачи, которые являются частью современной разработки, в каждом проекте решаются по-разному.
Golang — полноценный инструментарий, весь синтаксис языка можно уместить на стикере, утилита автоформатирования, поддержка модулей, профилирования, санитайзеров, юнит-тестирования, code coverage и другие вспомогательные инструменты включены в поставку и отлично работают, код языка прекрасно адаптирован для автогенерации.
Для уверенного использования Golang в разработке нашей команде потребовалось приблизительно полгода. Чтобы полностью освоить синтаксис языка, достаточно пройти официальный Go Tour. Дальше начинается специфика применения. Рекомендую подробно разобраться с главными особенностями языка — горутинами и каналами, а также освоить ресурсы Effective Go и Go Code Review Comments, они сократят время поиска ответов на вопросы: «А как тут..?» Вопросов этих в начале пути будет довольно много. На большинство из них в комьюнити уже есть ответы, и способы решения многих задач отличаются от принятых в C++. Но это не значит, что они хуже, они другие и зачастую более лаконичные.
Язык сохраняет своё родство с C++, мне кажется, именно разработчики, мигрирующие с этого языка, показывают наилучшие результаты в разработке на Golang. Хотя, может быть, дело в том, что C++ просто навсегда изменил наш мозг. Что касается производительности языка и разработчика: Golang быстр в компиляции, программы достаточно эффективны в рантайме, процесс разработки более сосредоточен на выполняемой задаче и позволяет решить её быстрее.
Сейчас я перешёл от разработки приложений к следующей ступеньке в разработке ПО — охвату всего программного комплекса компании, занимаю должность архитектора. На этом этапе требуется освоение новых паттернов организации систем, понимание специфики использования большого количества применяемых технологий. Именно опора на знания разработчика зачастую помогает правильно понять проблематику и успешно решать задачи бизнеса.
Ещё Trading Platform можно назвать «кузницей кадров»: три разработчика перешли в архитектурную команду, а один даже стал главным архитектором в Quadcode :) Почему так: в команде талантливые ребята, а в Quadcode поощряется развитие и рост сотрудников.
Сейчас команда работает удалённо, при желании можно приезжать в офис.
Роман Мальцев
QA Automation в Quadcode
Я работаю QA Automation в Quadcode больше года, живу в Ростове-на-Дону. В целом опыт удалённой работы положительный, много плюсов. Например:
— Экономия времени: не нужно ехать из дома на работу и обратно.
— Можно «ходить на работу» в трениках.
— За последние два года компании научились организовывать удалённую работу, поэтому в рабочем процессе тоже нет проблем.
А вот явных минусов в удалёнке не вижу :)
Процессы в команде
Как и любая продуктовая команда, Trading Platform вписана в общие процессы компании. В Quadcode есть квартальное планирование, оно длится неделю: на нём ребята понимают, какими задачами будут заниматься в этом квартале.
Работают в команде по двухнедельным спринтам, перед каждым спринтом есть PBR (Product Backlog Refinement), на котором можно «причесать» бэклог, разобрать вопросы, блокеры и так далее.
После окончания спринта есть спринт-ревью и ретроспектива. На спринт-ревью обсуждаются результаты спринта в плане достижения поставленных целей. На ретро — запаркованные в течение спринта вопросы, больше касающиеся организации процессов. В течение спринта может проходить архитектурный синк, на котором команда обсуждает те или иные вопросы, связанные с качеством кода, рефакторингом, новыми практиками и подходами.
Все встречи проходят в Zoom.
Ещё из регулярного — дейли. Эта встреча проходит каждый рабочий день в 12:00, занимает 15 минут. Дейли — хорошая точка синхронизации, можно быстро разобраться с текущими вопросами и блокерами.
Примерно 20% времени в квартал у ребят есть на улучшение кодовой базы. Точное время может варьироваться в зависимости от бизнес-задач.
Собеседования в команду
В команду обычно ищут сеньоров или крепких мидлов, которые готовы прокачиваться. Расскажем, какие hard- и soft-скиллы пригодятся кандидатам.
Из hard-скиллов:
Опыт коммерческой разработки (от 2 лет).
Из языков программирования — Golang, также в команду рассматривают разработчиков C++, желающих перейти на Go.
Опыт работы с реляционными базами данных: PostgreSQL, MySQL и так далее.
Будет плюсом:
Техническое образование. Специально диплом на собеседовании никто не проверяет, но фундаментальная подготовка лишней не будет.
Ссылка на GitHub в резюме.
Из основных soft-скиллов — общительность (необщительному человеку в командной разработке будет сложно) и желание учиться (возможности для обучения в Quadcode есть всегда).
Тестового задания нет, его заменяет собеседование, на котором есть теоретические вопросы и разбор практических примеров. Теоретические вопросы затрагивают все ключевые аспекты языка (например, встроенные структуры данных, каналы, типизация, модули). Небольшие практические примеры — это фрагменты кода, в которых допущены ошибки. Эти ошибки нужно найти и предложить варианты их исправления. Писать код с нуля на собеседовании не придётся.
Этапы при найме:
Общение с HR в мессенджере или по телефону — как удобнее кандидату. Занимает 30 минут: 15 минут HR рассказывает о компании и отвечает на вопросы кандидата, следующие 15 минут задаёт вопросы об опыте кандидата, его ожиданиях от места работы: например, желаемый уровень зарплаты, формат работы (удалённая или в офисе) и так далее.
Техническое собеседование. Длится примерно полтора часа. Обычно на собеседовании присутствуют два тимлида: тимлид команды Trading Platform и другой команды из департамента Trading. Почему так: в процессе кандидат сможет понять, в какой команде ему будет интереснее работать. А ещё вести собеседования вдвоём проще.
Собеседование с командой. Может длиться час или полтора. На этом этапе кандидат и команда задают друг другу вопросы, в основном собеседование направлено на выявление soft-скиллов. А ещё оно поможет кандидату познакомиться с ребятами, с которыми предстоит работать.
Подводя итог
Команда Trading Platform занимается флагманским продуктом Quadcode — трейдинговой SaaS-платформой по трём большим направлениям:
развивает опционные продукты и маржинальный Forex;
готовится к разработке биржи опционов для США.
Ребята пишут на Golang, у них нет легаси, максимально используют возможности PostgreSQL. Для разработки не используют фреймворки, инструменты кодогенерации позволяют максимально удобно работать с транспортным слоем и базами данных, а также писать тесты.
Если у вас есть вопросы о команде Trading Platform, будем рады ответить на них в комментариях :) Также вы можете задать вопросы напрямую тимлиду команды Денису по email: denis.milovanov@quadcode.com.