Привет, коллеги!
Сегодня хочу поделиться опытом создания и развития open-source проекта MoonShine, которому стукнуло уже 2 года. 🎉
Идея возникновения
Всё началось с идеи вtelegram-чате Laravel Community от CutCode: "А почему бы нам не начать свой open-source и совместно его развивать?". Я тогда промолчал, но мысль зацепила. Решил записать ролик об этом и задумался над этой идеей - а что за проект нам делать?
У меня был в то время аутсорс-проект без дедлайнов, где нужна была админ-панель. Изначально хотел использовать Laravel Nova. Когда изучал гайды по Nova, она зацепила меня своими решениями. Поля, ресурсы, простота использования - мне очень понравилось эта админка. 😅 Но у Nova есть и минус - она платная.
Тогда все сошлось: я не был привязан ко времени, и я люблю писать код. Вдохновленный концепцией Nova, я решил воспроизвести примерно то же самое. Все, что у меня было под рукой, — это документация Nova.
Проект с open-source админ-панелью мне показался идеальным, так как в нем было полно проблем, и его еще нужно было пилить и пилить. Таким образом, в нем могли участвовать как новички, так и профессионалы.
Забавный факт: спустя полгода увидел исходники Nova и удивился, насколько похоже мы "нагавнокодили"! 😂 Некоторые проблемы MoonShine были и в Nova, а где-то они пошли более простым путем (от которого я решил сразу отказаться). Вот такой Laravel головного мозга присутствовал в моих подходах в то время! Кстати, эта схожесть с Nova потом в дальнейшем вылились в серьезные проблемы и пришлось делать серьезный рефакторинг - а точнее почти полностью переписать ядро в версии 2. Ну а в версии 3 мы и вовсе избавились от зависимости Laravel (кроме support-пакетов).
Предыстория затянулась и повествование зашло немного не туда. По крайней мере идея этого поста заключается в другом.
Первые шаги
Итак, решил делать open-source админку! Идею презентовал, и публика в чате и комментах радовалась народному open-source. Круто!
Прошла неделя, месяц, 3 месяца и я получил первое "НО" - никто кроме меня не контрибьютил. Ровно 0 пул-реквестов. 😔
Признаюсь честно, я уже хотел опустить руки, думал что идея так себе, винил аудиторию.
На деле проблема была во мне, а именно в организации процесса разработки проекта (которая хромает и по сей день, но есть хорошие новости - она постоянно улучшается).
Вывод 1: мало презентовать проект, нужно погрузить пользователей в его атмосферу, описать концепцию, организовать работу других участников (об этом чуть позже), постоянно обновлять и не ждать что это сделают за тебя. Автор, по крайней мере вначале, на 99% двигатель всех улучшений.
Перелом
Так я был одиноким в поле войном: контрибьютил в MoonShine, записывал уроки, делал дайджесты апдейтов и с каждой неделей на пару сантиметров опускал руки.
Переломный момент наступил, когда инициатор идеи создать open-source проект для комьюнити написал, что использует MoonShine в проекте. Ему нравится, но он видит ряд проблем и хочет их улучшить. Это был важный переломный момент который сразу поднял руки обратно (и даже чуть выше). Мы начали регулярно созваниваться, месяц решали, каким будет MoonShine 2. Появился новый красивый логотип, первый активный контрибьютор, потом еще ребята подтянулись.
Вывод 2: пока твоим проектом не пользуются в работе, не сталкиваются с проблемами и нет жажды улучшений - никто ничего делать не будет. Нужно рассказать, чем хорош проект, чтобы привлечь к его использованию больше людей. У меня значительный опыт создания видео-контента и люди говорят что получается, поэтому сделал упор на видео-гайды - это будет отличительной фишкой MoonShine, а также чат, в который я лично буду вовлечен, чтобы помогать прислушиваться к идеям, принимать фича реквесты.
Нельзя вкладывать деньги в open-source
Переходим к следующему "НО" - мысль, что не хорошо вкладывать деньги в open-source и взваливать все на плечи комьюнити.
Друзья, я не дизайнер, а выглядел MoonShine мягко говоря ужасно. Но вероятность того, что найдется контрибьтор-дизайнер и крутой фронтендер, которые пожертвуют месяцем своей жизни, отложат всю остальную работу и закроют нашу проблему была равна 0. Было понятно что мотивации контрибьютить у них нет - зачем им такая админ-панель? С чего бы возникла любовь к еще совсем юному open-source? Ведь проще использовать что то уже готовое.
Вообщем я решил немного нарушить общепринятые правила и заказал уникальный дизайн и нанял фронтендера. Не прогадал - MoonShine стал самой красивой админ-панелью! 😎 (по мнению независимых экспертов). Позже я еще разок похулиганил и инвестировал в дизайн MoonShine - мы сделали дополнительную компактную тему.
Вывод 3: иногда open-source проекты требуют финансовых вложений для развития и поддержки. Вложение средств в дизайн и фронтенд-разработку оказалось оправданным решением, которое значительно улучшило продукт.
В продолжении темы о финансах - пару абзацев про донаты
Получив небольшую пользовательскую аудиторию, я решил попробовать собрать донаты. Наличие финансирования позволит развивать проект быстрее (делать документацию, дизайн, траты на маркетинг) и покрыть текущие расходы на проект (сервер). А самое важное - появилось бы стабильное финансирование - можно было бы платить зарплату разработчикам, что позволило бы им уделять больше времени проекту (получилось много "бы" в этом предложении, и это подчеркивает маленькую вероятность положительного исхода).
Проект полезный, людям нравится, наверняка они хотят поддержать не только словом, но и рублём!
Сначала я подключил возможность донатов для Moonshine на GitHub через платформу OpenCollective и выкладывал там новости по развитию проекта и обновлениям. На сегодняшний день не задонатил никто - возможно, там в основном зарубежная аудитория, плюс оплатить из России проблематично. Позже я решил попробовать собрать средства на новый дизайн через другую платформу - Boosty, но и тут откликнулся всего один человек - итоговая сумма сбора составила 200 рублей.
Проанализировав ситуацию у аналогичных проектов, я понял, что моя ситуация не уникальна. Многие разработчики проектов с открытым исходным кодом сталкиваются с похожими трудностями в поиске финансирования. Несмотря на очевидную ценность проектов и труд, вложенный в них, лишь немногие пользователи поддерживают проекты финансово.
Это напоминание о том, что работа с open-source - это не только про разработку, но и про грамотный маркетинг и взаимодействие с сообществом.
Я ошибался, рассчитывая на финансовую поддержку MoonShine. Разработчики, регулярно создающие большие проекты на MoonShine, в основном радуют только хорошим отзывом.
Вывод 4: разработка open-source, как правило, проходит при отсутствии адекватной финансовой поддержки. Есть и исключения, но они про крупные проекты.
Open-source как школа для разработчиков
То, что я занимаюсь созданием курсов и обучением ребят разработке, также дало плоды. Я подготовил большой курс для разработчиков среднего уровня (продвинутые методики использования Laravel), в котором участвовало порядка 100 человек. В этот курс я вложил душу, был вовлечен в чат на 100 процентов и после обучения продолжил общение с лучшими студентами, которые в итоге стали core-разработчиками MoonShine. Так MoonShine стал не просто open-source проектом, а школой разработчика. Эти ребята прокачались на курсе и продолжили развиваться как разработчики MoonShine.
Open-source дает уникальный, не сравнимый ни с чем опыт. Работая в найме, ты подстраиваешь код под определенную задачу, а в open-source, особенно с админ-панелью, нужно учитывать тысячи кейсов и разные стили разработчиков. Всё должно быть гибко и удобно, нельзя оставить дыры в безопасности или не оптимизировать определенные моменты. Нужно постоянно думать о куче факторов, а не только о конкретной задаче. Меняется мышление, подходы, и ты уже никогда не будешь прежним.
Статья становится позитивной, но не смотря на это мы натыкаемся на следующее "НО".
Текучка
Core-разработчики уходят, open-source это текучка. Ты как автор прикипаешь ко многим, начинаешь на них рассчитывать, распределять ответственность, а в итоге получаешь боль. С этим нужно смириться и принять опыт работы с open-source. Даже если ты вовлек ребят в процесс, они будут с тобой, пока им интересно. Пока задачи их мотивируют и развивают. Как только сменят стек на основной работе или потеряют интерес - уйдут, и их нужно уметь легко и достойно отпускать.
Вывод 5: автор должен полагаться исключительно на дисциплину. Мотивация - плохой и временный двигатель прогресса, но при этом все контрибьюторы движимы именно мотивацией, которая требует подпитки.
Что про мотивацию?
Для мотивации мы использовали несколько подходов:
- Лицензия на все продукты JetBrains
- Мерч MoonShine (футболки и стикеры)
Первое оказалось не особо эффективным, а вот мерч - крутой мотивацией. Всем очень приятно получать кастомную награду за свой труд.
Также придумали небольшой заработок для основных разработчиков - добавили платные консультации по MoonShine, плюс привлекли ребят в качестве менторов на курсах по Laravel.
Но имейте в виду: все это подпитка для временного механизма, основанного на мотивации, и текучка никуда не денется, это норма.
Создание задач
Следующее "НО" снова упирается в организацию. Моя ошибка заключалась в том, что я не выносил проблемы и задачи MoonShine на общее обозрение. Они прятались в нашем задачнике для core-разработчиков. Но позже мы решили провести конкурс контрибьюторов (снова за мерч), чтобы привлечь больше разработчиков, я оформил задачи в виде issue на GitHub, поделив их для разработчиков разного уровня. И это дало результат - появились новые контрибьюторы. И они продолжают появляться, хотя конкурс уже завершен.
Это простая истина, но путь к ней виден не сразу.
Вывод 6: мы вынесли задачи на общее обозрение, пометили их как good first issue
, добавили теги сложности и получили порцию PR (ну и конкурс тоже сработал).
Собрание разработчиков MoonShine
Также мы начали проводить ежегодный MoonDev - закрытый созвон разработчиков MoonShine, где знакомимся, общаемся, я делюсь планами, говорю о мотивации, проблемах и фантазируем о том, каким MoonShine будет.
В качестве заключения
Получилась достаточно большая статья, в которой я хотел поделиться своим опытом работы над open-source проектом. Пора подводить итоги - зачем я этим занимаюсь, что нравится, а что нет.
Плюсы:
- Бесконечный процесс разработки, который постоянно развивает скилл участвующих разработчиков
- Новые знакомства с хорошими разработчиками
- Развитие не только как разработчика, но и как организатора, лидера, маркетолога
- Получение удовлетворения от результатов работы (позитивные отзывы появляются всё чаще - как бальзам на душу).
Минусы:
- Текучка. Разработчики приходят и уходят
- Сложно вовлекать новых участников, нужно постоянно думать о мотивации
- Отнимает огромное количество времени, причем не только разработка, но и создание условий для работы других участников
Что такое MoonShine сегодня
Зафиксирую, для истории и будущих материалов.
Миссия проекта - создавать полезный продукт, который облегчает жизнь разработчиков, позволяя выполнять работу быстрее. Быстрее выполнена работа - как следствие разработчик становится богаче и появляется свободное время, которое можно чтобы поратить на хобби и на семью, и тем самым делает их счастливее.
Для core-разработчиков я позиционирую MoonShine как бесплатный институт по web-разработке.
Особенности нашего open-source:
- Комьюнити — наше всё
- Исчерпывающие видео-гайды, для легкого старта для новичков и популяризации
- Никто не любит свой open-source так, как я
- Иногда инвестировать в свой open-source для нас норма
Для моего характера MoonShine — идеальный open-source. У меня множество и других публичных репозиториев, но с узким назначением, пакеты, которые можно доделать и не знать, что добавить в них еще. А админка MoonShine — это бесконечный процесс. Огромное количество полезных функций можно добавить, а если вдруг случится так, что больше добавить нечего, то всегда можно сделать редизайн или улучшить стек и начать всё снова!
Open-source — лучшее, что случилось со мной как для разработчика. Жизнь поделилась на до и после. Я стал более опытным не только как разработчик, но и как организатор.
Предлагаю и вам стать частью чего-то значимого в мире web-разработки. Повторюсь еще раз - MoonShine - это не просто админ-панель, это целая школа, где мы растем и развиваемся вместе.
Приходите в команду MoonShine
Почему стоит присоединиться к нам и стать муншайнером? Да потому что это крутой шанс прокачать свои скиллы, работая над реальным проектом! Вы не просто пишете код - вы создаете инструмент, которым пользуются сотни разработчиков.
Представьте: вы коммитите фичу, а через неделю получаете фидбек от реальных юзеров. Это ли не кайф? 😎
А еще у нас классное комьюнити. Мы постоянно на связи, делимся опытом, решаем сложные задачи вместе. Это как курсы по разработке, только круче - вы учитесь в процессе создания настоящего продукта.
Хотите узнать больше? Приходите на прямые эфиры по MoonShine! Я регулярно провожу их - обсуждаем новые фичи, разбираем сложные кейсы и просто болтаем о коде. Это отличный шанс познакомиться с командой и понять, как мы работаем.
Не важно, джун вы или сеньор - у нас найдется задача по плечу. Хотите попробовать? Загляните в наши issues на GitHub, там есть специальные задачи даже для совсем новичков. А если что-то непонятно - всегда можно спросить в чате.
Помните, каждый коммит - это шаг к вашемц развития как разработчика (а еще у нас есть классный мерч для активных контрибьюторов! 😉)
Так что не стесняйтесь, присоединяйтесь к нашей команде муншайнеров. Вместе мы сделаем MoonShine еще круче!
Кстати, на следующей неделе у нас эфир - расскажу как идёт работа над MoonShine v3. Будет интересно! Сейчас будем обсуждать детали в нашем чате - заходите, будем рады видеть новые лица.
А вы уже пробовали себя в open-source? Расскажите в комментариях о своем опыте!
Ivan