Три состояния значения: проверено, не удалось, не проверялось

Панель показывает: «аккаунтов в спам-блоке — 0». Хорошая новость? Ответ зависит от числа, которого на экране нет: сколько аккаунтов вообще проверяли. Если ни одного, то ноль означает не «всё чисто», а «мы не смотрели» — и это два принципиально разных нуля.

Любая панель управления флотом — всеми рабочими аккаунтами, которыми вы пишете, — обещает одно: посмотрел и понял, что происходит. Проблема в том, что интерфейсы устроены двоично. Значение либо есть, либо его нет; индикатор либо зелёный, либо красный. А реальность троична, и третье состояние — самое частое.

Два разных нуля

Возьмём простую строку на дашборде: «В спам-блоке: 0 аккаунтов».

  • Ноль первый. Все аккаунты проверены сегодня, ни у одного ограничения нет. Отличная новость, можно работать.
  • Ноль второй. Проверку никто не запускал. Ограничения, возможно, есть у половины флота — просто никто не спрашивал.

На экране это одна и та же строка. Владелец читает её одинаково, а работать эти два состояния заставляют по-разному: в первом случае надо запускать кампанию, во втором — сначала проверку.

Дальше хуже. Человек, увидевший зелёное, перестаёт задавать вопросы. Панель, которая рисует спокойствие вместо неизвестности, не просто ошибается — она активно мешает заметить проблему.

Правило: у признака три состояния, а не два

У нас это записано в коде отдельным файлом и звучит так: знаем · знали давно · не знаем. И следом — фраза, ради которой всё затевалось:

Отсутствие данных — это отдельный ответ, а не «всё хорошо». комментарий в модуле состояния аккаунта

Наружу поэтому уходит не голое значение, а тройка: что намерили, когда проверяли и насколько это ещё свежо. Экран сам решает, рисовать зелёное, серое или знак вопроса, — но соврать «всё в порядке» вместо «никто не смотрел» он уже не может: у него для этого просто нет данных.

Свежесть у разных признаков разная

Второе следствие того же правила, менее очевидное. Проверка не бывает вечной, но и устаревает она не одинаково: связь рвётся за час, а ограничение аккаунта держится неделями. Один общий срок годности здесь врал бы в обе стороны.

ПризнакЧерез сколько проверка перестаёт считаться свежей
Состояние связи6 часов
Состояние сессии1 сутки
Прокси1 сутки
Ограничение аккаунта7 суток
Спам-блок7 суток

Практический смысл: вчерашняя проверка сессии — это ещё информация, а вчерашняя проверка связи — уже нет. «Знали давно» — честный ответ, который стоит между «знаем» и «не знаем», и он тоже должен быть виден.

Ноль вместо неизвестного — молчаливое занижение

То же правило всплывает там, где считается балл живучести аккаунта. Соблазн простой: признак не измерен — подставим ноль, формула не сломается.

Сломается не формула, а смысл. Аккаунт, о котором мы ничего не знаем, получит балл как у аккаунта с плохими показателями, и владелец начнёт лечить здоровое. Поэтому у нас ноль вместо недоступного значения запрещён, а недоступный признак исключается из расчёта целиком — и из числителя, и из знаменателя. Он не двигает балл, он уменьшает уверенность в нём.

Отсюда третье состояние, которого обычно нет вовсе: противоречие. Данные есть, но не сходятся между собой. Вот это как раз штраф — потому что противоречие мы измерили, а не пропустили.

Разница между «плохо», «не знаем» и «данные спорят» — это три разных действия для владельца. Панель, которая сводит их к одному индикатору, экономит место за счёт вашего времени.

Родственные правила, которые следуют из того же

  • Рядом с цифрой должен стоять порог. Число без порога владельцу ничего не говорит: «17 ошибок» — это много или обычный вторник?
  • Пустой экран подписывается словами. Пустота может означать «ничего не произошло», «не настроено» или «сломалось» — и это опять три разных ответа.
  • Наши собственные объяснения доходят до человека целиком. Внутренности — имена таблиц, номера миграций, состояние служб — клиенту не показываются, но текст проверки, написанный для человека, проходит насквозь. Глушить его — значит оставить владельца без ответа на вопрос, что он сделал не так.

Что спросить у своей панели

Пять вопросов, которые работают с любым инструментом, включая наш. Ответы стоит получить до того, как вы начнёте принимать по этой панели решения.

  1. Сколько объектов стоит за этой цифрой? «0 в спам-блоке» из скольких проверенных?
  2. Когда это проверялось в последний раз? Если экран не отвечает — считайте, что не проверялось.
  3. Как выглядит «не удалось проверить»? Если так же, как «всё хорошо», — панели верить нельзя.
  4. Что показывается, когда данных нет вовсе? Прочерк, ноль и «нет данных» — три разных сообщения; подменять их друг другом нельзя.
  5. Обновляется ли это само? Если проверка запускается только руками, то «не проверялось» — не исключение, а обычное состояние большей части флота.

Честные границы

  • Правило принято, но выполнено не везде. Часть экранов ещё живёт по старой двоичной логике — мы приводим их к трём состояниям по мере того, как доходим.
  • Мы сами наступили на это первыми. В одном из разборов насчитали шесть разных подписей, означавших ровно одно и то же — «не проверялось». Отсюда и правило.
  • Проверка ограничений идёт по требованию, а не по расписанию. Фонового обхода флота нет, поэтому у части аккаунтов состояние честно неизвестно — и именно так и должно быть написано.
  • Три состояния не делают данные точнее. Они лишь не дают выдать незнание за благополучие — а это разные вещи.

Зачем это покупателю

Затем, что панель — это то, по чему вы принимаете решения каждый день. Инструмент, который рисует зелёное там, где просто не смотрел, экономит вам две секунды на чтении экрана и стоит потом флота.

И проверить это можно до покупки, на демонстрации: попросите показать аккаунт, который ни разу не проверяли. Если он выглядит как здоровый — вы уже знаете, что увидите в день, когда что-то пойдёт не так.

Читайте дальше

практика

Один прокси — один аккаунт

принципы

Чего мы не делаем принципиально

Откуда факты. Правило трёх состояний, сроки устаревания по каждому признаку, передача наружу тройки «значение + когда проверяли + свежесть», запрет подставлять ноль вместо неизмеренного и отдельная обработка противоречия — всё это работающий код. Что правило выполнено не на всех экранах, сказано выше отдельным пунктом.

Экран, который не рисует зелёное вслепую

Оценка живучести считается правилами и показывает, сколько признаков из скольких измерено.