Грязный взлом

Срочно позвонил клиент и попросил нас изменить текст сообщения на странице так, чтобы оно соответствовало его контексту. Их пользователи просматривали его, и изменение должно было быть внесено СЕЙЧАС. Это изменение было очень важным для клиента и очень чувствительным ко времени.

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

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

<div ng-if="client.id == '24217129837'>
   The message text specific to that organization.
</div>
<div ng-if="client.id != '24217129837'>
   The message text everyone else would see.
</div>

Клиент был сыт, хотя я был в абсолютном ужасе.

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

Что в этом плохого?

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

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

Мы поступили правильно в нашей ситуации.

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

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