Правило 11. Используйте разумные ограничения
Тема этой статьи – «Используйте разумные ограничения» – нашла меня сама.
Произошла типовая для больших корпораций ситуация: сотрудник ошибся со адресами письма и вместо фокус-группы адресатов пилотного проекта отправил письмо в общую рассылку по компании. Ситуация типовая, но вот её развитие было несколько неожиданным, что и подтолкнуло меня на написание этой статьи в контексте дизайна ИТ-систем и правил архитектора, в частности.
Расскажу немного о самой ситуации, чтобы читатель мог лучше погрузиться в контекст и понять дальнейший ход рассуждений.
По дороге на работу я, как обычно, проверил почту; в ящике было одно письмо, на которое я хотел ответить с компьютера ввиду удобства. Через 5 минут после последней проверки почты я был уже в офисе и увидел 51 непрочитанное сообщение. Примечательно, что тема была связана с пилотным проектом беспилотника. Я никакого отношения к проекту не имел, но, так как имею прямое отношение к ИТ, подумал, что, возможно, меня включили в новый проект.
Пока я листал ленту сообщений, стараясь найти изначальное письмо и понять, что там случилось, количество писем подскочило до 100, затем до 150 и так за какие-то 15 минут у меня было уже 261 письмо в почте. Письма валились в почтовый клиент на телефоне и на ПК, в итоге мне даже пришлось отключить получение новых писем, чтобы добраться до базового письма и не отвлекаться на постоянные апдейты.
Изначальная проблема была весьма специфическая, связанная с работой пилота, которую я раскрыть не могу, но это и не важно. Важно то, что, получив всего одно письмо, получатели этого письма вместо того, чтобы понять, что это была ошибка, и уведомить об этом автора письма, начали отвечать всем (а это тысячи людей) примерно следующее: «Письмо направлено мне по ошибке. Прошу исключить из списка рассылки». Таким образом, размер ошибки раздулся в 261 раз!
При этом некоторые сотрудники пытались «остановить» поток спама, отвечая опять-таки на всех: «Не отвечайте на письмо. Не создавайте спам», – но тем самым они только ухудшали ситуацию, присылая очередное бесполезное письмо.
Правильным в такой ситуации было просто проигнорировать письмо, ведь автор наверняка уже понял, что совершил ошибку. Но большое количество людей продолжали бомбардировку письмами с просьбой отписать их от рассылки. Своей истерикой, а иначе я не могу это назвать, ведь каждый из этих 261 получил только одно письмо в начале, и это не был повод срочно требовать исключить тебя от рассылки. А вот каждый такой ответ парализовал работу компании, ведь среди потока этих писем терялись важные сообщения.
Я смог довольно быстро справиться с потоком спама, настроив на ПК правило, по которому эти письма отправились в корзину, синхронизовал почту на мобильном телефоне и в итоге у меня остались только важные письма. Но проделать такой фокус на телефоне куда сложнее, а многие сотрудники в этот момент как раз читали почту на телефоне. Точнее, доступ к почте на телефоне предоставляется только людям «работающим в поле» или тем, кто по особому согласованию с ИБ должен получать оперативные уведомления.
Не хочу касаться темы организационной и информационной профилактики, для этого есть соответствующая дирекция.
Когда-то давно я читал о похожей ситуации в книгах по истории. Во время Второй мировой войны союзники хотели замедлить создание ядерной бомбы нацистской Германией. Для этого над местами, где проводилась разработка, сбрасывали сотни листовок с задачами и головоломками с примерно следующим призывом: «Если ты умный, реши меня». Учёные, чьё самолюбие было задето, занимались разгадыванием головоломок вместо того, чтобы заниматься проектом. В итоге военным приходилось бегать с мётлами и вёдрами, собирая все эти листовки, чтобы на них не обратили внимание учёные.
Произошедшая у нас ситуация напомнила мне этот случай в истории, когда большое количество людей отвлекались от своей работы на бестолковые письма с призывом исключить их из списка рассылки, а не занимались своей работой.
Так сложилось, что в России крайне негативно относятся к правилам и ограничениям, хотя многие из них весьма разумные. И любые ограничения воспринимаются в штыки бизнесом, пока не произойдёт глобальной беды, после которой будут выдавать «награды» всем причастным.Установка ограничений и границ решения является второй по важности после описания самого решения.
Формулирование разумных ограничений должно перейти из состояния «Не плохо бы иметь» в состояние «Обязательно к формулированию».
Сложно дать универсальный набор правил по установке ограничений, ведь они зависят от многих факторов: сектор экономики, принципы компании, стратегия развития и так далее. В своей работе я руководствуюсь следующими общими принципами установки ограничений:
1. Не быть «Мистером Нет»:
Прозвищем «Мистер Нет» американцы наградили советского министра иностранных дел Андрея Громыко за его принципиальность в отстаивании интересов страны. Во многих компаниях роль «Мистер Нет» выполняют сотрудники ИБ, которые запрещают всё подряд, чем бы ты к ним ни пришёл, вместо того чтобы вместе с командой придумывать, как реализовать задачу и сделать это безопасно. Поэтому ИБ стараются или обойти, или не спрашивать, чтобы не получить отказ.
Если хотите, чтобы ограничения работали, они должны фокусировать решение, отсекая лишнее, а не блокировать реализацию. Если же реализация объективно невозможна, она должна быть раскрыта в рационализации (см. пункт 2).
2. Ограничения должны сопровождаться рационализацией:
Многие ограничения бывают продиктованы конкретными обстоятельствами, актуальными на момент их принятия. Но обстоятельства могут меняться, а ограничения остаются на месте в примерно такой формулировке — «Здесь так принято». Жизнь не стоит на месте, то, что было невозможно или нельзя вчера, сегодня может быть можно и нужно.
Закон, который раньше ограничивал реализацию, может измениться, и ограничения испарятся. Но если вы нигде не описали, что реализация заблокирована законодательством, его изменение не станет для вас триггером по снятию этого ограничения.
3. При наличии прецедентов ограничения должны на них ссылаться:
Люди, а особенно молодые, часто встречают ограничения негативно, как попытку контроля со стороны родителей и учителей, донимавших их всю прекрасную юность. Однако, если ограничения введены уже после того, как неприятность случилась, хорошо рационализовано, ссылка на обезличенный, но правдивый случай позволяет людям лучше принимать ограничения. Требование вытирать машинное масло с пола, подкреплённое рассказом, что был тут у нас один, так сам же и поскользнулся, увезли на скорой, приживётся лучше, чем сухая техника безопасности.
Это, конечно, не панацея, найдутся и те, кто пять раз сломав руку, разольёт масло и в шестой раз, но в большинстве случаев истории сильно помогут.
4. Обход ограничения должен быть дороже, чем следование ему:
Многие ограничения не работают потому, что наказания за них не предусмотрены или насколько безобидные, что им проще не следовать. Введение ограничений должно делаться так, чтобы следование правилу было проще и дешевле, чем нарушение его.
Определить, а уж тем более привести в исполнение наказание часто лежит вне возможностей архитектора. А значит, легко обходится или игнорируется, превращая архитектора в бумаг-мараку или пустозвона. Если вы не можете заставить ограничение работать, стоит задуматься о рациональности его введения, а в иных случаях это индикатор от него и вовсе отказаться. Вводя ограничение, постарайтесь найти того, кто сможет заставить его выполнять.
5. Анализировать влияния дальше первого уровня:
Вводя какие-либо ограничения, нужно продумать, какие дополнительные эффекты (side effects) вы можете получить. Ввели ограничение на RPS API, чтобы снизить нагрузку на базу данных и перенести очередь перед входом в API. Но не учли, что эти данные используются ещё в цепочке сервисов дальше и ограничены общим временем жизни от момента отправки — на выходе имеем ряд невалидных транзакций, отброшенных в самом конце цепочки, и недовольных потребителей, которые получили ответ «ваш запрос принят».