diff --git a/editorial/agent-rewrites/182.json b/editorial/agent-rewrites/182.json index 7db339a..4658c09 100644 --- a/editorial/agent-rewrites/182.json +++ b/editorial/agent-rewrites/182.json @@ -1,7 +1,7 @@ { "index": 182, "slug": "editorial-2022-12-mechanism-user-research", - "title": "Как не принять догадку о пользователе за основание для интерфейса", - "excerpt": "Практический контракт для user research: отделяем наблюдение от его смысла, проверяем гипотезу и откладываем UI-решение, пока цепочка evidence не выдержит проверку.", - "contentHtml": "

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

\n

Решение нельзя использовать как доказательство проблемы. Сначала разделите четыре уровня: наблюдение, источник, интерпретацию и гипотезу. Только после этого выбирайте следующий опыт или небольшое обратимое изменение. Граница показывает, что команда знает, а чего пока не знает.

\n

Механизм: четыре уровня одной записи

\n

Наблюдение описывает то, что можно увидеть в конкретном контексте: человек оставил обязательное поле пустым, прервал действие после сообщения об ошибке, спросил о назначении элемента. Наблюдение не содержит мотива. Фраза «человек не понял поле» уже объясняет поведение и потому не является чистым наблюдением.

\n

Источник позволяет другому человеку сверить наблюдение. Это может быть запись исследовательской сессии, заметка поддержки, согласованный лог или другой доступный артефакт. Само наличие источника не доказывает частотность, репрезентативность или причину. Оно отвечает только на вопрос: откуда взялась строка и в каких границах её можно читать.

\n

Интерпретация связывает наблюдение с возможным объяснением. Она должна сохранять неопределённость: «пустое поле может быть связано с термином, порядком полей или отсутствием нужных данных». Хорошая интерпретация допускает альтернативы. Если она сразу называет мотив установленным, команда теряет часть проверки.

\n

Гипотеза превращает интерпретацию в условие, которое можно подтвердить или опровергнуть. Например: «если люди не понимают назначение поля, то на прототипе без подсказки они будут задавать вопрос или выбирать неверный вариант». Гипотеза не равна задаче «добавить tooltip». Она задаёт, что нужно узнать и какое наблюдение изменит решение.

\n
Границы между evidence и решением
УровеньЧто записываемЧего запись не доказываетПереход
НаблюдениеКонкретное действие в контекстеПричину и частотностьДобавить источник
ИсточникГде это зафиксированоЧто так ведут себя всеПроверить границы
ИнтерпретацияОсторожное объяснениеУстановленный мотивСформулировать вопрос
ГипотезаУсловие и ожидаемый сигналГотовый UI и production-эффектВыбрать опыт
РешениеОбратимое изменениеПодтверждённую пользуПроверить outcome
\n

Пример: решение не перепрыгивает через гипотезу

\n

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

\n
function planExperiment(record, nextExperiment) { if (!record.interpretation || !record.hypothesis) return { kind: 'decision-rejected' }; return { kind: 'experiment-planned', decision: 'defer-solution', nextExperiment }; }
\n

Если source пуст, запись наблюдения должна завершиться отказом, а не созданием карточки с неизвестным происхождением. Если вызвать planExperiment раньше гипотезы, результатом должен быть decision-rejected. После добавления интерпретации и гипотезы модель может вернуть defer-solution с описанием следующего опыта. Это всё ещё план. Он не означает, что опыт проведён.

\n

В записи должны различаться статусы «хотим узнать», «проверили», «получили сигнал» и «приняли решение». Смешивание статусов создаёт ложную уверенность. Локальная проверка контракта полезна только для порядка переходов. Она не оценивает качество исследования.

\n
Контракт учебной evidence-модели: observation требует source, interpretation требует записи, hypothesis требует interpretation, experiment требует hypothesis, rollback возвращает предыдущее состояние
Схема показывает учебные переходы записи. Она не изображает реальных участников, исследовательскую сессию или product analytics.
\n

Симптом → причина → проверка → действие

\n
Диагностическая карта перед изменением интерфейса
СимптомПричина смешенияПроверкаДействие
«Пользователи не понимают»Наблюдение смешали с мотивомНайти действие и источникПереписать как наблюдение
«Добавим подсказку»Решение появилось раньше вопросаНазвать ожидаемое изменение поведенияОтложить UI и написать гипотезу
«Так просили»Мнение приняли за evidenceУточнить контекст высказыванияНазвать источник и ограничение
«Проверим макет»Метод выбран раньше целиСформулировать вопросВыбрать метод под вопрос
«Тест прошёл»План приняли за результатПроверить участников и сигналРазделить план и outcome
«Данных мало»Неопределённость скрылиПроверить обратимость и цену ошибкиУменьшить изменение или сделать rollback
\n

Порядок работы

\n
  1. Возьмите утверждение из задачи и уберите готовое решение. Оставьте проблему, которую нужно подтвердить.
  2. Запишите наблюдаемое действие без объяснения мотива. Укажите экран, сценарий, данные и момент сбоя.
  3. Прикрепите источник, который другой человек может открыть или проверить. Запишите, чего источник не показывает.
  4. Добавьте альтернативную интерпретацию. Не выбирайте одну только потому, что она ведёт к удобному компоненту.
  5. Сформулируйте гипотезу как условие с ожидаемым наблюдением. Не используйте «точно» и «всегда» без подтверждения.
  6. Выберите небольшой опыт, который отвечает на вопрос, а не просит оценить выбранный макет. Запишите, какой результат изменит решение.
  7. Проверьте отрицательный путь: нет source, нет interpretation, нет гипотезы, источник недоступен или опыт проверяет только вкус.
  8. Если связка не выдерживает проверку, верните статус defer-solution. Сохраните вопрос и источник, отмените необоснованный переход к интерфейсу.
\n

Rollback и границы

\n

Rollback не стирает неудобное evidence. Он отменяет решение, которое не связано с наблюдением проверяемой гипотезы. Снимок состояния возвращает запись к моменту до синтетического изменения: можно снять ошибочный план или убрать UI-вариант. Исходный источник остаётся доступным, если правила хранения позволяют его сохранять.

\n

Контракт не спасает от слабого источника. Одно наблюдение может оказаться случайным. Гипотеза может проверять не ту группу людей. Локальный тест не оценивает recruitment, доступность интерфейса, размер выборки, смещение исследователя или юридические требования. Эти вопросы требуют отдельного процесса и владельца.

\n

Не превращайте поля записи в бюрократию для каждого изменения. Низкорисковый текстовый патч и дорогая перестройка сервиса имеют разную цену ошибки. Но чем дороже откат, тем опаснее фраза без источника. Если выпуск обязателен по операционной или правовой причине, назовите это ограничением. Не выдавайте вынужденный выпуск за подтверждённую пользовательскую пользу.

\n

Проверяемый критерий готовности

\n

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

\n

Удалите из записи решение и проверьте, остаётся ли понятна исходная проблема. Затем уберите гипотезу и спросите, может ли команда назвать следующий опыт без выбора компонента. Если смысл исчезает после удаления одного поля, уровни склеены. Вернитесь к наблюдению, зафиксируйте неизвестное и не увеличивайте точность искусственно.

\n

Проверяемые источники

\n" + "title": "Как проверить пользовательскую проблему до изменения интерфейса", + "excerpt": "Разбираем цепочку от наблюдения до решения: как отделить факт от объяснения, выбрать проверку под вопрос и не принять готовый UI за доказательство проблемы.", + "contentHtml": "

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

\n

Начните не с компонента, а с проверяемого вопроса. Разделите наблюдение, источник, интерпретацию, гипотезу и решение. Такой порядок не доказывает, что интерфейс станет лучше, но не даёт выдать догадку за пользовательский факт. Следующий шаг должен уменьшать конкретную неизвестность и оставаться обратимым, пока доказательств мало.

\n

Механизм: пять уровней одной записи

\n

Наблюдение описывает действие в контексте: человек оставил обязательное поле пустым, прервал действие после сообщения об ошибке или спросил о назначении элемента. Наблюдение не содержит мотива. Фраза «человек не понял поле» уже объясняет поведение и потому не является чистым наблюдением.

\n

Источник позволяет другому члену команды сверить запись: это может быть заметка исследовательской сессии, обращение в поддержку, согласованный лог или другой доступный артефакт. Наличие источника не доказывает частотность, репрезентативность или причину. Оно отвечает только на вопросы «откуда взялась запись?» и «в каком контексте её можно читать?».

\n

Интерпретация связывает наблюдение с возможным объяснением. Она должна сохранять неопределённость: «пустое поле может быть связано с термином, порядком полей или отсутствием нужных данных». Альтернативы важны: если сразу назвать мотив установленным, команда потеряет часть проверки.

\n

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

\n

Решение выбирает следующий опыт или изменение только после первых четырёх уровней. Оно должно содержать критерий отката: какой сигнал подтвердит гипотезу, какой её ослабит и что команда сделает в обоих случаях. Метод исследования выбирают под вопрос, а не под уже выбранный макет. Именно такой порядок рекомендует Service Manual GOV.UK: сначала согласовать вопросы и предположения, затем определить подход и исследовательские активности.

\n
Границы между доказательством и решением
УровеньЧто записываемЧего запись не доказываетСледующий переход
НаблюдениеКонкретное действие и контекстПричину и частотностьДобавить источник
ИсточникГде и кем зафиксированоЧто так ведут себя всеПроверить границы записи
ИнтерпретацияВозможное объяснениеУстановленный мотивСформулировать вопрос
ГипотезаУсловие и ожидаемый сигналГотовый UI и эффект выпускаВыбрать опыт
РешениеОбратимый следующий шагПодтверждённую пользуПроверить исход
\n

Пример: контракт не пропускает раннее решение

\n

Ниже — учебная модель записи на JavaScript. Она не проводит интервью, не подключается к аналитике и не создаёт данные о реальных людях. Её задача — сделать порядок переходов видимым: без наблюдения и источника запись отклоняется, без интерпретации и гипотезы план не появляется.

\n
function planNextStep(record) {\n  if (!record.observation || !record.source) {\n    return { kind: 'rejected', reason: 'observation-needs-source' };\n  }\n\n  if (!record.interpretation || !record.hypothesis || !record.nextCheck) {\n    return { kind: 'rejected', reason: 'hypothesis-is-incomplete' };\n  }\n\n  return {\n    kind: 'planned',\n    decision: 'defer-solution',\n    nextCheck: record.nextCheck,\n  };\n}\n\nconst card = {\n  observation: 'Обязательное поле осталось пустым',\n  source: 'session-note-17',\n  interpretation: 'Причина пока не установлена',\n  hypothesis: 'Новая подпись изменит понимание назначения поля',\n  nextCheck: 'Сравнить объяснение поля в двух вариантах прототипа',\n};\n\nconsole.log(planNextStep(card).decision); // defer-solution\nconsole.log(planNextStep({ ...card, source: '' }).reason); // observation-needs-source\nconsole.log(planNextStep({ ...card, hypothesis: '' }).reason); // hypothesis-is-incomplete
\n

Фикстура возвращает defer-solution, потому что команда пока планирует проверку, а не объявляет подсказку правильным ответом. Последние две строки показывают отрицательные пути. Пустой source не превращается в карточку с неизвестным происхождением. Пустая hypothesis не позволяет перепрыгнуть от наблюдения к UI.

\n

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

\n
Учебная схема: observation требует source, interpretation уточняет возможные причины, hypothesis задаёт ожидаемый сигнал, experiment следует после hypothesis, rollback возвращает решение к исходному вопросу
Схема показывает порядок учебной записи. Она не изображает реальных участников, исследовательскую сессию или данные продукта.
\n

Симптом → причина → проверка → действие

\n
Диагностическая карта перед изменением интерфейса
СимптомПричина смешенияПроверкаДействие
«Пользователи не понимают»Наблюдение смешали с мотивомНайти действие и источникПереписать как наблюдение
«Добавим подсказку»Решение появилось раньше вопросаНазвать ожидаемое изменение поведенияОтложить UI и написать гипотезу
«Так просили»Мнение приняли за доказательствоУточнить контекст высказыванияНазвать источник и ограничение
«Проверим макет»Метод выбран раньше целиСформулировать вопросВыбрать метод под вопрос
«Тест прошёл»План приняли за результатПроверить участников и сигналРазделить план и исход
«Данных мало»Неопределённость скрылиПроверить цену ошибкиУменьшить изменение или подготовить откат
\n

Эта карта отделяет проблему метода от проблемы интерфейса. Если команда говорит «пользователь путается», сначала найдите буквальное действие. Если есть только просьба «сделать проще», зафиксируйте, кто её высказал и в каком сценарии. Если вопрос требует понять причину, одного клика по прототипу может быть недостаточно; выберите исследовательскую активность, которая действительно даст нужный сигнал.

\n

Порядок работы

\n
  1. Возьмите утверждение из задачи и уберите готовое решение. Оставьте проблему, которую нужно подтвердить.
  2. Запишите наблюдаемое действие без объяснения мотива: что произошло, на каком экране, в каком сценарии и в какой момент.
  3. Прикрепите источник, который другой член команды может открыть и проверить. Укажите, чего источник не показывает.
  4. Запишите минимум две возможные интерпретации. Не выбирайте первую только потому, что она ведёт к удобному компоненту.
  5. Сформулируйте гипотезу как условие с ожидаемым наблюдением и способом её ослабить.
  6. Выберите небольшой опыт под вопрос. В GOV.UK Service Manual отдельная исследовательская итерация должна иметь ясные цели, проблематику, предположения и решение, которое нужно принять после результата.
  7. Проверьте отрицательный путь: нет источника, источник недоступен, нет гипотезы, выбранный метод проверяет только вкус или решение необратимо.
  8. До результата оставьте изменение обратимым. После проверки сохраните наблюдение, сигнал, границы вывода и решение, которое действительно следует из записи.
\n

Откат и границы метода

\n

Откат отменяет решение, а не удаляет неудобное доказательство. Если команда уже выбрала подсказку, но не может связать её с проверяемой проблемой, снимите UI-вариант и вернитесь к карточке. Не переписывайте наблюдение так, чтобы оно оправдывало компонент: иначе процесс создаёт красивую историю вместо знания.

\n

Контракт не спасает от слабого источника. Одно наблюдение может оказаться случайным. Гипотеза может проверять не ту группу людей. Локальная проверка не оценивает доступность интерфейса, размер выборки, смещение исследователя, согласие участников или правила хранения персональных данных. Эти вопросы требуют отдельного метода, владельца и проверки.

\n

Не превращайте поля записи в бюрократию для каждого текстового изменения. Небольшой обратимый патч и перестройка сервиса имеют разную цену ошибки. Но чем дороже откат, тем опаснее фраза без источника. Если выпуск обязателен по операционной или правовой причине, назовите это ограничением. Вынужденное изменение не становится результатом исследования.

\n

Проверяемый критерий готовности

\n

Запись готова к обсуждению изменения, если проверяющий без автора может ответить: что наблюдали; где это зафиксировано; какие объяснения рассматриваются; какой сигнал ослабит гипотезу; какой следующий опыт даст этот сигнал; что команда сделает при каждом исходе. Должно быть понятно и то, какой результат ещё не получен.

\n

Сделайте контрольный проход по ближайшей задаче с готовым UI-ответом. Уберите решение из первой строки. Найдите наблюдение и источник. Если их нет, зафиксируйте, что проблема пока не подтверждена. Если они есть, добавьте альтернативу и обратимый следующий шаг. Готовность измеряется не уверенностью формулировки, а тем, можно ли повторить переход от наблюдения к действию.

\n

Проверяемые источники

\n" }