Наш продукт представляет собой распределенную систему. Модули, над которыми я работаю, являются довольно новыми, довольно строгими, хорошо проверенными. Они были разработаны с учетом последних передовых методов. Другие модули можно рассматривать как устаревшее программное обеспечение.
Пока я проявляю бдительность ко всему, что происходит в рамках модулей, за которые я несу ответственность, я постоянно испытываю давление, чтобы работать с плохими данными, отправленными мне из других модулей. В глубине души я являюсь разработчиком принципа "Fail Fast", и в результате, когда возникают проблемы, я обычно могу устранить возможность ошибки в моих модулях. Это не столько виноват, сколько экономит потраченное впустую усилие в преследовании ошибок в неправильных местах.
Но аргумент, который я продолжаю противодействовать, заключается в следующем: "Мы не можем допустить, чтобы этот материал вышел из строя, клиент ожидает, что это сработает, почему бы вам не решить эту проблему". И это будет аргументом в пользу надежности: будь либеральным в том, что вы принимаете, консервативным в том, что вы отправляете.
Следует также отметить, что это, в основном, проблемы с прерывистостью. Мы видим их в тестах интеграции, но их трудно воспроизвести. Используются время и concurrency.
Мне сложно балансировать между двумя принципами. Отчасти это мое беспокойство, что, если я начну разрешать и распространять исключительные данные, я предлагаю проблемы, и у меня не будет такой уверенности в моей системе. Но я не могу возражать против того, чтобы система работала, даже если другие модули посылают мне неправильные данные. Причина, по которой другие модули не исправляются, заключается в том, что они слишком сложны и хрупки, а мои по-прежнему кажутся ясными и безопасными. Но если я не сопротивляюсь давлению, мои модули будут медленно обременены теми же проблемами, которые я до сих пор отвергал.
Я должен сказать, что система не "сбой" в производстве, но мой модуль может просто показать ошибку оператору и попросить их связаться со службой поддержки. Крушение было бы большой проблемой, но если я четко сообщаю об ошибке, то разве это не правильно? Я подозреваю, что мои сверстники просто не хотят, чтобы у клиента были проблемы, период. Но мой модуль отказывается от данных из других модулей нашего продукта, а не от пользователя. Поэтому мне кажется, что мы просто не решаем проблемы.
Итак, мне нужно быть более прагматичным или удерживать свою почву?