Development

Нет ничего более постоянного, чем временное

(В оригинале – The Longevity of Interim Solutions)

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

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

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

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

Есть ли здесь проблема? Ответ зависит от конкретного проекта и вашего отношения к стандартам кодирования. Если в системе слишком много временных решений, ее энтропия (или внутренняя сложность) возрастает, а сопровождаемость снижается. Однако, это не тот вопрос, который следует задавать в первую очередь. Мы сейчас говорим о решениях. Возможно, это не является вашим предпочтительным решением (вряд ли это решение предпочтительно для кого-либо), однако это – решение, и мотивация для его переделки будет низкой.

Что же мы можем сделать, если столкнемся с такой проблемой?

  1. Избегать временных решений с самого начала
  2. Поменять силы, влияющие на решения менеджера проекта
  3. Оставить все так, как есть

Давайте рассмотрим все три варианта подробнее.

  1. Избежать временного решения получится не всегда. Есть реальная проблема, которую надо решить, а стандарты слишком жесткие и сделать этого не позволяют. Вы можете потратить какое-то количество энергии на попытку поменять стандарты. Достойно уважения, хотя и утомительно. И неэффективно с точки зрения вашего проекта и проблемы.
  2. Упомянутые силы основаны на культуре проекта, что затруднит изменения. Возможно, это и получится, особенно если проект маленький и вы можете сами все разгрести без чьего-либо одобрения или же если проект уже настолько погряз во временных решениях, что это уже видно и снаружи, и на его расчистку официально выделяется время.
  3. Если же вы не сделаете ни первое, ни второе, то существующее положение вещей таковым и останется.

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

Автор оригинала – Klaus Marquardt