Трудно быть мейнтейнером проекта Open Source

Автор оригинала: Сальваторе Санфилиппо
  • Перевод
Автор — Сальваторе Санфилиппо, разработчик и мейнтейнер свободной СУБД Redis

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

Прошло несколько недель, я несколько раз начинал писать этот пост и останавливался, потому что не было времени хорошенько всё обдумать. Теперь, кажется, я завершил самоанализ своих слабостей, трудностей и желания свободы. Эти чувства неизбежно охватывают человеческий разум, когда он концентрируется на какой-то задаче, а в течение длительного времени проявляется негативный аспект. Безусловно, поддержка проекта Open Source также приносит много радости и удовольствия. Последние десять лет моей профессиональной жизни, безусловно, запомнятся надолго. Это хорошие годы, хотя и не самые лучшие (ещё веселее было во время запуска). Но здесь я сосредоточусь на негативной стороне. Просто имейте в виду, что есть и положительные моменты.

Лавина запросов


Я не верю в «быстрые действия», «быстрое мышление», «победу над временем» и тому подобное. Мне не нравится поверхностный мир с отсутствием концентрации и внимания, в котором мы живём из-за социальных сетей, чатов, электронной почты и графика, полного мероприятий. В первые годы Redis у меня ещё было много времени. Когда приходило письмо, я мог спокойно сосредоточиться на том, что пытается сказать автор. Мог вспомнить релевантную часть кода Redis и после тщательного рассмотрения вопроса, наконец, высказать свои реальные мысли. Я считаю, что именно так должны работать большинство людей, независимо от того, какова их работа.

Когда программный проект достигает популярности, как у Redis, а коммуникации между людьми настолько упрощаются, как в современных социальных инструментах, то всё меняется. Пользователи относятся к вам как неодушевлённой сущности, а количество сообщений, вопросов, запросов, предложений растёт экспоненциально. Но одновременно в сообществе Redis (хотя мне кажется, это общая проблема) очень медленно растёт количество людей, которые способны квалифицированно ответить на эти вопросы. Создаётся очевидная перегруженность. Большинство людей слишком прагматично подходят к этой проблеме. Закрываем тикет, если топикстартер в течение двух недель не ответил на наш вопрос. Закрываем все тикеты с расплывчатыми формулировками. И другие варианты по механической чистке потока. Но реальность такова, что для качественной обработки отзывов нужно время. Иначе вы просто притворяетесь, что в проекте мало открытых тикетов. Хорошо бы иметь много ресурсов для найма оплачиваемых фултайм-экспертов для поддержки каждой подсистемы Redis на полный рабочий день, но в реальности это неосуществимо.

Так что же происходит? Вы начинаете всё больше и больше расставлять приоритеты: что рассмотреть, а что нет. И вы чувствуете себя как кусок дерьма, игнорируя так много вопросов и стольких людей, а контрибуторы считают, что вам наплевать на их работу. Это сложная ситуация. Обычно в итоге решаются, в основном, только критические проблемы. Всё новое игнорируется, поскольку новые функции ещё не стали основными, а кому хочется увеличивать кодовую базу, получать ещё больше пулл-реквестов и проблем? Возможно, вы начинаете писать более запутанный код, чем обычно. Чем более запутанный код — тем сложнее отследить первопричину в случае критической ошибки.

Смена роли


Из-за лавины запросов, описанной выше, ваша работа тоже внезапно меняется. Redis стал популярным, потому что я вроде как умею проектировать и писать код. А теперь вместо этого я занимаюсь, в основном, рассмотрением проблем и пулл-реквестами. И постоянно кажется, что я сам написал бы лучший код, чем в этих пулл-реквестах. Хотя иногда код лучше, чем я мог бы сделать сам, потому что в сообществе Redis есть программисты и получше. Но большинство просто написаны для решения одной конкретной проблемы. В то время как я всегда представляю систему в целом, потому что работаю над ней уже много лет. Но больше нет времени этим заниматься. Таким образом, большие новые функции менее органично вливаются в основной код. Что тут поделать? Иногда я просто на нескольких недель забиваю на тикеты и пулл-реквесты, потому что кодирую или проектирую: это работа, которую я действительно люблю и наслаждаюсь. Но это, в свою очередь, усиливает психологическое давление, потому что я всех игнорирую.

Чтобы делать то, что я люблю и умею делать хорошо, приходится чувствовать себя дерьмом.

Время


Есть две проблемы длительной работы над одним проектом, по крайней мере, для меня.

