Привет! Я Алсу, лид-деврел по бэкенду в Тинькофф. Расскажу как мы мотивировали разработчиков заниматься контрибьютингом больше обычного, почему это важно, как провели месяц по языку Scala и что из этого получилось.
Контрибьютинг развивает инженерную культуру
В культуре нашей компании, как и во многих других, принято шарить экспертизу на разных уровнях, развиваться и практиковать новые подходы к работе. Такие подходы помогают повысить уровень знаний инженеров, а это напрямую влияет на качество выполняемых задач.
Многим разработчикам не хватает времени для контрибьютинга: поток задач, завал на проекте и многое другое. Но важно помнить, что задачи open source влияют на общую инженерную культуру не только локально, но и вообще во всем мире.
Например, в Москве есть разработчик Дима, который каждый день пользуется библиотекой Zio на Scala. Он внес в нее изменения, и его вклад влияет не только на его работу, но и, допустим, на работу разработчика из Тюмени или вообще разработчика, который находится в Штатах.
Получается, что польза, которую создают разработчики, занимаясь контрибьютингом, влияет не на одного человека, который занялся open source, а полезна для всех разработчиков Scala в мире.
Не все могут позволить себе какой-то дорогой инструмент, но есть аналоги, которые лежат в open source. Так мы помогаем улучшать качество жизни не только разработчиков, но и небольших ИТ-компаний.
В арсенале деврела немало инструментов для работы с коммьюнити: митапы, конференции, партнерские интеграции и многое другое. Мы стараемся придумывать новые подходы и заходить с разных сторон.
Когда мы используем тот или иной инструмент, для деврела важно не только организовать мероприятие, но и работать с контентной составляющей, которую будут транслировать инженеры. Благодаря их работам формируются новые практики и подходы, которые улучшают качество инженерной культуры. Для нас важно искать новые подходы и нестандартные методы, чтобы помогать шарить экспертизу на разных уровнях.
Мы начали проводить конкурсы-спринты по направлениям: надежности и устойчивости — Month of Reliability, оптимизации кода в целях экономии железа — Month of Performance, поиска уязвимостей сервисов — Month of Bugs.
Конкурсы вдохновили нас погрузится в культуру разработки и углубиться в потребности разработчиков. Так родилась идея конкурса Month of Scala OSS, который помог привлечь внимание наших инженеров к развитию направления open source.
Как организовать конкурс, чтобы все было по-честному
Перед разработчиками стояла задача сделать вклад в любой проект open source. Это мог быть как pull request, так и просто зарепорченный issue. Единственный критерий выбора проекта: он или большая его часть должны быть написаны на Scala.
Суть и смысл конкурса определили, анонсы прописали и уже приготовили их на внутренних платформах, а чем будем награждать, так и не договорились.
Началась самая сложная часть конкурса. Профессиональная техника у каждого разработчика своя, и все не так просто, как может показаться на первый взгляд. После долгих обсуждений договорились о призах:
За третье место — внутренняя валюта компании, книга с кабанчиком и толстовка Scala-разработчика.
За второе место — внутренняя валюта компании, книга с кабанчиком и толстовка Scala-разработчика.
За первое место — толстовка scala-разработчика и поездка на легендарную Scala.Day в Мадриде.
Призы стоящие, но конференция казалась чем-то далеким и не совсем реалистичным, поэтому мы решили, что каждый сотрудник независимо от степени вклада получит от нас футболку Scala.Dev.
Мы решили, что сотрудники могут совершать неограниченное количество контрибьютов.
Было сложно выбрать самый лучший пулл-реквест, поэтому вводили баллы за каждую работу. Раз в неделю выкладывали лидерборд, где указывали разработчиков, которые отписались о своих результатах, и отмечали их место по предварительным оценкам жюри на данный момент. Подняться в лидерборде выше можно было за счет дополнительных репортов в проектах. Количество репортов суммировалось между собой.
Кроме развития open source важна его культура, которую мы прививаем нашим инженерам. Вот советы, которые давали члены жюри перед запуском конкурса:
Если вы выбрали некий issue в проекте, в ваших интересах будет как-либо отписаться, что вы работаете над ним. Иначе может получиться так, что его сделает другой, а вы просто потратите время.
Будьте вежливы при общении на GitHub или в чатах проекта.
Не бойтесь обращаться за помощью к ментейнерам. При правильной постановке вопросов и наличии четкой мотивации доделать свою работу они будут рады вам помочь. Особенно это имеет смысл, если вам предстоит большой объем работы или у задачи есть несколько способов решения.
Что получилось
Всего в конкурсе участвовали 28 scala-разработчиков. Получилось 69 совершенных репортов, 65 pull request, 4 issue. Общий чендж-сет: плюс 7651 строка кода, минус 2079 строк кода, итого 5572 строки. Замерджено 41 работ, открыто и в работе — 21, отклонили 1 работу.
Мы собрали обратную связь от инженеров и получили закономерность: те, кто впервые начал заниматься контрибушеном, боялись взаимодействовать на GitHub. По их мнению, там сидят бородатые и серьезные разработчики, которых лучше не беспокоить своими предложениями. К счастью, мы развеяли этот миф.
В сумме разработчики затронули 38 проектов: tree-sitter-scala, zio-metrics-connectors, mill, korolev, zio-sql, tapir, tethys, zio-telemetry, tofu, zio-redis, zio-telemetry, playframework, zio-dynamodb, derivation, cats, zio, gatling-kafka-plugin, zio-metrics-connectors, fs2, jwt-scala, muffin, zio-http, scalameta, nvim-metals, cats-effect, ducktape, metals, metals-vscode, munit, zio-kafka, phobos, dotty, canoe, mill, tethys, canoe, circe, nvim-metals.
Самые интересные работы, по мнению жюри:
Несколько инженеров сконцентрировались на мониторинге в zio-экосистеме, насабминитив серию фиксов в zio-telemetry, zio-metrics-connectors и саму zio тоже.
Была номинация «Самый гениальный PR на футболку» — PR в легендарный Korolev.
Один из участников совершил аж 17 PR в tree-sitter-scala по поддержке синтаксиса Scala 3.
Несмотря на то что изменения могут интересовать только пользователей NVIM, жюри посчитало, что это самый серьезный вклад в Scala-экосистему и суммарно затрагивает наибольшее количество пользователей языка среди всех остальных работ. Это, кстати, и есть победитель конкурса
Еще один интересный факт: благодаря этому конкурсу в нашей компании организовался Scala контрибьютинг-клуб, где ребята раз в неделю по четвергам выбирают какой-нибудь проект из open source и вместе дорабатывают его.
На мой взгляд, конкурсы такого формата помогают мотивировать разработчиков заниматься open source, особенно если есть коллеги, которые объясняют культуру поведения на GitHub, сопровождают на каждом этапе и помогают не только развиваться, но и развивать.
Такие конкурсы шарят экспертизу и развивают новые подходы и практики к работе разработчиков, что улучшает инженерную культуру сообщества, а это одна из самых главных целей в работе деврела.
P. S. Сотрудник, который выиграл поездку в Мадрид, пишет код в Тинькофф Путешествиях. Мне кажется, это классное совпадение.