Бодибилдинг интенсивен. Как и технический долг! Какие уроки мы можем извлечь из бодибилдинга, когда речь идет о разработке программного обеспечения?

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

Каковы фазы тренировочного цикла бодибилдинга?

В простейшей форме тренировки по бодибилдингу можно определить следующим образом:

while (physiqueNeedsImprovement) {
  bulk()
  cut()
}

Бодибилдеры проходят этапы набора массы и сушки, которые повторяются до тех пор, пока они не будут довольны своим телосложением.

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

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

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

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

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

Технический долг = жир

Чистый, поддерживаемый код — это сухая мышечная масса. Это впечатляюще, красиво и то, чего мы все хотим. Технический долг — это жир. Кажется, что как бы мы ни старались, над нашим чистым кодом всегда остается что-то, что скрывает его красоту.

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

Набухание

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

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

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

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

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

Резка

Сокращение можно сравнить с усилиями по устранению технологического долга (или, говоря более удобным для продукта термином, — «инициативы в области устойчивого развития»). Эта фаза так же важна, как и фаза наращивания, но многим командам трудно убедить продукт и руководство в необходимости этого. Точно так же многие бодибилдеры-любители всегда набирают массу, потому что они хотят просто сбросить калории и лязгать в тренажерном зале, но никогда не хотят садиться на диету и худеть.

Если бодибилдер никогда не худеет, он может стать сильным и огромным, но у него точно не будет худощавого впечатляющего телосложения. То же самое и с нашим программным обеспечением. У нас может быть множество функций, и мы можем удовлетворить все потребности наших клиентов, но надвигающийся технический долг в конечном итоге настигнет нас.

Развитие будет замедляться по мере накопления технического долга, потому что разработчикам будет труднее с ним справиться. Добавление новых функций становится утомительным, потому что распутывание путаницы кода, который трудно понять и дезорганизовано, занимает больше времени, чем собственно создание функции. Да, мы добавили массу возможностей, постоянно «наращивая», но в результате мы — толстый, не в форме бодибилдер, стесняющийся стоять на сцене в своих плавках.

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

Команды должны четко объяснить преимущества этих инициатив в области устойчивого развития с практической точки зрения (более быстрое время сборки, более согласованный пользовательский интерфейс, улучшенная доступность, более легкая разработка будущих запросов функций, более довольные разработчики, что угодно!).

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

Однако мы не всегда можем находиться в фазе резки. Если вы регулярно посещаете тренажерный зал, вы можете узнать тех, кто застрял в постоянном сокращении — очень худой, но почти без мышц и не очень сильный.

Разработчики могут быть в восторге от того, что весь код чистый и легко поддерживаемый, но какой ценой? Если мы так боимся технического долга, что никогда не добавляем функции (или добавляем функции очень медленно, чтобы не набрать ни малейшего количества жира), наш продукт никогда не достигнет того, чего мы хотим.

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

Будьте сбалансированы

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