Сколько живёт неверная фраза
14 августа на страницу «о нас» попала фраза о том, что мы намеренно не меряем ни показатель отказов, ни время на странице, потому что и то и другое потребовало бы сеанса, отслеживаемого через несколько просмотров, а значит — баннера согласия на сайте.
27 августа мы выпустили время на странице. Фраза осталась.
Тринадцать дней верна, двадцать восемь часов ложна
Даты точны, потому что их знает репозиторий. Фраза приходит 14 августа в 22:41. Длительность пребывания, в шести ступенях, приходит 27 августа в 17:53 — и с этой минуты вторая половина фразы ложна. Исправлена она 28 августа в 21:57.
То есть она была верной тринадцать дней и ложной двадцать восемь часов, что звучит хорошим соотношением, пока не обнаружится: в эти двадцать восемь часов ничто не собиралось их прекращать. Ни один тест не упал. Ни одна проверка не подала голоса. Страница собралась, возможность работала, и обе тихо противоречили друг другу на одиннадцати языках.
Почему ни одна проверка не могла её поймать
Всякая автоматическая проверка в этом проекте сравнивает две вещи, обе из которых находятся в системе: число строк с одиннадцатью, ширину подписи с её местом, список таблиц со схемой. Утверждение на странице не сравнимо ни с чем. Это проза о мире, а миром здесь была таблица, возникшая совсем в другой части кода.
Можно вообразить проверку, которая ищет в тексте «о нас» названия возможностей и сверяет их. Она была бы длинной, хрупкой и всё равно упустила бы интересные случаи, потому что фраза не называла таблицу. Она называла причину: для этого понадобился бы баннер согласия. Эта причина тихо перестала действовать.
Что этому положило конец
Вопрос. Кто-то хотел знать, показываем ли мы показатель отказов, и честный ответ требовал прочесть фразу рядом, после чего она упала.
Это тот же механизм, который в начале месяца снял с этой страницы четыре других утверждения, и это не механизм, а везение. Единственное, что улучшает шансы, — писать утверждение достаточно узко, чтобы оно оставалось проверяемым: не «мы не меряем X, потому что Y», а «X нет на этой странице» — фраза, описывающая страницу, на которой стоит, а не причины за ней.
Что здесь обобщается
Код гниёт громко. Проза о коде гниёт тихо, и гниёт она обычно в тот момент, когда код становится лучше.
Чтобы исправить одну фразу, пришлось изменить тринадцать мест: одиннадцать языковых версий одной строки оболочки и два абзаца написанного вручную HTML. Это число стоит знать перед следующим объяснением, потому что оно — цена всякого утверждения, которое тянется дальше страницы, на которой напечатано.