{ "index": 86, "slug": "editorial-2025-08-mechanism-tool-ux-research", "title": "UX внутреннего инструмента: от наблюдения к проверяемому решению", "excerpt": "Внутренний интерфейс ломается не только из-за плохой кнопки. Разбираем цепочку consent → observation → code → theme → decision, отрицательные ветки и критерий готовности.", "contentHtml": "
После короткого интервью в задаче часто остаётся фраза «коллеге неудобно», а рядом уже стоит готовый редизайн. Симптом виден: решение не содержит исходного действия, условий сценария и того, чего наблюдение не установило. Через неделю никто не может восстановить связь между заметкой и изменением. Цена ошибки — лишнее время и новый обход того же участка.
\nВнутренний инструмент нужно исследовать через границу доказательства. Сначала фиксируют, что разрешено наблюдать и хранить. Затем записывают видимое действие. Потом группируют записи, формулируют вопрос и только после этого выбирают следующий эксперимент. Цепочка выглядит так: consent → observation → code → theme → decision. Каждый следующий уровень допускает более сильное решение, но не стирает ограничения предыдущего.
Фраза «не нашёл владельца» — это не причина и не предложение для интерфейса. Это наблюдение, если оно привязано к задаче: человек прочитал статус, дошёл до поля owner и задал вопрос о следующем ответственном. Запись не доказывает, что термин плох, что все пользователи теряются или что нужна кнопка «Написать владельцу».
У наблюдения должны быть идентификатор сценария, видимое действие, короткий code и uncertainty. Code собирает похожие факты. Он не ставит диагноз. Например, owner-unclear означает только, что в данном маршруте не удалось найти владельца следующего шага. Uncertainty говорит, чего запись не установила: частоту, причину и переносимость на другие роли.
Consent boundary. До разговора определяют цель, тип evidence, наблюдение, запись и путь отзыва. Для внутреннего сотрудника действует та же необходимость добровольного согласия, что и для внешнего участника. Если разрешены обезличенные заметки, запись экрана не появляется «для удобства анализа». Отозванное согласие останавливает hand-off и требует следовать правилам хранения организации.
\nObservation. Запись описывает видимое действие или вопрос в заданном сценарии. «Курсор остановился у owner» сильнее, чем «человек растерялся»: первое можно проверить по маршруту, второе уже содержит интерпретацию.
\nCode и theme. Code даёт стабильное имя детали. Theme объединяет несколько codes в проверяемый вопрос. Два наблюдения про owner и статус могут образовать theme next-step-visibility: видит ли исполнитель, что делать после текущего состояния. Theme не отвечает, какая кнопка нужна.
Decision. Решение выбирает candidate change и следующий follow-up. Оно ссылается на observation ids, содержит claim и отмечает статус not-established, если эффект ещё не проверен. Decision без ссылок — список предпочтений. Decision с отсутствующей ссылкой получает STOP.
Ниже — только фиксированный synthetic пример. В нём нет реальных людей, заявок, записей, API, telemetry и production-данных. Есть карточка access request, статус processing и поле owner. Нейтральная задача просит показать, как найти состояние заявки и назвать следующий вопрос. Ведущий не подсказывает будущую кнопку.
const observation = { id: 'synthetic-observation-owner-v1', scenarioId: 'synthetic-scenario-access-request-v1', evidenceKind: 'de-identified-note', statement: 'Статус прочитан; курсор остановился у owner; следующий вопрос: кто отвечает после отправки?', codeIds: ['code-owner-unclear-v1'], uncertainty: 'Не установлены частота и причина остановки.' }; const decision = { observationIds: ['synthetic-observation-owner-v1', 'synthetic-observation-status-v1'], theme: 'next-step-visibility', candidateChange: 'Добавить компактный блок следующего шага.', claim: 'not-established', followUp: 'Повторить тот же neutral scenario.', status: 'synthetic-follow-up-only' };\nВ нормальной ветке инспектор проверяет, что оба observation id существуют, code есть в codebook, scenario нейтрален, а consent разрешает именно этот тип заметки. Результат — не «интерфейс улучшен», а разрешение на изолированный follow-up. В учебном примере нужно повторить ту же задачу с заранее описанным изменением и заново записать наблюдаемое действие.
\nВ отрицательной ветке decision ссылается на missing-observation-v1. Инспектор возвращает decision-not-traceable-to-evidence и не чинит ссылку автоматически. Владелец восстанавливает исходную запись или создаёт новый сценарий. Если consent имеет статус withdrawn, проверка останавливается раньше темы. Если prompt звучит как «вам ведь не хватает большой кнопки?», результат — neutral-task-scenario-required. Удачный ответ на наведённый вопрос не становится evidence.
| Симптом | Причина | Проверка | Действие |
|---|---|---|---|
| В задаче сразу нарисована кнопка | Theme подменили candidate change | Есть ли два observation с видимым действием? | Вернуться к нейтральному сценарию и записать uncertainty |
| В заметке написано «пользователь запутался» | Интерпретация смешалась с фактом | Можно ли описать действие без оценки? | Переписать statement и сохранить контекст |
| Решение выглядит убедительно, но ссылок нет | Decision вырос из памяти встречи | Каждый cited id находится в том же наборе? | Остановить hand-off до восстановления evidence |
| Для анализа включили запись экрана | Тип evidence расширили после согласия | Разрешены ли запись и наблюдатели в boundary? | Не использовать запись; сверить policy и consent |
| После изменения объявили «UX улучшился» | Follow-up выдали за результат | Есть ли сравнимый сценарий и измеримый критерий? | Поставить claim not-established и назначить отдельную проверку |
Две заметки не дают частоту, репрезентативность или объяснение задержки. Codebook не заменяет исследователя. Neutral prompt не устраняет социальное давление во внутренней команде. Обезличивание не отменяет требований к доступу, сроку хранения и отзыву. Для чувствительных данных нужны policy организации, владелец данных и юридическая проверка.
\nМеханизм не выбирает лучший интерфейс. Он не даёт слабому evidence незаметно превратиться в backlog ticket. Candidate change может оказаться неверным. При сломанной ссылке, неподтверждённом consent, наведённом prompt или несопоставимом follow-up результатом должен быть STOP, а не новая гипотеза.
\nUX-разбор готов, если независимый reviewer может пройти от decision до каждой observation и обратно к одному neutral scenario. У каждой observation есть видимое действие, scenario id, code и uncertainty. У decision существуют все cited ids, есть claim not-established до проверки эффекта и указан следующий сопоставимый сценарий. Boundary разрешает использованный evidence. Для withdrawn consent или любой сломанной ссылки проверка возвращает STOP. Это проверяемый контракт, а не обещание, что интерфейс уже стал удобнее.