В мае 2020 года, когда процент коллег без проектов оказался неожиданно высоким, мы решили привлечь желающих к работе с опенсорс. У DataArt есть опыт создания собственных продуктов с открытым исходным кодом: IoT-платформа DeviceHive, .NET-фреймворк Atlas, игровая платформа Kiddo. Но контрибьютором сторонних проектов на уровне компании мы раньше не выступали, и сходу вкладывать в новую инициативу большие ресурсы не планировали. Скорее, хотели посмотреть, как это работает и для чего может пригодиться в будущем.
Один из авторов идеи — Solution-архитектор Денис Цыплаков — поделился несколькими наблюдениями, которые могут быть полезны всем, кто хотел бы создавать открытое ПО не только в свободное, но и в рабочее время, или дать такую возможность своим командам.
1. Опенсорс может работать на продвижение компании, но это дорого
Наверное, вы и так об этом догадываетесь, но я могу вас уверить, сославшись на собственный опыт: даже с сильными разработчиками быстро создать что-то заметное в опенсорс не получится. Поэтому не стоит рассчитывать на работу с открытым ПО в качестве инструмента продвижения компании на внешнем рынке, если собираетесь направлять на такие проекты только желающих из idle. Тем более, от случая к случаю.
Можно представить, как однажды предъявленный вклад в репозиторий окончательно убедит потенциального заказчика подписать с вами контракт. Но это скорее может сработать, если вы концентрируете усилия в относительно узкой технологической нише. Для тех, кто, как и DataArt, ориентируется на максимально широкий набор платформ и чаще всего имеет дело с самыми распространенными из них, вероятность воплощения такого сценария стремится к нулю.
Собственные опенсорс-продукты способны привлекать внимание, но требуют значительных ресурсов и постоянного внимания. К тому же, иногда потенциальные заказчики, работающие в смежной области, могут смотреть на вашу независимую разработку с профессиональной ревностью.
В любом случае, чтобы вас заметили, придется потратить немало усилий и денег, но открытым ПО можно заниматься не только ради большей известности.
2. Опенсорс не принесет мгновенного признания среди программистов
Двадцать лет назад, программируя на Delphi, я вполне мог за выходные написать библиотеку для логирования, которой люди действительно пользовались — она была выложена на Torry. Сейчас для любых фреймворков придумано столько, что привлечь внимание можно, разве что играя на ограниченном поле самых современных и эксклюзивных технологий, угадывая тренды и привлекая значительные ресурсы — вряд ли менее тысячи человеко-часов в год. Согласитесь, что сделать крутую фичу, скажем, для React за неделю силами тех, кто сейчас оказался в idle, не выйдет.
Любая собственная библиотека потребует постоянной команды или хотя бы продакт оунера. Ведь кто-то должен следить за консистентностью, обеспечивать передачу знаний, решать целый букет проблем и находить способы продвижения вашей разработки внутри сообщества. Возможно, вы сможете обойтись всего одним человеком, причем даже не на все 40 часов в неделю, но задач ему хватит. Значит, менеджменту компании придется очень подробно объяснить, для чего такого человека брать и не отпускать на полную занятость в коммерческом проекте.
Собственно, у DataArt как раз есть опыт создания собственных опенсорс-продуктов, и они развивались по классическому для продуктовой разработки пути. Думаю, в конечном итоге их успех зависит от продакт оунера — здесь всегда нужен харизматичный и энергичный человек, абсолютно уверенный в ценности разработки, которую он представляет. Людей, для которых не просто работа, но и сам продукт — важная часть жизни — в аутсорсинговых компаниях не бывает много.
Если вам удастся придумать уникальный проект или новый функционал для известного фреймворка, не требующие больших вложений, поздравляю (без тени иронии)! Очень похоже на гениальное озарение, это уровень если не фундаментального научного открытия, то инженерного изобретения. Остается уточнить у коллег, в вашу инициативу не вовлеченных: нужна ли им такая разработка, будут ли они новой фичей пользоваться. Но рассчитывать на такие вспышки на этапе запуска работы с опенсорс я бы не стал: они точно не будут носить системного характера.
Любой полезный вклад в открытое ПО делает мир чуть-чуть лучше, но все равно придется разобраться, для чего это нужно вашей компании. Только так можно определить направление усилий и объем ресурсов, доступный для вложения в опенсорс-проекты.
3. В крупнейших опенсорс-проектах всем хватит небольших задач
Всякий проект испытывает ряд типичных проблем, в нем всегда есть не самые сложные и потому не самые увлекательные задачи, до которых ни у кого пока не дошли руки. Они обычно очень конкретные: от проверки документации до устранения мелких багов. Решение таких проблем — незначительная, но совершенно явная помощь будущим пользователям.
Допустим, в опенсорсной библиотеке при создании шаблона проекта с чем-то интерферировала и неправильно обрабатывалась одна из опций. Мы это быстро поправили силами двух джуниор-разработчиков. Событие не эпохальное, собственно, потому никто с этим вопросом раньше не разобрался. Но кому-то стало чуть комфортнее работать.
Для программистов с небольшим опытом такой проект все равно оказывается полезен. Хотя ничего сложного в том, что они сделали, для них самих нет.
4. Подходящий репозиторий легко выбрать на глаз
Понятно, что отталкиваться проще всего от технологии. В нашем случае на момент высокого idle без проектов больше всего оказалось JavaScript-разработчиков, и первыми на наше предложение откликнулись двое из них. Дальше самое удобное — просто взять топ-100 проектов с GitHub, отфильтровать их по нужной технологии и выбирать те, на которые отзывается ваше сердце. Внутри симпатичных вам проектов остается выбрать тикеты, отмеченные самими разработчиками как важные. И оценить хватит ли вам времени, чтобы наверняка справиться с описанной в них проблемой.
Важно, как устроен сам проект: есть ли гайдлайны и готовая подборка важнейших задач, много ли зафиксировано проблем и много ли там pull requests. Если нет, похоже, что вас в этом репозитории не особенно ждут. В принципе можно представить, что вы рассматриваете чужой огород: если грядки ровные и сорняки регулярно пропалывают, значит, помогать хозяевам будет легко и приятно. Для примера можно посмотреть на Angular.
В хорошо настроенном проекте с выбранной проблемой можно справиться часа за два. Мы знаем, как искать подходящий тикет, поэтому рекомендуем коллегам в DataArt, кто ненадолго оказался без проекта, написать нам. Мы подскажем, куда идти, вместе выберем задачу. Иногда поделать что-то руками может быть полезнее, чем на один день погружаться в неизвестный вам раздел теории.
5. Порог для входа в опенсорс существует, но он очень низкий
Если в проекте настроен нормальный воркфлоу, участвовать в нем легко. Однако для компаний это все-таки чуть сложнее, чем для индивидуальных разработчиков. Репозитории Angular, React и другие, сопоставимые с ними по масштабу, защищены специальным юридическим фреймворком. Пока ты не пытаешься сделать pull request, ты его даже не видишь, а для участия в проекте в свободное время из дома хватит и простой галочки «да, согласен». Но если ты с ним столкнулся как сотрудник компании, потребуется подпись от аналогичного лигал-фреймворка твоей компании — в этом нет ничего сложного, но и тривиальной эту задачу я бы не назвал. Если ваши коллеги раньше в рабочее время опенсорс не занимались, юристы могут удивиться.
Соглашение на использование открытого ПО и на его развитие — разные вещи. Это логично, таким образом проекты стремятся обезопасить себя от хитрых организаций, которые иначе могли бы претендовать на часть написанного своими сотрудниками. В общем хорошо, если вы уверены, что юристы в вашей компании положительно относятся к инициативам разработчиков. Наши разобрались очень быстро, препятствие, которого мы в первый момент опасались, преодолеть оказалось очень легко.
При этом есть и либы, в развитии которых участвовать вряд ли получится. Ими занимаются стабильные команды, готовые принять только по-настоящему гениальное предложение. Почему — неплохо объясняют, например, здесь. Собственно, поэтому так важно внимательно посмотреть на репозиторий, прежде чем хвататься за интересный тикет. Вдруг никто и никогда не примет вашей работы — будет жаль потраченного времени.
Еще один момент — сделать вклад в такой проект, как Angular или React, вполне реально, но надо быть готовым, что ваши изменения будут долго и дотошно обсуждать, рассматривая каждую букву (буквально). Это полезный опыт, но не каждый и не всегда к этому готов. Если хочется просто сделать что-то полезное, избежав изнурительного ревью — можно взять репозиторий попроще. Например, не сам React, а какую-то популярную библиотеку компонентов к нему. Эти ребята значительно менее избалованы вниманием, и процесс протекает проще и дружелюбнее.
6. В опенсорс есть чему поучиться
Прежде всего, это касается джуниор-программистов и тех, кто очень давно работает исключительно в одном закрытом проекте. Сам процесс здесь может выглядеть достаточно поучительно, а объем и сложность всегда можно подобрать по силам конкретному человеку. Как ни странно, все, что нужно для участия — умение достаточно аккуратно писать код. С остальным в хорошем проекте помогут: подскажут, например, не выпадает ли написанное вами из code style. К тому же, большие проекты делаются на основе лучших практик — участвуя в них непосредственно, можно немного набить руку.
Низкий порог входа и несложный процесс позволяют за короткое время поработать с разными репозиториями и получить достаточно разнообразный опыт. Поэтому мы к моменту запуска инициативы рассматривали ее как образовательную. В кризисные моменты, каким для многих все-таки была весна 2020-го, такая практика позволяет коллегам держаться в тонусе. Сейчас мы активно набираем людей, и в idle народу совсем мало, поэтому активно продвигать опенсорс внутри компании пока нет особенного смысла. Но мы всегда готовы помочь тем, кто ждет нового проекта, и рады принять всех желающих.
7. Не стоит спешить с обещаниями
Интересно, что в опенсорс обнаружились настоящие серийные контрибьюторы — небольшие компании и самостоятельные разработчики, которые берут на себя очень много задач. Доходит до смешного: человек пишет, что решит проблему через несколько часов, но не возвращается к ней годами. Даже тревожно становится — все ли с человеком в порядке.
Видимо, так некоторые люди и фирмы прогревают свои профайлы, хотя мы так и не поняли, что это — осознанная стратегия, стечение обстоятельств (мы надеемся с человеком ничего не случилось) или неудачное планирование.
В любом случае это примеры, едва ли достойные подражания. Мы посылали pull requests, только завершив задачу и проведя необходимые тесты. Надо сказать, что не отмечаясь заранее, вы снижаете уровень собственной ответственности. Если человек, который взял тикет, внезапно уходит в проект к клиенту или просто не справляется, вы никого не подвели — свой опыт ваш коллега все равно получил.
На всякий случай приготовьтесь, что ваши реквесты в проектах будут обрабатывать с разной скоростью. На это может уйти от нескольких часов до пары недель, вне зависимости от масштаба задачи и объема написанного вами кода.
Вместо заключения
Опыт коммуникации с лучшими опенсорс-проектами очень полезен. Любой программист может сразу посмотреть, как поставлено дело в высшей лиге, и даже немного в ней поиграть.
Участие в опенсорс однажды позволит ответить на вопрос о знакомстве с технологией Х: «Вообще-то, я один из ее контрибьюторов».
Опенсорс улучшает карму и позволяет человеку, а иногда и всей компании, приобрести новый опыт в области, где коммерческих проектов пока было мало.
Мы не ждем от нашей инициативы быстрых маркетинговых результатов. Но уверены, что приносить людям даже небольшую пользу всегда приятно, а любые теоретические занятия полезно разбавлять практикой. Мы немного потренировались и убедились, что работать с опенсорс на уровне компании легко — значит, всегда можно помочь коллегам не скучать в idle.
datacompboy
Глупый вопрос, а в GSoC поучавствовать не планировали?
Тут как раз статья подвалила — habr.com/ru/company/google/blog/541944
Semenych
GSoC это все же другой, более тяжелый формат. Тут скорее речь идет о том, что у разработчика есть пара дней между проектами, что бы такого сделать интересного и полезного для всех.
datacompboy
Да, менторство / интерны / присмотр за новичком съедает где-то ~2 часа ежедневно в самом плотном случае до ~4 часов в неделю в самом халявном случае (по личному жопыту).
То есть это вопрос прокачки лидерства у потенциально подающих надежды на рост за 10-25% времени.
Во всяком случае, это мне так видится :)