Три версии подряд оказались неверными. Логгер дал ответ за минуту
Модель выдаёт правдоподобные гипотезы бесконечно и бесплатно — и это её самое дорогое свойство. История про то, как две строчки логирования закрыли вопрос, на который три стройные версии отвечали неправильно.
Пять дней назад я пытался открыть домашние камеры с телефона. Дома по Wi-Fi — не открывается. С улицы по мобильному интернету — открывается. Симптом, который сам напрашивается на объяснение: конечно, дело в том, как телефон ходит в сеть дома.
Дальше было три версии. Каждая стройная, каждая объясняла ровно то, что мы видели, и каждая была неверной.
Версия первая: раздельный туннель на телефоне. Логично — дома трафик до нужной подсети идёт мимо VPN. Проверили настройки, поправили. Не помогло.
Версия вторая: петля. Тоже логично — запрос уходит в туннель и возвращается в ту же сеть, из которой вышел. Разобрали. Не помогло.
Версия третья: сломан обратный маршрут. Уже теплее по смыслу, но конкретика опять оказалась мимо.
Между версиями я четыре раза сходил за телефоном проверить. Это и есть настоящая цена гипотез: не токены, а мои походы по квартире.
Две строчки, которые закончили спор
На четвёртом заходе мы поставили логгер. Буквально два правила: писать в лог всё, что приходит на нужный порт, и всё, что с него уходит.
Ответ пришёл за минуту.
Пакеты доезжали. Все. И приходили они с адреса 10.11.0.25 — а в списке разрешённых стоял 10.11.0.22.
.22 — это телефон. .25 — домашний роутер. Дома телефон уходит в VPN не сам: его трафик идёт через роутер, и на сервер запрос приходит от имени роутера. На улице тот же телефон приходит уже как .22 — поэтому с улицы и работало.
Ни одна из трёх версий даже близко не подходила к этому. Все они обсуждали, доезжает ли пакет. Настоящий вопрос был — с какого адреса он доезжает. Про этот вопрос никто не думал, потому что он не выглядит вопросом.
Заодно вылезла вторая поломка, которую тоже никто бы не угадал: ответы сервера попадали под то же правило маршрутизации, что и клиентские запросы, — их адрес отправителя из той же подсети. Ответ уезжал не в туннель, а на соседний сервер. Запросы доходят, ответов нет, соединение висит вечно. Логгер на исходящих показал это второй строчкой.
Инструмент, который не мог дать ответ в принципе
Есть история из того же дома, ещё грубее.
Одну из шести камер я три недели считал мёртвой. Она не отвечала на пинг, в системе видеонаблюдения висела ошибка, по старому адресу пусто. Всё сходилось: камера обесточена, надо лезть на фасад.
Камеры не отвечают на пинг. Ни живые, ни мёртвые — у них просто выключен ответ на такие запросы.
То есть три недели я принимал решения по инструменту, который физически не мог отличить рабочую камеру от нерабочей. Он всегда показывал одно и то же. На деле DHCP переселил её на соседний адрес, и всё это время она прекрасно работала — её было видно в мобильном приложении, куда я не догадался заглянуть.
Правильная проверка занимает две секунды: посмотреть таблицу соседей по сети и найти в ней MAC камеры. Нашёлся на другом адресе — значит, переехала. Две секунды против трёх недель.
Почему это стало болеть именно сейчас
Раньше гипотезы стоили дорого. Чтобы выдвинуть версию про маршрутизацию, надо было потратить полчаса на чтение документации — и это само по себе фильтровало: до формулировки доживали только те версии, в которые человек хоть немного верил.
Сейчас гипотеза стоит ноль. Спрашиваешь модель, почему не работает, — получаешь пять стройных версий за десять секунд. Каждая написана уверенным тоном, с механизмом, с планом проверки.
Это её сильная сторона и одновременно самая дорогая. Правдоподобие перестало быть признаком правоты — оно теперь бесплатное. Раньше стройность версии кое-что говорила о её качестве: до стройной формулировки надо было додуматься. Теперь стройность не говорит ни о чём.
Дальше включается человек. Версия звучит убедительно, её хочется проверить — и проверка это уже мои полчаса, мой поход за телефоном, мой лоб. Модель генерирует бесплатно, плачу я.
Что я изменил в порядке работы
Одно правило: при «не работает» первым действием идёт измерение, а не вопрос о причине.
Не «в чём может быть дело» — на этот вопрос всегда есть ответ, и он всегда красивый. А «чем я отличу одну версию от другой за минуту».
На практике это значит завести дешёвый замер для каждого слоя, где я вообще что-то чиню, и знать его наизусть:
- сеть — логгер на входящие и исходящие, ответ за минуту;
- железо в сети — таблица соседей и MAC, а не пинг;
- код — счётчик или лог прямо в подозрительном месте, а не рассуждение о том, что там должно происходить;
- деньги — счётчик расходов в самой точке платного вызова.
Формулировка, которая теперь стоит у агента в инструкциях: сначала факт, потом теории. Если версий больше одной и ни одну нельзя проверить дешевле, чем за пять минут, — значит, я не измерил то, что должен был.
Три недели и четыре похода за телефоном — нормальная цена, чтобы это запомнить. Второй раз платить не хочется.