{ "index": 86, "slug": "editorial-2025-08-mechanism-tool-ux-research", "title": "UX внутреннего инструмента: как превратить наблюдение в проверяемое решение", "excerpt": "Разбираем, как отделить действие коллеги от интерпретации, связать наблюдение с решением и остановить работу, если согласие, сценарий или ссылка на evidence не выдерживают проверки.", "contentHtml": "
Команда получает просьбу «сделать внутреннюю форму удобнее» и сразу обсуждает новую кнопку. Симптом кажется ясным, но в задаче нет исходного действия: неизвестно, где человек остановился, что уже видел и какой следующий шаг пытался выполнить. Через неделю решение нельзя связать с исходным материалом, а коллега снова обходит тот же экран.
\nУ внутреннего инструмента те же инженерные свойства, что у внешнего сервиса: роли, сценарии, состояния, ошибки и стоимость задержки. Поэтому UX-разбор должен передавать в разработку не удачную цитату, а цепочку, которую другой человек сможет открыть и перепроверить: граница данных → нейтральная задача → observation → code → theme → decision → следующий сценарий. Сильнее всего здесь не формулировка решения, а возможность остановиться до него.
\nРабочий вопрос описывает неизвестное, а не желаемый компонент. «Почему исполнитель не называет следующий шаг после чтения статуса?» можно проверить. «Нужна кнопка “Связаться с владельцем”» уже сужает исследование и подталкивает участника подтвердить идею. Если причина в термине, правах доступа или регламенте, такая кнопка только замаскирует сбой.
\nНачните с одного маршрута. Например, исполнитель открывает карточку заявки на доступ, проверяет статус processing и должен понять, кому задать следующий вопрос. Исходное состояние и критерий окончания фиксируются заранее. Успехом может быть названный следующий шаг, но это ещё не означает, что интерфейс понятен всем, работает быстро или нравится участнику.
Цель раунда должна отвечать на три вопроса: какое поведение нужно понять, какую гипотезу проверить и какое решение потребуется принять после наблюдения. Такой порядок согласуется с официальным руководством GOV.UK: сначала определяются проблемы, предположения и информация, необходимая для следующего решения, а уже потом выбирается метод исследования.
\nObservation — наблюдаемое действие, пауза или вопрос в конкретном сценарии. «Статус прочитан, курсор остановился у поля owner, затем задан вопрос о следующем ответственном» можно проверить по записи или заметке. «Человеку непонятен интерфейс» уже является интерпретацией.
\nCode — короткая метка для повторяющейся детали. owner-unclear говорит, что в данном маршруте не найден следующий владелец. Она не показывает частоту, не устанавливает причину и не переносит результат на другие роли. Рядом хранится uncertainty: что именно наблюдение не установило.
Theme — вопрос, объединяющий несколько кодов. Наблюдения про поле owner и термин processing могут образовать тему next-step-visibility: видит ли исполнитель действие после текущего состояния. Тема помогает выбрать следующий эксперимент, но не выбирает кнопку за команду.
Decision — запись о следующем решении. В ней есть ссылки на observation id, кандидатное изменение, текущий статус утверждения и сопоставимый follow-up. Пока эффект не измерен, корректный claim — «гипотеза» или not-established. Если ссылка ведёт на несуществующую заметку, decision нельзя считать прослеживаемым.
Информированное согласие — не формальность, которую можно добавить после встречи. В нём участнику объясняют цель исследования, собираемые данные, наблюдателей, способ записи, использование результатов, срок хранения и возможность остановиться. GOV.UK отдельно указывает, что согласие нужно получать и у людей, которые работают в той же организации.
\nВыберите допустимый тип материала до сессии. Если согласованы только обезличенные заметки, запись экрана не становится разрешённой «для удобства анализа». Имя, команда, номер заявки и содержимое экрана могут раскрывать человека даже без явного поля с ФИО. Обезличивание снижает риск, но не отменяет правила доступа, хранения и удаления.
\nПри отзыве согласия нужно остановить сессию и действовать по утверждённой политике хранения. Руководство GOV.UK описывает удаление собранных исследовательских материалов в таком случае, однако конкретные сроки, владельца данных и юридические основания определяет организация. Поэтому в decision log достаточно зафиксировать STOP и владельца процесса; нельзя придумывать локальную процедуру по статье из другой юрисдикции.
\nНиже учебный пример без реальных людей, заявок и результатов исследования. Сохраните его как decision-check.mjs и выполните командой node decision-check.mjs. Проверка не анализирует качество интерфейса: она только ловит сломанные ссылки и запрещает переход к decision без подтверждённого согласия.
const record = {\n consent: {\n status: 'confirmed',\n allowedEvidence: ['de-identified-note']\n },\n scenario: {\n id: 'access-request-v1',\n task: 'Найти статус заявки и следующий вопрос',\n success: 'Назвать следующий шаг и адресата'\n },\n observations: [\n {\n id: 'observation-owner-v1',\n action: 'Прочитан status; курсор остановился у owner',\n question: 'Кто отвечает после отправки?',\n code: 'owner-unclear',\n uncertainty: 'Не установлены причина и частота'\n },\n {\n id: 'observation-status-v1',\n action: 'Термин processing прочитан без перехода к действию',\n code: 'status-hidden',\n uncertainty: 'Не установлено, знаком ли термин другим ролям'\n }\n ],\n decision: {\n observationIds: ['observation-owner-v1', 'observation-status-v1'],\n theme: 'next-step-visibility',\n candidateChange: 'Проверить блок со статусом и следующим шагом',\n claim: 'not-established',\n nextScenario: 'Повторить ту же задачу без подсказки'\n }\n};\n\nfunction validateDecision(input) {\n const ids = new Set(input.observations.map(({ id }) => id));\n const missing = input.decision.observationIds.filter((id) => !ids.has(id));\n const stop = [];\n if (input.consent.status !== 'confirmed') stop.push('consent-not-confirmed');\n if (missing.length) stop.push('decision-not-traceable-to-evidence');\n return { ok: stop.length === 0, missing, stop };\n}\n\nconsole.log(validateDecision(record));\nconsole.log(validateDecision({\n ...record,\n decision: { ...record.decision, observationIds: ['missing-observation-v1'] }\n}));\n// { ok: true, missing: [], stop: [] }\n// { ok: false, missing: ['missing-observation-v1'],\n// stop: ['decision-not-traceable-to-evidence'] }\nКод проверяет контракт, а не правдивость самой заметки. Проверяющий всё равно открывает исходный материал, сверяет роль и состояние экрана, проверяет разрешённый тип evidence и читает uncertainty. Вторая строка вывода — обязательная отрицательная ветка: неизвестный id не исправляется угадыванием по похожему тексту.
\nОдна остановка у поля owner допускает несколько объяснений. Владелец может быть скрыт, термин может быть новым, у роли может не быть права на просмотр или следующий шаг может находиться в другом регламенте. Codebook делает записи сопоставимыми, но не выбирает между этими гипотезами.
\nПолезно хранить рядом четыре значения: action — что произошло, context — в каком состоянии, code — какую деталь отмечаем, uncertainty — чего пока не знаем. Если в поле action появляется «растерялся», замените его на наблюдаемую паузу, повторное чтение, вопрос или обходной путь. Интерпретацию перенесите в theme и пометьте как гипотезу.
| Симптом | Вероятная причина | Проверка | Действие |
|---|---|---|---|
| В задаче сразу нарисована кнопка | Гипотезу выдали за результат | Есть ли исходный вопрос и нейтральный prompt? | Вернуться к задаче без названия будущего control |
| В заметке написано «пользователь запутался» | Факт смешан с интерпретацией | Можно ли описать действие без оценки? | Переписать action и добавить uncertainty |
| Decision ссылается на неизвестный id | Источник потерялся при пересказе встречи | Открывается ли каждая ссылка из decision log? | Остановить hand-off и восстановить evidence |
| Для анализа нужна запись экрана | Тип evidence расширили после согласия | Разрешены ли запись, наблюдатели и хранение? | Не использовать запись до новой проверки границы |
| После правки сказали «стало лучше» | Follow-up не сопоставим с исходным | Совпадают ли задача, состояние и критерий успеха? | Повторить маршрут или оставить claim not-established |
| Две заметки стали «проблемой всех» | Потеряна роль и граница выборки | Какие роли и условия реально наблюдались? | Сузить вывод и собрать следующий материал |
Предположим, ведущий начинает с вопроса: «Вам ведь не хватает большой кнопки “Написать владельцу”?» Согласие участника не подтверждает исходную гипотезу: на ответ повлияли формулировка и желание помочь коллеге. Такой эпизод можно сохранить как сигнал для дизайна следующего исследования, но нельзя использовать как evidence именно этой кнопки.
\nТо же правило действует для сломанного сценария. Если тестовая заявка уже содержит подсказку, критерий успеха меняется по ходу встречи или участник не понимает, что записывается, результат нельзя сравнивать с планом. Не надо чинить пробел предположением. Создайте новый нейтральный проход после проверки границы данных.
\nSTOP нужен и при расхождении ролей. Если наблюдали оператора, а решение предназначено администратору, запись остаётся фактом про оператора. Она может стать гипотезой для другой роли, но не доказывает тот же барьер. Так ограничение не исчезает во время передачи задачи от исследователя к дизайнеру и инженеру.
\nДве заметки показывают два эпизода, а не распространённость проблемы. Несколько одинаковых вопросов усиливают гипотезу, но сами по себе не устанавливают причину и не доказывают причинный эффект новой кнопки. Роли, опыт, права, частота работы и контекст заявки влияют на маршрут.
\nРазделяйте три уровня утверждений. «Курсор остановился у owner» — факт наблюдения. «Следующий шаг недостаточно заметен» — гипотеза. «Новый блок сократил время выполнения» — измеряемое утверждение, для которого нужны метрика, условия сравнения и достаточный объём наблюдений. Если этих условий нет, оставьте claim: not-established.
Проверка доступности идёт рядом с UX-исследованием, а не заменяется им. WCAG 2.2 даёт тестируемые критерии и уровни соответствия для веб-контента, но сам по себе не отвечает, понимает ли конкретная роль бизнес-сценарий. После выбора кандидатного изменения проверьте клавиатурный маршрут, порядок фокуса, подписи, сообщения об ошибках и работу вспомогательных технологий; затем повторите задачу с подходящими участниками.
\nМатериал готов к следующему инженерному шагу, когда независимый коллега без устного пересказа может восстановить цель, границу данных, роль, исходное состояние, нейтральную задачу, каждое observation, code, uncertainty и все ссылки из decision log. Он понимает, что именно предлагается проверить и чего текущие данные не доказывают.
\nМатериал не готов, если осталась только цитата, макет, диагноз «неудобно» или обещание улучшения. В таком случае решение возвращается к вопросу, а не превращается в безусловную разработку. Это и есть практический смысл цепочки: она экономит не клики в интерфейсе, а повторный спор о происхождении задачи.
\nМетод не заменяет юридическую проверку, локальную политику обработки данных, исследование разных ролей, анализ событий, проверку прав доступа и тестирование производительности. GOV.UK — официальный практический ориентир, но его рекомендации не являются универсальной политикой вашей организации. Учебный код проверяет только целостность ссылок и статус согласия; он не подтверждает качество заметки и не создаёт согласие задним числом.
\n