Случай первый: «176 мс», которых не было
В отчёте о скорости моделей стояло короткое и запоминающееся значение: 176 мс. Число выглядело правдоподобно, легко цитировалось и быстро стало общим местом всех обсуждений скорости.
| Что утверждалось | Что показала телеметрия |
|---|---|
| «176 мс» у конкретной модели | у неё же: минимум 180 мс, медиана 1770–1796 мс при n = 24…43 |
| — | единственная строка во всём массиве со значением вида 176xxx: задержка 176 325, то есть 176 секунд |
| — | строка принадлежит другой модели и относится к другой задаче |
Совпали три обстоятельства: цифры «176» в телеметрии действительно существовали, значение оказалось рядом с реальным минимумом обсуждаемой модели, а единица по дороге сменилась с секунд на миллисекунды. Проверять число, похожее на правду, никто не стал.
Чего стоила одна потерянная единица. Поставщика отвергли — решение сформулировано как «не плати» и опиралось на чужое число. Архитектуру воркера переписали под скорость, которой не существовало. Число прошло 14 сообщений, ни в одном не встретив вопроса «мс или с, и чья это строка».
Чего мы намеренно не утверждаем. Вывод здесь не «такой-то поставщик медленный». Правда ровно обратная: число было не о нём. Публиковать по такому материалу оценку чьей-то скорости — повторить исходную ошибку, только уже публично.
Случай второй: доля, к которой прибавилась соседняя колонка
Вторая история — про долю в сводной таблице. В отчёте она названа как «76%», на диске та же величина считается как 57,4%. Механизм расхождения удалось воспроизвести точно, до последнего знака.
Сумма нужной колонки даёт 57,4%. Если в неё попадает одна-единственная ячейка из соседней колонки — не вся колонка, одна ячейка, — доля становится 75,9%. Именно эти 75,9% и округлились до звучного «76%».
Дальше сработало размножение. Доля уехала в 5 документов, прозвучала в 9 сообщениях и превратилась в опорный вывод раздела: на неё ссылались как на установленный факт, первоисточник не перепроверяли. Ошибке присвоен отдельный класс в нашем реестре — чтобы следующий такой случай ловился по признаку, а не по удаче.
Что общего у двух случаев
Оба числа настоящие. Оба взяты из наших же артефактов. Ни в одном случае никто ничего не выдумывал — терялся контекст, без которого число перестаёт быть числом.
| Что потерялось | Как выглядит потеря | Чем ловится |
|---|---|---|
| Единица измерения | секунды читаются как миллисекунды | единица хранится в имени поля и переносится вместе со значением |
| Владелец строки | значение приписано не тому участнику и не той задаче | цитата строки артефакта целиком, а не одно число из неё |
| Состав суммы | лишняя ячейка внутри итога | пересчёт из исходных ячеек, а не сверка двух готовых итогов |
Скорость размножения у обеих ошибок оказалась выше скорости проверки: 14 сообщений в первом случае, 9 сообщений и 5 документов во втором. Опровержение приходит позже и читается меньшим числом людей, чем исходное утверждение.
Что забрать себе
- Единицу измерения носите вместе со значением. Не в шапке таблицы, не в подписи к графику, а в имени поля: «задержка_мс» вместо «задержка». Разница в тысячу раз не должна зависеть от памяти читателя.
- Цитируйте строку артефакта целиком. Одно число, вырванное из строки, теряет и владельца, и задачу, и условия прогона.
- Сумму проверяйте пересчётом из ячеек. Сверка двух готовых итогов между собой не ловит двойной учёт — оба итога будут правдоподобны.
- Считайте, сколько раз число процитировано, прежде чем его проверили. Наши 14 и 9 — не курьёз, а мера того, насколько дешевле поймать ошибку в первый день.
- Опровержение публикуйте отдельно, а не правкой в старом файле. Тихая правка оставляет неверное число во всех остальных местах, где его уже успели пересказать.