Привет, коллеги!
Сегодня хочу поделиться опытом создания и развития open-source проекта MoonShine, которому стукнуло уже 2 года. ?
Идея возникновения
Всё началось с идеи в telegram-чате Laravel Community от CutCode: "А почему бы нам не начать свой open-source и совместно его развивать?". Я тогда промолчал, но мысль зацепила. Решил записать ролик об этом и задумался над этой идеей - а что за проект нам делать?
У меня был в то время аутсорс-проект без дедлайнов, где нужна была админ-панель. Изначально хотел использовать Laravel Nova. Когда изучал гайды по Nova, она зацепила меня своими решениями. Поля, ресурсы, простота использования - мне очень понравилось эта админка. ? Но у Nova есть и минус - она платная.
Тогда все сошлось: я не был привязан ко времени, и я люблю писать код. Вдохновленный концепцией Nova, я решил воспроизвести примерно то же самое. Все, что у меня было под рукой, — это документация Nova.
Проект с open-source админ-панелью мне показался идеальным, так как в нем было полно проблем, и его еще нужно было пилить и пилить. Таким образом, в нем могли участвовать как новички, так и профессионалы.
Забавный факт: спустя полгода увидел исходники Nova и удивился, насколько похоже мы "нагавнокодили"! ? Некоторые проблемы MoonShine были и в Nova, а где-то они пошли более простым путем (от которого я решил сразу отказаться). Вот такой Laravel головного мозга присутствовал в моих подходах в то время! Кстати, эта схожесть с Nova потом в дальнейшем вылились в серьезные проблемы и пришлось делать серьезный рефакторинг - а точнее почти полностью переписать ядро в версии 2. Ну а в MoonShine версии 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 сегодня
Зафиксирую, для истории и будущих материалов.
Миссия проекта MoonShine - создать полезный продукт, который облегчает жизнь разработчиков, позволяя выполнять работу быстрее. Когда быстрее выполнена работа - то как следствие разработчик становится богаче и появляется свободное время, которое можно чтобы потратить на хобби и на семью. Тем самым, MoonShine делает разработчиков счастливее - это совпадает с идеями CutCode.
Для 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? Расскажите в комментариях о своем опыте!
riky
Данил, благодарю за историю и за админку. На ютюб подписан еще до того как ты начал её делать, но пока так и не использовал. Но было интересно узнать что там за ширмой происходит.
Жаль что аудитория ограничивается ру-сообществом, англоязычное имеет потенциал на порядки больше. Нужны засланцы которые и там будут пиарить его.
Но тут момент еще с названием, лично у меня с самого начала резало слух. Откуда родилось в приницпе представляю теперь. Есть "Нова" это как заводской продукт - водка (да еще от самого тайлора). а есть самопальный самогон... Но лично у меня от этого какие то ассоциации с палёнкой. В ру сообществе с одной стороны не все знают что такое муншайн - просто красове слово, с другой стороны, самогон ассциируется с крафтовым, ламповым, чистым продуктом, от которого "не болит голова". Понять бы еще как современное европейское сообщество к этому слову относится :)
В общем считаю что следующий качественно новый уровень случится когда фреймворк просочится на запад. я думаю что там тоже спрос на качественную админку есть. я думаю там на одних консультациях и тех поддержке можно уже будет нормально жить с командой...
и еще в начале вроде на Livewire делал, сейчас исходники полистал, только alpinejs кое где еще есть. отказались от него?
Cutcode Автор
Спасибо за подробный комментарий! Приятно видеть, что Вы давно следите за моей деятельности. Насчет названия, самогон совершенно не означает "паленку", а в нашем случае - изготовленный для себя и лучших друзей продукт в который вкладывается душа.
Насчет аудиторию мы работаем в этом направление, нас опубликовали недавно на laravel-news - https://laravel-news.com/moonshine-laravel-admin-panel, ведем youtube-канал с гайдами на английском языке по MoonShine - https://www.youtube.com/@MoonShine-video-guides, а также группу в телеграме и дискорде.
Но в целом пока основные силы направлены на русскоязычную аудиторию.
Что касается livewire - мы полностью ушли от этого стека, я больше его не использую и в личных целях. Мы стремимся к совсем другому уровню проекта и livewire при серьезных нагрузках становится обузой, поэтому от него мы отошли.
riky
Это ваша ассоциация, а я вам свою описал.
Проблема в том что очень не однозначный это продукт, далеко не все так верят в самогон. официально в сми он как правило выставляется как палёнка, самогон, самопал... еще одна нехорошая ассоциация - могут подумать что админку пишут в каком то наркотическом/алко угаре. Могут шутить на эту тему.
Это для ру аудитории назание довольно нейтральное, многие мне кажется даже не понимают смысла, особенно с первого взглядя, думают это что-то про лунный свет, очень романтичное название.
Но как это в англоязычной среде звучит? если я на работе с коллегами буду постоянно говорить про какой то самогон, то менеджеры и начальство могут начать криво смотреть... вот мне и инетерсно насколько оно приемлимо для англоязычной аудитории. как говорится, как корабль назовёшь...
Не хочется конечно негатив разводить, вы огромную работу проделали, а проект большой, сложный и востребованный, там еще работать и работать. Но иногда затык может быть в мелочах... Как в истории про "The FB". Попробуйте хотя бы опрос в англоязычной среде провести, не обязательно даже у php шников, просто на реддите где нибудь, главное у программистов, как они отреагируют. Может и норм, но тогда можно будет успокоится. Или всё таки сделать ребрендинг, пока еще не очень поздно...
Спросил еще у гпт, https://chatgpt.com/share/24e586ca-84a6-4bc8-8f0c-7cd6f68128b3 еще и перегенерил раз 5, отвечает немного по разному отмечает что с одной стонроны креативно, а с дургой не профессионально. как и у меня с самого начала были ощущения что муншайн это чтото несерьезное.
Нужно понимать что если вы не забросите этот проект то дальше будете зарабатывать на консультациях и внедрении, это из гаража постепенно превратится в офис, а потом и в большой офис. И желательно чтобы рядом с офисом (с такой вывеской) начали собираться серьезные люди, представители больших компаний, а не только любители выпить. С другой стороны если вы планируете получать заработки только с обучения и блоггерства, не создавать из этого бизнес - то название более чем отличное.
В любом случае желаю удачи с проектом и дальнейшего роста и проекту и вам.