В первой части статей о python-культуре мы писали про Тинькофф, а в этот раз решили рассказать о компании, в которую инженеры приходят, чтобы решать действительно сложные задачи, например, применение AI для распознавания болезней.
В Provectus, по умолчанию, считается, что задача будет выполнена в срок, и никто принципиально не стоит над душой и не спрашивает статус в течение дня или даже недели. Здесь общий код и инфраструктура. Каждый может создавать свои проекты на Github. И такая инициатива зачастую перерастает в реальные большие проекты, которые начинают монетизироваться. Что такое здоровая атмосфера в компании и правильная инженерная культура? Прочитайте, как их понимают и создают в Provectus - герое сегодняшней статьи.
Константин Макарычев
Software Engineer & Engineering Manager в Provectus, основатель сообщества Expert Fridays в Казани
Какие проекты, продукты вы делаете на Python? Как они меняют жизнь коллег и клиентов? Расскажите про ваши open source проекты
Наши основные экспертизы — Data Engineering и Machine Learning, где Python является стандартом де-факто, так что всё вокруг обработки данных: от ETL до тренировки моделей, скорее всего написано на Python.
Ни для кого не секрет, что большинство ML фреймворков и библиотек живёт в Python экосистеме, но ни один проект не заканчивается только лишь на tensorflow/keras/pytorch: помимо непосредственной тренировки моделей индустрия требует бесшовной интеграции с другими частями платформ и систем. Это и data warehouses, и ETL процессы, и микросервисы — весь джентльменский набор современного питониста. Какие бы сверхзадачи ни решала модель машинного обучения, она должна банально работать, то есть выдавать свои результаты, которые используются другими приложениями. Так что все обвязки для любой специфичной задачи также пишутся на Python, а наша команда бережно взращивает экспертизу во всём многообразии экосистемы.
Если говорить о конкретных проектах, которые мы решаем с помощью Python, то их огромное количество разновидностей. Например, один из наших внутренних продуктов — корпоративный Data Lake. Как компания, мы генерируем большое количество данных: финансы, люди, проекты — всё это сливается в единое "озеро", которое позволяет нам строить отчёты и делать предсказания. Технически здесь всё реализовано на Python: множество интеграций с внешними системами, обработка и структурирование данных, генерация нового знания из имеющихся данных. Помимо очевидной пользы для бизнеса, такого рода проекты позволяют нам обкатать новые подходы, инструменты и механизмы.
Другой хороший пример использования Python, который к тому же можно увидеть в open source, — Hydrosphere.io — платформа для мониторинга ML моделей в production. Здесь мы используем ML, чтобы мониторить ML, и все science heavy фичи работают как отдельные Python микросервисы, общающиеся по gRPC. Кроме того, клиентские интерфейсы SDK и CLI тоже написаны на Python и общедоступны в pip.
Опиши стек технологий, на котором работаете
У нас нет "стандартного" стека технологий. Во-первых, потому что каждый проект специфичен, и для решения задач выбирается соответствующий стек. Во-вторых, индустрия стремительно развивается, так что приходится всегда держать руку на пульсе и привносить что-то новое во имя эффективности. Параллельно разработке мы постоянно проводим исследования появляющихся инструментов и практик: от организации кода до систем сборок, что позволяет нам улучшать существующую кодовую базу, а также начинать свежие проекты быстрее и чище.
С другой стороны, часть подходов, зарекомендовавших себя со временем, оседают как best practices для всего внутреннего сообщества. Такой набор практик не считается обязательным, но большинство проектов так или иначе его придерживается, потому что это имеет смысл. Ну и конечно же есть индустриальные стандарты: работа с данными немыслима без numpy и pandas, тренировка моделей без pytorch и keras, а пайплайны без airflow.
Что происходит с новичком-джуном, когда он попадает в вашу команду? (В чем заключается адаптация? Кто его менторит? Как быстро и за счет чего он погружается в работу?)
В компании довольно развитая система обучения на всех уровнях: от джунов до синьоров. Есть целые курсы по направлениям, процесс менторинга, стажировки, а большое количество разнообразных проектов позволяет на практике изучить самые разные технологии.
ML Engineering курс, рассчитанный на специалистов в Data Science, представляет собой набор онлайн курсов и книг, начиная с фундаментальных теоретических знаний (в качестве примера: в этот список входит бессмертная книга Дяди Боба "Чистый Код", так как для многих новичков в инженерии правила именования переменных - чистое откровение) и заканчивая сугубо прикладными знаниями: докеры, оркестраторы, пайплайны тренировки моделей, продакшнизация.
Data Engineering курс для Python разработчиков имеет похожую структуру: теоретические вводные вроде Lambda/Kappa архитектур и CAP теорем наравне с прикладными - основные виды баз данных, шины, ETL/ELT пайплайны.
Что же касается менторства, новичок-джун попадает в команду одного из внутренних проектов, где в спокойной и дружелюбной обстановке погружается в конкретную тематику и технологии. Под присмотром ментора новичку дают максимально разные задачи, чтобы помочь показать процесс разработки со всех сторон.
В дальнейшем всегда есть путь, куда расти, где можно изучать что-то новое, переключаться на смежные темы. Классика такого пути: разобравшись с основами обработки данных на практике, перепрыгнуть в огромный новый мир больших данных; затем всё то же самое, но в потоке и в режиме реального времени; по ходу дела будут возникать инфраструктурные вопросы: облака - не только как провайдеры вычислительных ресурсов - но и вендоры решений по хранению и передаче данных.
Как вы понимаете, что сработались и через какое время?
Когда мы начинаем говорить на одном языке с новичком — значит, большая часть пути погружения уже пройдена. В самом начале может показаться, что в ML и Data специфичных проектах всё другое: другие процессы, другой тулинг, свои подходы. Со временем начинаешь во всём этом свободно плавать, а общих вопросов становится меньше. Начиная с какого-то момента, у новичков появляются первые собственные предложения по улучшению того или иного кусочка проекта — это отличный маркер того, что процесс адаптации подходит к концу.
Мы стараемся выстраивать горизонтальную структуру в командах, где условный тимлид не является истиной в последней инстанции, так что любые инициативы рассматриваются командой. В таких условиях, когда свобода творчества ничем не ограничивается, даже самый свежий член команды может начать влиять на реализацию проекта. В какое время — зависит только от амбиций конкретного человека.
Почему мидлы выбирают Provectus?
Любая компания скажет, что у неё самые сложные, самые амбициозные задачи. В Provectus же это действительно так: для заинтересованного инженера обязательно найдётся серьёзный челлендж: задачи, которые ещё никто никогда не решал. Это может быть особый алгоритм обработки огромного количества данных; новый подход в построении отказоустойчивой архитектуры; секвенирование генома или даже модель образования сверхновых. В своих проектах мы всегда стараемся оставаться на гребне индустрии, так что многие задачи привлекают именно своей сложностью.
Ещё один немаловажный фактор — open source. Мы все выросли на открытом коде. Практически всё, что мы используем в ежедневных задачах, открыто, поэтому для нас важно контрибьютить наши наработки обратно в коммьюнити. Есть в этом что-то кармическое: неправильно всё время лишь потреблять труд миллионов разработчиков, необходимо и отдавать по мере сил.
В Provectus большая история поддержки сообщества в глобальном смысле, и мы с трепетом относимся ко всему open source. Часть собственных продуктов, там, где есть в этом смысл, мы поддерживаем в виде открытого кода по всем правилам open source. Но кроме собственных открытых репозиториев на гитхабе, мы активно контрибьютим в те открытые проекты, которые используем сами в ежедневной работе, например Kubeflow или Great Expectation. Многие, подписывая офферы, прямо об этом и говорят: большое количество работы в OSS выделяет нас на рынке.
Что python-разработчик получает у вас, помимо задач, зарплаты и плюшек? В чем он прокачивается?
Прежде всего это, конечно, команда высококлассных экспертов. Не буду говорить штампами, мол мы как семья, но дружественная и инклюзивная атмосфера гарантирована. Даже самый опытный супер-сеньор всегда может чему-нибудь научиться у своих тиммейтов. Во многом техническая экспертиза если не уникальна, то как минимум невероятно редка, иногда опережая индустрию, как это случилось с нами и MLOps. MLOps - высокоуровнево тот же DevOps, то есть унификация и автоматизация рутинных процессов в командах, но применительно к ML разработке. До сих пор человечество не выработало стандартных подходов, и вся индустрия "бурлит" новыми решениями. Мы же на практическом опыте наших проектов вырастили экспертизу в этом направлении.
Не менее важна свобода творчества. Перефразирую известный мем: нетривиальные проблемы требуют нетривиальных решений. Никогда не существует единого пути в реализации той или иной функциональности, задачи никогда не решаются по жёстко поставленным рельсам рутинной работы. Широта взглядов всегда приветствуется, и зачастую именно это помогает тащить самые сложные кейсы.
Последнее в списке, но не по значению — бесконечное развитие. Вглубь — техническое погружение в самую суть технологий и процессов: когда находишься на острие технологий, всё очень динамично меняется, а вызовы всегда опережают текущее состояние. Да и развитие может быть в разных направлениях. Вширь — одна и та же задача, но с разных сторон, с точки зрения разных экспертиз. Вверх — быть ближе к бизнесу, к людям, к техническому лидерству.
Что ты понимаешь под python-культурой, и как это выглядит в вашей компании?
Я бы не стал выделять отдельно конкретную Python-культуру, скорее бы говорил об инженерной культуре в целом. Хороший пример тому — внутренние сообщества. Они устроены так же, как и любые другие коммьюнити: единомышленники обсуждают текущие дела, брейнштормят над новыми идеями, следят за новостями индустрии. В качестве площадок для обмена опытом у нас проводятся митапы и даже полноценные внутренние конференции.
Другой пример хорошей инженерной культуры — набор общепринятых практик в виде, например, референсов по конкретным темам: от архитектурных диаграмм до конкретных сниппетов кода. Единообразие кодовой базы — маркер здоровой культуры не только в Python среде, но в любой команде и в любом направлении.
Вместо заключения
На PyCon Russia Provectus представил 2 темы:
Best Practices for Kubeflow Pipelines
Data/ML QA on Python
Записи докладов вы сможете увидеть на канале IT-People - организатора PyCon.
Если вы живете в Казани, присоединяйтесь к сообществу Expert Fridays (дружеские митапы для разработчиков), которые Provectus организовывает уже несколько лет.
*Provectus лишь условно можно назвать российской IT-компанией. На самом деле, компания была основана в Одессе, а сейчас у Provectus есть офисы в России, Украине, Канаде, США и Коста-Рике.