Во-первых, до Redis я никогда не работал без перерыва, каждый рабочий день. Я мог поработать неделю, остановиться на две, потом работать месяц, исчезнуть на два месяца. Всегда. Людям нужно подзарядиться, получить новую энергию и идеи, заняться творчеством. А программирование на высоком уровне — это творческая работа. Сам Redis так жил первые два года, то есть когда развивался с максимальной скоростью. Потому что суммарный выхлоп от моей работы, когда я хочу работать, больше, чем когда я вынужден работать каждый день устойчивым образом.

Когда я работал один, то мог позволить себе свободный график. Как только я начал получать деньги от Redis Labs, моя этика больше не позволяла такое. Пришлось заставить себя работать по нормальному графику. Это серьёзная борьба с собой, которую я веду в течение многих лет. Более того, я уверен, что из-за этого качество и объём работы снизились, но ничего не поделаешь: так всё устроено в этом мире. Я не нашёл способа решить эту проблему. Я мог бы сказать Redis Labs, что хочу вернуться к своему старому графику, но нет смысла, потому что в данный момент я «отчитываюсь» перед сообществом, а не перед компанией.

Другая проблема заключается в том, что много работать над одним проектом — тоже сложное дело, ментально. В прошлом я специально менял проект каждые шесть месяцев. Вот уже десять лет я делаю одно и то же. Чтобы сохранить рассудок, я завёл подпроекты внутри Redis. Один раз я сделал кластер, другой — дисковое хранилище (теперь заброшено), потом HyerLogLogs и т. д. В основном, эти вещи полезны для проекта, но по сути представляют собой что-то другое. Но в конце концов вы всегда возвращаетесь к той же странице с тикетами и пулл-реквестами и каждый день делаете одно и то же: «Реплика отключается из-за тайм-аута» и так далее. Что ж, давайте разберёмся с этим ещё раз.

Страх


У меня всегда был некоторый страх потерять технологическое лидерство в проекте. Не потому что я недостаточно хорош в проектировании и разработке Redis, а потому что я знаю, что мои пути не совпадают с тем, чего хочет значительное количество пользователей, и с тем, что большинство людей в IT считают хорошим программным обеспечением. Поэтому приходится постоянно балансировать между тем, что я считаю хорошим дизайном, набором функций, скоростью разработки (медленной), размером проекта (минимальным) и тем, что я должен выдать большинству пользователей. К счастью, есть процент пользователей Redis, которые прекрасно понимают Redis-way, поэтому, по крайней мере, время от времени мне приходит пару слов поддержки.

Разногласия


Некоторые люди — полные придурки. Они повсюду, это естественно. По-моему, в программировании хороших людей намного больше, чем в других областях. Но всегда есть какой-то процент абсолютных мудаков. Как лидеру популярного проекта OSS, вам так или иначе придётся с ними столкнуться. Возможно, это одна из самых стрессовых вещей, с чем я имел дело в ходе разработки Redis.

Тщетность


Иногда мне кажется, что даже самое отличное программное обеспечение никогда не сохранится на века, как шедевр литературы. Обратите внимание, что это не из-за его качества, а как побочный эффект его утилитарной функции… Оно полезно на практике. Именно поэтому на смену придёт что-то более полезное. Хотелось бы иметь время и на другие занятия. Поэтому иногда кажется, что вся моя работа, в конце концов, тщетна. Мы проектируем и пишем системы, но потом появятся новые. Вообще, разве хоть один прикладной программист, а не теоретик с «большими идеями», способен оставить после себя какой-то след? Время от времени я думаю, что у меня была возможность работать над большими идеями, но я сосредоточился на написании программного обеспечения, а не на размышлениях о нём. Поэтому не смог использовать свой потенциал в этом отношении. Это некая противоположность синдрому самозванца: извините, что приходится быть более скромным.

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

