Поддержание проекта с открытым исходным кодом + 500 тыс. Загрузок в месяц

Фон

Во время учебы в университете я параллельно занимался веб-разработкой. Был один проект, в котором мы использовали Angular, это было в 2014 году, поэтому версия, вероятно, была около 1.2. У меня была эта выпадающая директива, в которой была настолько серьезная ошибка, что я не мог использовать эту директиву. Хммм ... Я подумал: Что мне делать? Я вышел в Интернет и нашел репозиторий GitHub, где он был размещен, я создал учетную запись GitHub и опубликовал сообщение о проблеме за ошибку. Я немного посидел и подумал, сколько времени пройдет, прежде чем ошибка будет исправлена. И тут меня осенило - Я могу починить сам!

Такое прозрение. Вскоре я обнаружил ошибку и добавил параметр в качестве настраиваемого флага для директивы. Я прочитал документацию о том, как создать запрос на перенос, и я это сделал. Это было так хорошо, и вот тут началось мое путешествие по open source (PR еще не слился, это было в конце 2014 года). С этого момента я начал искать проекты на GitHub, и вскоре я создал свою собственную директиву Angular. Я потратил на это много времени, и сегодня он действительно используется в продакшене на некоторых сайтах.

Время шло, я делал кое-какие пиарщики тут и там, ничего особенного. Я продолжал делать это в течение года, но никогда не отказывался от идеи иметь собственный проект, в котором люди публиковали бы проблемы, запросы на вытягивание и задавали вопросы. Это была моя цель. В 2016 году я присоединился к команде новой компании, которая использовала React. Нам нужен был компонент выбора даты, поэтому я зашел в Интернет, нашел его, и мы начали его использовать. Я просмотрел страницу README и код компонента и, помню, подумал, что есть возможности для улучшения. Поэтому я добавил линтер и немного почистил код и документацию. Я заметил, что владелец проекта был тем, кто просматривал и объединял мои PR, и именно тогда я увидел свой шанс.

Вступление в команду

Внося свой вклад в проект в течение месяца или около того, я набрался смелости и написал владельцу электронное письмо с вопросом, могу ли я помочь в обслуживании компонента. Мне казалось, что я прошу кого-то позволить мне стать частью секретного клуба, хотя он был единственным, кто регулярно работал над этим. Я был так счастлив, когда получил ответ: «Да, пожалуйста, помогите! Я заметил ваш вклад за последние недели, и мне может понадобиться ваша помощь ». Я сразу же начал над этим работать. Я решал проблему за проблемой, исправлял ошибку за ошибкой, и я чувствовал себя прекрасно. Я отвечал за развитие этого проекта и помогал людям решать их проблемы. На тот момент у него было 25 тысяч загрузок в месяц на npm, и на тот момент это было большим делом (для меня). У нас с владельцем были контакты по электронной почте, но я проделал всю работу на GitHub.

Со временем я начал чувствовать безнадежность, потому что, сколько бы усилий я ни прилагал для исправления ошибок и проверки запросов на вытягивание, проблемы продолжали появляться. И все время обнаруживались новые ошибки. Это было все, чего я когда-либо хотел, но все же это начинало ощущаться как обуза. Я тратил все меньше и меньше времени на работу над компонентом, пока однажды я не понял, что не трогал его в течение месяца, и количество возникающих проблем возрастало по мере роста популярности. Сначала я был так счастлив, что количество скачиваний в месяц продолжало расти. Я чувствовал, что делаю что-то хорошее для мира и людей, которым я помогал, но теперь я хотел, чтобы количество скачиваний уменьшилось. Я наблюдал, как счетчик скачивает 50, 100, 150, 220 тысяч и достигает 226 000 загрузок в месяц. Именно тогда я решил удалить значок npm в README, показывающий, сколько загрузок в месяц проект предполагал, что это уменьшит количество загрузок. И это сработало… какое-то время. Количество загрузок уменьшилось, но через несколько месяцев оно резко выросло, и теперь мы достигли ~ 500 тысяч загрузок в месяц.

