Почему чтобы переместить кнопку, нужно две недели

Многие сталкивались с нерелятивистскими искажениями времени разработки крупных проектов. Кажется, что выполнение задачи должно занять один-два дня, а на самом деле требуется две-три недели. Это вызывает вопросы, однако существует красивая метафора для иллюстрации происходящего. Разумеется, как любая метафора, она упрощает ситуацию, поэтому на самом деле ничего не объясняет, но всё же демонстрирует некоторые любопытные механики.

Почему чтобы переместить кнопку, нужно две недели

Допустим, мы строим пирамиду из кирпичиков 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 любой конфигурации в течение минуты, создайте свою конфигурацию в пару кликов.

 

Источник

программирование, программная инженерия, разработка программного обеспечения, стартап, технологии

Читайте также