«Идут 1 из 10».
Так моё приложение подписывало встречу, которую человек завёл пять минут назад. Единица в счётчике — это он сам. Строка значила «встречу только что создали», а читалась как «туда никто не идёт». Я починил это 18 сентября. Одну строку, в одном месте. Вчера открыл картинку, которой организатор делится в чужом чате. На ней было написано: «Идут 1 из 10». Тогда я взял все числовые строки приложения — их тридцать одна — и прогнал каждую с нулём. Просто посмотрел, что она скажет, когда данных нет. Пять мест. Картинка, которая уходит наружу, в чужие чаты, — та самая. Единственный экземпляр, который видят посторонние, и он говорил им «туда никто не идёт». Лист заявок при обрыве связи писал: «Все разобраны — заявок нет». Организатор закрывал его спокойным. Люди, нажавшие «Я с вами», оставались без ответа и не приходили. Профиль на обрыве говорил «Пока пусто. Самое время позвать знакомых» — человеку, который собрал десять встреч. Своя встреча, заведённая час назад, показывала автору «👀 0 · 🙋 0 · ✅ 0». Три нуля в ряд читаются как провал, а значат «ещё рано». Теперь главное. Во всех пяти случаях код работал правильно. Ноль был настоящий, вычисления верные, ошибок нет. Ошибка была в решении этот ноль показать. Отсутствие информации печаталось как информация. Месяц назад я писал здесь про рассылку, которая никого не находила: функция исправна, запускается вовремя, а множество, из которого она выбирала, было пустым. Это её родной брат. Там мы молчали, когда надо было говорить. Здесь говорили, когда надо было молчать. И отдельно — про то, как я сам себя обманул. Я не забыл правило. Я применил его там, куда ткнули пальцем, и посчитал дело закрытым. Заплатка в одном месте выглядит как починка ровно до тех пор, пока не посмотришь, сколько в коде мест с тем же кодом. Что я стал делать иначе. Чиню строку — сразу ищу всех её братьев грепом, а не по памяти. И проверяю не «есть ли ошибка», а «что эта строка скажет, когда сказать нечего». Прогон всех строк с нулём занял пятнадцать минут. Пять мест из них жили в приложении месяцами.