Комментарии 43

    +12

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


    Сейчас количество людей, которые не шарят примерно никак, зато хотят, чтобы все было сделано БЫСТРО, просто зашкаливает. Сформулировать проблему обычно тоже не умеют, или же формулируют ее в стиле XY проблемы. Отвечать на тупые вопросы я уже устал, на сложные — не хватает времени сконцентрироваться.


    Мудаки тоже проблема — даже один токсичный мудак может долго отравлять проект не только своим присутствием, но даже и после бана. Им не лень ходить на релевантные ресурсы и всем рассказывать, насколько плохой проект X и какой мудак его автор.


    Выходных нет, перерывов нет, переключаться иногда хочется, но надолго нельзя. Бросать тоже нельзя — ответственность, когда твоим проектом пользуются десятки тысяч людей, колоссальная.


    Принимать чужой код — это вообще за гранью добра и зла. Читаешь pull request, хватаешься за голову и пишешь нормально. Но времени на это тоже не хватает...

      +5
      Спасибо, не знал, что можно банить пользователей на гитхабе, а то один персонаж создаёт кучу тикетов в стиле:
      «пытаюсь использовать вашу программ но у меня ничего не получается? есть идеи»
      «можете помочь ничего не получается ] спасибо?»
      (стилистика и пунктуация сохранены)
      У меня после таких тикетов просто взрыв мозга происходит.
        0
        Ну вы же вроде написали:
        Есть вопросы по работе моих библиотек — заводите баг на гитхабе.
        Вот он и заводит.
        А поговорить с ним не получается?
        0
        Надо монетизировать.
          0
          Вроде кто-то(Red Hat?) работает по такому принципу, а именно платная поддержка. Если горит, можешь заплатить и тебе в первом приоритете помогут, а не хочешь платить, значит не горит.
            0
            В предыдущей теме уже многократно обсуждали, что монетизация нужна далеко не всем.
            К тому же cebka жаловался на то что ему приходится отвечать на тупые тикеты и переписываться с токсичными мудаками, и я думаю что монетизация эту проблему не решит, а наоборот количество тупых тикетов и токсичных мудаков будет ещё больше, ведь «быстро делайте как я хочу! за что я вам плачу?!»
              0
              Это все регулируется ценой. 200 баксов в час и вы будете получать удовольствие от любого «мудака»
                +3

                Вы, может, и будете, а я не буду — плавали-знаем. С мудаками я работать не буду ни за какие деньги. По крайней мере, пока могу себе это позволить.

                  +1
                  Можно за 100 баксов в час нанять стороннего человека для консультаций, а самому за вторую половину писать код мечты
                    +1

                    Ага, а также волшебно перекачать свои знания этому стороннему человеку за $100 в час.

              +1

              Монетизация не является темой обсуждения в этой статье.

                +1
                –10
                Мудаки тоже проблема — даже один токсичный мудак может долго отравлять проект не только своим присутствием, но даже и после бана. Им не лень ходить на релевантные ресурсы и всем рассказывать, насколько плохой проект X и какой мудак его автор.
                Есть такие мудаки. Обычно они также считают что:
                Принимать чужой код — это вообще за гранью добра и зла. Читаешь pull request, хватаешься за голову и пишешь нормально. Но времени на это тоже не хватает...

                  +3

                  Знаете, я хотел было что-то ответить на ваш комментарий, но моя богатая практика общения с личностями, подобными вам, подсказывает, что проще поставить вам заслуженный минус и заниматься более полезными делами, чем дискуссиями с дураками и/или троллями.

                    –7
                    Ну то есть вы даже не можете предположить, что «мудаки», настойчиво лезущие в проект со своими советами, жалобами и указаниями нa недостатки и люди, вечно недовольные чужим кодом настолько, что готовы его переписать с нуля, делают это потому, что считают свое мнение единственно верным?
                    Вопрос на засыпку. Вам в проект прислали реализацию полезной фичи, вы, в очередной раз, ужаснулись и переписали все с нуля. Чьё авторство?
                    Со стороны это выглядит приблизительно так: Вам прислали pull-request -> Вы его отклонили -> Через неделю сделали коммит с тем же самым. Ну и почему бы тогда «мудаку» не написать на релевантном ресурсе про автора пару ласковых слов.
                      –4
                      Вот таким нехитрым путем мы и узнали одну из причин по которой открытых проектов с русскими авторами практически не существует. Минусаторы не поймут, а остальные и так давно знают эту причину.
                  +1
                  Отвечать на тупые вопросы я уже устал, на сложные — не хватает времени сконцентрироваться.

                  Просто нужно перенаправлять их на StackOverflow, где вопросам и место. Система репутации мотивирует на них отвечать.


                  Принимать чужой код — это вообще за гранью добра и зла. Читаешь pull request, хватаешься за голову и пишешь нормально.

                  У меня другая проблема. Я провожу ревью для pull request, но другой мейнтейнер придерживаться политики мержить все подряд с максимальной скоростью, лишь бы тесты проходили. Аргументирует он это тем, что не хочет никого обижать, типа игнор. Так и живем: я делаю ревью, а он мержит, даже не подождав. Приходится самому потом фиксить, ну или забивать.

                  +1
                  Трудно быть богом
                  © АБС
                    0
                    Тоже испытываю такие же чувства… И кстати может кто нибудь хочет помочь в девелопменте довольно популярной библиотеки PHP Telegram Bot (https://github.com/php-telegram-bot/core)? Буду очень рад
                      +1
                      И постоянно кажется, что я сам написал бы лучший код, чем в этих пулл-реквестах.
                      Известная психологическая проблема — с ней надо бороться.
                      У меня всегда был некоторый страх потерять технологическое лидерство в проекте. Не потому что я недостаточно хорош в проектировании и разработке Redis, а потому что я знаю, что мои пути не совпадают с тем, чего хочет значительное количество пользователей, и с тем, что большинство людей в IT считают хорошим программным обеспечением
                      А вот это вполне обоснованное опасение, если автор считает проект своим детищем, а не просто сидит на зарплате.
                      Некоторые люди — полные придурки. Они повсюду, это естественно.
                      Это точно :)
                        0
                        Известная психологическая проблема — с ней надо бороться.
                        Каким образом? Например, контрибутор плохо знает стандартную библиотеку (пишет цикл или свою функию вместо того, чтобы вызвать стандартную), не знает глубоко возможности и синтаксис языка — где-то не использует const/readonly, где-то пишет как обычно, хотя в этом случае можно было сократить на пару строчек. Вроде мелкие придирки. Но что делать — быть тираном и объяснять, как *мне* нравится писать код. Или принимать в проект код, который потом будет постоянно раздражать?
                          0
                          Ключевое слово тут — «кажется». Предложенный код решает проблему? Отлично. Что до стиля, то выводя проект в open source, автор должен иметь в виду, что у него обязательно появятся соавторы. Насколько их стиль будет соответствовать авторскому — зависит от желания автора. Если же автор хочет все написать сам, потому что он тут лучший — тогда зачем ему open source?
                          А бороться просто — надо всего лишь уважать чужое мнение. Именно в обсуждениях кода можно заметно вырасти над собой (поэтому я очень люблю ревью). Глядишь, по ходу дела автору перестанет «казаться» :), а, может, он поднимет скиллы соавтору. Мейнтейнером быть трудно, это совершенно верно.
                            0

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

                              0
                              Вообще тут обсуждается «я сам написал бы лучший код, чем в этих пулл-реквестах» — если соавторов нет, так и проблема не возникает. Но на мой взгляд в open source в первую очередь ищут помощи от сообщества, так что появление соавторов и их PR просто ожидаемо.
                                +1
                                «Помощь от сообщества?» не обязательно. Кому-то просто не жалко выложить свой код, и он понимает, что этим сделает свой продукт лучше в глазах своих пользователей и коммьюнити. По принципу «open-source программа лучше, чем просто freeware».
                                  0
                                  И PR принимать не будете, просто потому что «я сам написал бы лучший код, чем в этих пулл-реквестах»? Боюсь, что этим не сделать «свой продукт лучше в глазах своих пользователей и коммьюнити» — как бы наоборот не вышло.
                                    0
                                    open-source не обязательно github, можно просто публиковать исходники.
                                      0
                                      PR тут в широком смысле.
                                      +4

                                      Не приму, конечно. Качество кода мне важнее, чем что бы-то ни было. Мне и по работе предлагают принимать говнокод, а я не принимаю — отправляю переписывать нормально.

                                        0
                                        Т.е. всегда «я сам написал бы лучший код»? Или все-так бывает чему поучиться?
                                          0

                                          Все проще: бывают PR'ы, которые имеют хорошее качество, а бывают — не очень. Если говорить о крупных предложениях, то я обычно делаю review: https://github.com/rspamd/rspamd/pulls?q=is%3Apr+is%3Aclosed+reviewed-by%3Avstakhov А мелочи или же вещи, в которых я разбираюсь хуже, чем submitter, я просто сразу же принимаю — уже скоро полторы тысячи PR'ов, из которых подавляющее большинство принято.

                                            0
                                            Абсолютно согласен. Но автору-то «постоянно кажется, что я сам написал бы лучший код, чем в этих пулл-реквестах» — есть, конечно, шанс, что правки присылают только джуниоры, но, скорее всего, это субъективное недоверие всем, кроме себя. Вот с этим и надо бороться.
                                    +3

                                    Не могу себе представить ситуации, когда в open source выкладывают проект в поисках помощи от сообщества, если честно. Могу сказать только, что я пишу в open source, потому что могу и потому что мне это удобно. Ну и "себя показать" — не без того.


                                    Помощи от сообщества я не ждал никогда, хотя зачастую появляются люди, которые поддерживают некоторые куски или подсистемы, на которые ты сам забил. Например, в Rspamd это у меня веб интерфейс, а в libucl — биндинги для C++.

                                      +1
                                      Не могу себе представить ситуации, когда в open source выкладывают проект в поисках помощи от сообщества, если честно.
                                      А Линукс разве не open source? А .NET зачем сделали open source? Просто чтоб похвастаться? Сомневаюсь.
                                        +4

                                        Linux писался Just For Fun — даже книга такая есть. Зачем крупные корпорации выкладывают что-то в опенсорс — отдельная тема, например, на своей работе я вхожу внутренний OpenSource комитет. И мотив "помощь сообщества" там где-то в самом конце приоритетов, если вообще такой мотив есть.

                                          0
                                          Начинал писаться Just For Fun, а сейчас ситуация совсем другая. Любопытно было бы услышать про начало списка приоритетов OpenSource.
                                  +5
                                  Принимать PR от людей, которые плохо знают проект (включая архитектуру проекта, дизайн его частей и стиль кода), лишь потому что «код решает проблему» — верный путь чтобы проект превратился к кусок дерьма (возможно популярный, если пользователям в этой нише действительно нужен кусок дерьма).
                                    0
                                    Еще раз — «Насколько их стиль будет соответствовать авторскому — зависит от желания автора.» А если вообще не принимать PR (потому что «я сам написал бы лучший код»), то есть шанс, что проект заглохет, толком не начавшись. Я писал про то, что «лучший код» может быть только в голове, и код похуже может помочь проекту. А где найти золотую середину — дело автора.
                                  0
                                  Хотя мне никто PR не отправлял, взглянув на чужой код, чаще всего понимаешь, что он не нравится (хотя этот код может быть лучше и качественнее). И тут все влияет: названия функций, стиль написания, сама архитектура приложения может не нравится и множество других «подсознательных» вещей.
                                +2
                                Дочитал заметку, ощущение что автор спешил и не дописал ее либо ее не дообдумал, ждем продолжения.

                                Мы проектируем и пишем системы, но потом появятся новые. Вообще, разве хоть один прикладной программист, а не теоретик с «большими идеями», способен оставить после себя какой-то след?


                                Вроде как MSDOS закрепился хорошо… Apache можно вспомнить, nginx.
                                  0
                                  Я мог поработать неделю, остановиться на две, потом работать месяц, исчезнуть на два месяца. Всегда. Людям нужно подзарядиться, получить новую энергию и идеи, заняться творчеством. А программирование на высоком уровне — это творческая работа.
                                  Яростно поддерживаю, это прямо моя мечта! Как же это здорово, когда у разработчика есть возможность отключится на какое-то время.
                                    +4

                                    Почему бы не делегировать полномочия? Если есть неплохие контрибьюторы, отправляйте их проверять ПР. Если кто-то разбирается в проекте, пучть имеет право закрывать тикеты, отвечать на вопросы и т.д. Помощь в опенсурсе это же не только код, совершенно нет.
                                    Ну а если это логика "никто не знает и не узнает лучше меня, это же я его породил", то и грех жаловаться тогда.
                                    А насчёт чужого кода — приходит со временем и опытом понимание что вещи можно сделать по-другому. Не хуже/лучше, а именно по-другому. И это нормально. Поэтому делаешь ревью каждому ПР где пишешь что конкретно не так. При чем делаешь это вежливо и понятно, чтобы не отпугнуть человека, а воодушевить его исправить код и контрибьютить дальше. Глядишь и "мудаки" вдруг исчезнут.
                                    Работа с комьюнити это нелегко, придётся нехило подвинуть своё эго, научиться новым вещам, но в какой-то момент это становится прикольно и не понимаешь уже как можно по-другому.
                                    П. С. автор вообще уже в компании работает, по-моему просто надо нанять ещё людей на проект, а то он явно зашился.

                                      0
                                      Почему бы не делегировать полномочия? Если есть неплохие контрибьюторы, отправляйте их проверять ПР. Если кто-то разбирается в проекте, пучть имеет право закрывать тикеты, отвечать на вопросы и т.д. Помощь в опенсурсе это же не только код, совершенно нет.

                                      Согласен, есть такая проблема у многих проектов. Если бы люди грамотно искали себе замену и делегировали полномочия, глядишь — и некоторые проекты не загибались бы.

                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                    Самое читаемое