Обучение

Я вот уже полтора года поддерживаю этот проект и многому научился. Что именно я узнал?

  • Разработка с открытым исходным кодом - это очень весело, но она может быть утомительной, если вы потеряете мотивацию.
  • Люди плохо читают документацию. Я не могу сказать, на сколько повторяющихся вопросов мне приходилось отвечать только потому, что людям лень просматривать документацию.
  • Люди ленивы что-либо читать. Я потратил много времени на написание руководящих указаний по взносам, а также шаблона, который можно использовать для отправки сообщений о проблемах и PR. В большинстве случаев люди просто стирали весь шаблон и просто записывали свою проблему, иногда заставляя меня задавать вопросы, которые у меня были в шаблоне. Раздражающий.
  • Когда дело доходит до кода, люди думают не так, как я. У меня есть четкое представление о том, что такое хороший код, а что нет, чем я, кажется, делюсь со всеми, кто участвует в этом проекте.
  • Люди ужасно пишут разумные сообщения о фиксации. Это, наверное, то, что меня больше всего удивило. В мире с открытым исходным кодом на GitHub, использующем Git, у нас ограниченное пространство для общения с нашими будущими «я». Мы должны использовать это пространство с умом и изо всех сил стараться быть максимально ясными при написании этих сообщений. Тема фиксации, такая как «Исправлена ​​ошибка рендеринга» без тела фиксации - это плохое использование пространства, с которым вам нужно работать. Многих это, видимо, не волнует. Иногда это приводит к тому, что я беру их код, продвигаю собственный коммит с ясным и описательным сообщением и закрываю их PR (да, я думаю, что это это важно).
  • Это очень приятное чувство - объединить чей-то пул-реквест. Я сам знаю, каково это, когда ваш фрагмент кода сливается с основной веткой репозитория и публикуется в открытом доступе, а это делается для других люди просто молодцы. Это беспроигрышная ситуация, когда автор PR испытывает это теплое и нечеткое чувство (и, надеюсь, узнал что-то по ходу), я, как сопровождающий, исправил проблему / добавил функцию, и мир должен принять часть этой новой и улучшенной версии компонента. Я люблю это.
  • Не всегда доверяйте своим тестам. Однажды вечером я исправлял проблему и одновременно обновлял файл package.json. Я обновил путь к файлу с относительного на абсолютный. Я провел все тесты, и все было зеленым, поэтому я развернул версию и лег спать. На следующее утро я прихожу на работу, вижу, что наш конвейер сборки сломан, и понимаю, что причиной этого стало мое изменение, которое произошло на следующий вечер (мы используем компонент на работе). В то же время, проблемы с компонентом возникают из-за того, что люди со всего мира заявляют, что их сборки терпят неудачу. Я паникую. Мне потребовалось время, чтобы понять, что это было небольшое изменение конфигурации, которое привело к сбою. К счастью, я смог исправить и проверить это на работе. Уф.

В общем, я узнал, что люди классные. Несмотря на то, что вы не читали документацию, которую я писал часами, мне все еще нравится тот факт, что вы выделяете время в своей жизни, чтобы внести свой вклад в бесплатное программное обеспечение, которое будет использоваться людьми, которых вы не знаете. Спасибо за это, если вы этого не делаете, то должны! И если вы это делаете, продолжайте.

Что дальше?

В настоящее время мы ищем нового участника, который присоединился бы к нашей команде. Надеюсь, это осветит мою мотивацию, так что мы сможем закончить следующую основную версию, что является моей предварительной следующей целью в этом проекте.

Если у вас есть возможность поддерживать проект любого размера, я настоятельно рекомендую вам это сделать. Это займет столько времени, сколько вы позволите, но я обещаю, что оно того стоит.

Спасибо за чтение,
Саймон

(Я намеренно опускаю репозиторий, о котором идет речь. Если вы действительно хотите его найти, вы можете сделать это, выполнив базовые исследования)