Допустим, мы строим пирамиду из кирпичиков Lego размером 2×2 блока. Сколько потребуется времени на создание MVP (minimum viable product) пирамиды? Столько, сколько требуется для установки одного кирпичика! Допустим, это 1 секунда. То есть мы создали MVP пирамиды за 1 с. Сколько потребуется времени на реализацию v1? Нам нужно установить ещё три детали на уровне 9 и одну на уровне 1. Ещё 4 детали, то есть ещё 4 секунды. А для версии v2? Ещё пять деталей на уровне 0, три детали на уровне 1 и одна на уровне 2 — суммарно девять деталей и ещё девять секунд.
То есть для каждого нового уровня нам понадобится потратить (версия * 2 + 1) + ((версия -1) * 2 + 1) + … + 1
секунд. На переход от версии 32 к версии 33 понадобится 19 м 16 с, а от версии 49 к версии 50 — 43 м 21 с. Это не так уж плохо (можно вычислять время для достижения любого уровня с помощью этой программы), однако очевидно, что время суммируется.
Допустим, мы делали это на протяжении нескольких часов (возьмём для конкретики 3 ч 48 м 5 с) и теперь находимся на уровне v33. Отлично! Каждая деталь имеет ширину 2 см и высоту 1 см, то есть у нас получилась пирамида высотой 33 см, занимающая пространство 66 см x 66 см.
На следующий день мы вкладываем чуть больше усилий, но ценой чуть большего количества времени, и переходим на v45. Не так хорошо, как вчера, но всё равно это хорошие подвижки.
Завтра мы работаем ещё больше, но к концу дня добираемся только до v51. Выглядит не очень многообещающе, так что, вероятно, стоит позвать на помощь друзей.
Помогать нам согласились Алиса, Боб и Кэрол, поэтому на следующий день мы встречаемся и начинаем собирать детали. Каждый из нас взялся за свою сторону пирамиды, поэтому мы, по сути, движемся в четыре раза быстрее! Благодаря этому к концу четвёртого дня мы достигли уровня 69. Отличный темп!
Теперь, когда мы достигли определённого этапа, начинают становиться заметными более интересные проблемы иной природы. Мы находимся на версии v69, и пирамида имеет высоту 69 см с площадью основания 138 см x 138 см. Пока это вполне приемлемо, но она будет только увеличиваться, и в какой-то момент в комнате больше не останется места для дальнейшего строительства. Поэтому нам нужно переместить пирамиду в гараж. Будет ли это сложно? Сколько весит пирамида версии v69? Её масса составляет количество деталей * масса каждой детали
. Удобно, что количество деталей равно количеству суммарно потраченных секунд, а каждая деталь весит примерно 1 г, то есть масса пирамиды… 65,369 кг! Довольно прилично.
Но и это ещё не всё — она не помещается в дверь (ширина двери примерно 90 см, а основание пирамиды — 138 см), поэтому нужно наклонить её и перемещать в таком виде. Но как нам тогда её держать? Почесав в затылке, мы придумываем решение — построим вокруг пирамиды опоры, чтобы придать конструкции жёсткость, и прикрепим к ним ручки для переноски. Алиса настаивает, что «нужно делать всё правильно» — построить вокруг пирамиды колесо и потом перекатить её в нужное место. («Что если нам придётся снова в будущем ещё раз перемещать её? Если мы создадим опору для колеса, то мы сделаем 90% работы для следующего перемещения».) Но для создания колеса вокруг пирамиды потребуется целый день, не говоря уже о том, что внутри. Мы обсуждали эту задачу всё утро, и за обедом приняли решение построить вокруг нечто блочное, обернуть всё скотчем и перенести в гараж — возможно, это и не лучшее решение, но, по крайней мере, мы сможем двигаться дальше.
На практике всё оказалось гораздо сложнее. План выглядел разумным, но в нём обнаружилось множество недочётов, и нам пришлось кое-что изобретать на лету. Однако нам удалось справиться с задачей, после чего сама переноска всей конструкции оказалась довольно простой.
Перенос завершился огромным успехом — мы закончили даже до конца дня. Наш проект вырос до такой степени, что у него появилось собственное пространство! Мы были счастливы и сразу отправились на кухню, чтобы отпраздновать наше свершение. Алиса казалась слегка расстроенной, но я уверен, что всё будет нормально.
На следующий день мы пришли в гараж и обнаружили замотанную скотчем конструкцию размером 1,5 м x 1,5 м x 0,8 м… Похоже, нам придётся потратить немного времени на разматывание, ничего особенного.
Однако это заняло целый день, и чтобы немного ускорить процесс, я снял значительную часть уровней 20–45. Прежде чем я начал, Алиса что-то мне сказала, но если всё сработает, экономия времени себя оправдает… На починку понадобилось больше времени, чем я ожидал, но к концу дня мы были готовы к тому, что на следующий день приступим к созданию нового уровня!
Это седьмой день проекта, и он должен стать отличным! Мы двигались к версии v80, но тут произошла катастрофа: Боб устанавливал несколько деталей на верхних уровнях и прислонился к пирамиде, и случайно опёрся прямо на то место, где я вчера ремонтировал повреждённые уровни 20–45 (Говорил ему начинать с нижних уровней! Этого бы не произошло, начни он с нижних уровней!). Я бы впустую потратил время, заполняя деталями всю полость, поэтому заложил только самую поверхность, и неудивительно, что она проломилась, когда на неё оперся Боб. Боб попал на на повреждённые сектора пирамиды с 5F до 19M (Или 19D? Кэрол придумала немного запутанный способ маркировки частей пирамиды, поэтому я иногда не понимаю, где что находится). Как будто этого было недостаточно, Алиса заметила мои оптимизации и начала ещё одну полемику о том, что «нужно делать всё правильно».
К концу седьмого дня прогресс оказался отрицательным — мы по-прежнему оставались на версии v69, но ещё и с повреждёнными секторами 5F — 19M (или D?). Алиса требует, чтобы мы придумали правила строительства (как будто у нас время бесконечное) и обсуждали идеи перед их воплощением. Почему она всегда всё слишком усложняет? Я согласен, что нужны правила, но пока мне нужно только одно правило — не опираться на пирамиду!
На следующее утро мы уделили немного времени обсуждению правил и я вынужден был признать, что моё отношение вчера было неверным. Я был раздражён и немного расстроен тем, что обнаружилась моя «оптимизация» для устранения проблемы, и что я стремился к созданию правил для «сокрытия» своей тайны, а не для предотвращения этой ситуации. Мы все пришли к согласию о том, что при дальнейшем развитии не стоит искать лёгких путей, или, по крайней мере, синхронизировать эти лёгкие пути с командой.
Посмотрим, какие подвижки мы совершим на следующей неделе…
Эта история показывает, как меняется ситуация в процессе роста проекта: у нас не только уходит больше времени на знакомые задачи из-за большей площади поверхности, но и появляется совершенно новая сфера проблем, связанных с ростом проекта. Перемещение кнопки может казаться простым изменением: достаточно убрать её из одного места и поставить в другое. Однако если учесть меры, предпринимаемые для безопасности выкатывания этого изменения (на случай, если идея окажется плохой), всё становится сложнее:
- Поместить кнопку под feature flag
- Скопировать кнопку в новое место (тоже под флагом)
- Протестировать её в тестовом окружении с отключенным и включенным флагом
- Включить флаг
- Дождаться релиза
- Убедиться, что после перехода всё в порядке (метрики нормальны/не выявлено никаких проблем)
- Подождать в течение нескольких релизов, чтобы убедиться в отсутствии проблем
- Сделать флаг включенным по умолчанию
- Подождать несколько релизов
- Удалить флаг с первой кнопкой
При таком процессе две недели на перемещение кнопки — это на самом деле довольно быстро.
На правах рекламы
Закажите и сразу начинайте работать! Создание VDS любой конфигурации в течение минуты, создайте свою конфигурацию в пару кликов.