Автор — Сальваторе Санфилиппо, разработчик и мейнтейнер свободной СУБД 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.

Тщетность


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

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

Комментарии (40)


  1. cebka
    17.05.2019 18:27
    +8

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


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


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


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


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


    1. morozovsk
      17.05.2019 20:41
      +3

      Спасибо, не знал, что можно банить пользователей на гитхабе, а то один персонаж создаёт кучу тикетов в стиле:
      «пытаюсь использовать вашу программ но у меня ничего не получается? есть идеи»
      «можете помочь ничего не получается ] спасибо?»
      (стилистика и пунктуация сохранены)
      У меня после таких тикетов просто взрыв мозга происходит.


      1. MaxVetrov
        19.05.2019 01:59

        Ну вы же вроде написали:

        Есть вопросы по работе моих библиотек — заводите баг на гитхабе.
        Вот он и заводит.
        А поговорить с ним не получается?


    1. begemot_sun
      17.05.2019 22:03
      +1

      Надо монетизировать.


      1. Koneru
        17.05.2019 22:56

        Вроде кто-то(Red Hat?) работает по такому принципу, а именно платная поддержка. Если горит, можешь заплатить и тебе в первом приоритете помогут, а не хочешь платить, значит не горит.


      1. morozovsk
        17.05.2019 22:57

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


        1. begemot_sun
          18.05.2019 09:10

          Это все регулируется ценой. 200 баксов в час и вы будете получать удовольствие от любого «мудака»


          1. cebka
            18.05.2019 11:49
            +1

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


            1. TheShock
              18.05.2019 15:25
              +1

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


              1. cebka
                18.05.2019 15:28
                +1

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


      1. cebka
        18.05.2019 11:48

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


    1. rgs350
      18.05.2019 15:56
      -7

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


      1. cebka
        18.05.2019 16:07
        +2

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


        1. rgs350
          18.05.2019 16:22
          -4

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


          1. rgs350
            18.05.2019 22:27

            Вот таким нехитрым путем мы и узнали одну из причин по которой открытых проектов с русскими авторами практически не существует. Минусаторы не поймут, а остальные и так давно знают эту причину.


  1. mikhailian
    17.05.2019 19:50
    +1

    Трудно быть богом
    © АБС


  1. L0NGMAN
    18.05.2019 03:52

    Тоже испытываю такие же чувства… И кстати может кто нибудь хочет помочь в девелопменте довольно популярной библиотеки PHP Telegram Bot (https://github.com/php-telegram-bot/core)? Буду очень рад


  1. Caraul
    18.05.2019 09:57

    И постоянно кажется, что я сам написал бы лучший код, чем в этих пулл-реквестах.
    Известная психологическая проблема — с ней надо бороться.
    У меня всегда был некоторый страх потерять технологическое лидерство в проекте. Не потому что я недостаточно хорош в проектировании и разработке Redis, а потому что я знаю, что мои пути не совпадают с тем, чего хочет значительное количество пользователей, и с тем, что большинство людей в IT считают хорошим программным обеспечением
    А вот это вполне обоснованное опасение, если автор считает проект своим детищем, а не просто сидит на зарплате.
    Некоторые люди — полные придурки. Они повсюду, это естественно.
    Это точно :)


    1. qw1
      18.05.2019 10:54

      Известная психологическая проблема — с ней надо бороться.
      Каким образом? Например, контрибутор плохо знает стандартную библиотеку (пишет цикл или свою функию вместо того, чтобы вызвать стандартную), не знает глубоко возможности и синтаксис языка — где-то не использует const/readonly, где-то пишет как обычно, хотя в этом случае можно было сократить на пару строчек. Вроде мелкие придирки. Но что делать — быть тираном и объяснять, как *мне* нравится писать код. Или принимать в проект код, который потом будет постоянно раздражать?


      1. Caraul
        18.05.2019 11:46

        Ключевое слово тут — «кажется». Предложенный код решает проблему? Отлично. Что до стиля, то выводя проект в open source, автор должен иметь в виду, что у него обязательно появятся соавторы. Насколько их стиль будет соответствовать авторскому — зависит от желания автора. Если же автор хочет все написать сам, потому что он тут лучший — тогда зачем ему open source?
        А бороться просто — надо всего лишь уважать чужое мнение. Именно в обсуждениях кода можно заметно вырасти над собой (поэтому я очень люблю ревью). Глядишь, по ходу дела автору перестанет «казаться» :), а, может, он поднимет скиллы соавтору. Мейнтейнером быть трудно, это совершенно верно.


        1. cebka
          18.05.2019 12:24

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


          1. Caraul
            18.05.2019 12:53

            Вообще тут обсуждается «я сам написал бы лучший код, чем в этих пулл-реквестах» — если соавторов нет, так и проблема не возникает. Но на мой взгляд в open source в первую очередь ищут помощи от сообщества, так что появление соавторов и их PR просто ожидаемо.


            1. qw1
              18.05.2019 12:57

              «Помощь от сообщества?» не обязательно. Кому-то просто не жалко выложить свой код, и он понимает, что этим сделает свой продукт лучше в глазах своих пользователей и коммьюнити. По принципу «open-source программа лучше, чем просто freeware».


              1. Caraul
                18.05.2019 13:46

                И PR принимать не будете, просто потому что «я сам написал бы лучший код, чем в этих пулл-реквестах»? Боюсь, что этим не сделать «свой продукт лучше в глазах своих пользователей и коммьюнити» — как бы наоборот не вышло.


                1. qw1
                  18.05.2019 14:20

                  open-source не обязательно github, можно просто публиковать исходники.


                  1. Caraul
                    18.05.2019 18:54

                    PR тут в широком смысле.


                1. cebka
                  18.05.2019 15:17
                  +3

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


                  1. Caraul
                    18.05.2019 18:53

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


                    1. cebka
                      18.05.2019 19:31

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


                      1. Caraul
                        18.05.2019 20:23

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


            1. cebka
              18.05.2019 13:03

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


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


              1. Caraul
                18.05.2019 13:44

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


                1. cebka
                  18.05.2019 14:02
                  +4

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


                  1. Caraul
                    18.05.2019 18:55

                    Начинал писаться Just For Fun, а сейчас ситуация совсем другая. Любопытно было бы услышать про начало списка приоритетов OpenSource.


        1. vsespb
          18.05.2019 13:28

          Принимать PR от людей, которые плохо знают проект (включая архитектуру проекта, дизайн его частей и стиль кода), лишь потому что «код решает проблему» — верный путь чтобы проект превратился к кусок дерьма (возможно популярный, если пользователям в этой нише действительно нужен кусок дерьма).


          1. Caraul
            18.05.2019 13:41

            Еще раз — «Насколько их стиль будет соответствовать авторскому — зависит от желания автора.» А если вообще не принимать PR (потому что «я сам написал бы лучший код»), то есть шанс, что проект заглохет, толком не начавшись. Я писал про то, что «лучший код» может быть только в голове, и код похуже может помочь проекту. А где найти золотую середину — дело автора.


      1. sovaz1997
        18.05.2019 11:59

        Хотя мне никто PR не отправлял, взглянув на чужой код, чаще всего понимаешь, что он не нравится (хотя этот код может быть лучше и качественнее). И тут все влияет: названия функций, стиль написания, сама архитектура приложения может не нравится и множество других «подсознательных» вещей.


  1. rewiaca
    18.05.2019 13:44

    Дочитал заметку, ощущение что автор спешил и не дописал ее либо ее не дообдумал, ждем продолжения.

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


    Вроде как MSDOS закрепился хорошо… Apache можно вспомнить, nginx.


  1. mr_fresh
    18.05.2019 16:25

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


  1. dominigato
    19.05.2019 02:48

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