nodumb
Код — дешёвая часть ошибки. Дороже всего уверенно делать не то, не там или на
основании факта, которого никто не проверял.
Перед продолжением ответить на три вопроса:
- Ту ли задачу решаем? Запрос часто приходит уже в форме решения.
- В том ли масштабе решаем? Локальная правка может скрывать общее решение,
а общий слой может оказаться лишним.
- Есть ли новый применимый факт? Следующая попытка на тех же данных обычно
повторяет предыдущую.
Не проходить весь скилл каждый раз. Выбрать нужный режим по текущей ситуации.
Перед запуском режима назвать, какой его результат способен изменить следующий
шаг; если такого результата нет, пропустить режим.
Как выбрать источник факта
Искать факт там, где находится источник истины о проверяемом поведении. Если его
определяет текущий проект — сначала наблюдать код, состояние, логи, тесты и
историю. Если источник истины находится вне текущего репозитория — проверить
первичный источник для точной версии зависимости, платформы или сервиса:
официальную документацию, changelog либо issue-трекер владельца.
Внешний поиск формулировать через контракт, версию и точный симптом, а не
через общий запрос «как исправить». Найденное утверждение остаётся гипотезой,
пока локальный пробник или воспроизведение не подтвердят его применимость к
этому проекту. Перед второй правкой без нового факта обязательно сменить
источник данных; подробный выбор — references/stuck-new-data.md.
1. Перед кодом
Применять, если неверное направление стоит часов, результат трудно отменить или
непонятно, зачем предложено конкретное решение.
- Сформулировать задачу от пользователя, а не от интерфейса или кода.
- Если постановка останется в тикете, плане или другом долговечном артефакте,
разделить проверенное и предположенное. Для утверждений, определяющих
направление решения, указать источник проверки.
- Новый факт считать основанием решения только внутри проверенной области
применимости. Если меняются сущности, предпосылки, условия, способ измерения,
база, шкала или модель, рассматривать перенос как отдельный вывод: обосновать
его дедуктивно через сохранение предпосылок и отношений, эмпирически в целевом
контексте или обоими способами. Без проверки назвать вывод для новой модели
гипотезой.
- Гипотезу, которую можно безопасно проверить сейчас по доступному коду,
истории, документации или командой, проверить до записи. Если нельзя —
назвать её гипотезой и указать, что нужно для проверки: недоступные данные,
человеческое участие или расширение скоупа.
- Вопрос, зависящий от человеческого выбора, назвать несогласованным решением,
а не гипотезой. Если ответ создаёт развилку, записать ветки и условие выбора.
- Проверить, как человек справляется сейчас и что должно стать лучше.
- Назвать признак успеха, который можно наблюдать.
- Найти самую дорогую развилку и дать одну рекомендацию.
- Если предлагаемое решение меняет архитектуру, модель продукта или несколько
независимых сценариев, сначала измерить размер проблемы: сколько сценариев
сломано, как часто это происходит и как человек справляется сейчас.
- Сравнить самое дешёвое решение с предлагаемым. Для каждого назвать
пользовательский результат, объём изменения и риск для существующего
поведения. Если результат одинаков — выбрать дешёвое. Дорогое оправдано,
только если дешёвое оставляет конкретные подтверждённые случаи нерешёнными.
- Перед возвратом к ранее отвергнутой архитектурной идее проверить решения и
память проекта. Назвать новый факт, из-за которого прежнее решение больше не
действует; без нового факта не открывать развилку заново.
- Явно согласовать только необратимое решение, существенную неопределённость или
изменение скоупа. В остальных случаях назвать допущение и продолжить.
- Данные, права и публичное поведение считать усилителями цены ошибки, а не
автоматическими причинами вопроса. Остановиться для человеческого выбора,
только если нужно определить новую политику доступа, допустить потерю или
миграцию данных либо изменить действующий публичный контракт. Если поведение
уже однозначно задано проверенным контрактом, исполнить его и продолжить.
Вопросы для разбора — references/before-code-questions.md. Формат плана —
references/plan-format.md.
2. Перед массовой правкой
Применять, если текущая задача требует одинаково менять несколько независимых
мест.
- Сначала определить фазу продукта. В прототипе и MVP не строить систему ради
чистоты кода: важнее быстро проверить гипотезу.
- В устоявшейся части продукта посчитать места и значения до правки.
- Проверить, действительно ли повторения имеют одну причину меняться.
- Если отсутствие общего места уже мешает текущей работе — вынести минимальный
источник: контракт, токен, компонент, адаптер или скрипт.
- Если не мешает или причины разные — оставить решения локальными.
- Начать с одного небольшого участка и проверить его до массового переноса.
Не заводить дизайн-систему, библиотеку компонентов или другой слой просто «на
будущее». Нормальный результат проверки — общий слой пока не нужен.
Подробности: references/scaling-phases.md для выбора фазы,
references/scaling-triggers.md для подсчёта и
references/scaling-build-system.md для системы значений. Исходный случай —
references/scaling-postmortem.md.
3. Когда отладка встала
Перед второй правкой получить новый факт. После двух неудачных правок считать,
что прежний метод исчерпан.
- Сначала воспроизвести симптом на той ветке, где он возникает.
- Сформулировать гипотезу так, чтобы проверка могла её опровергнуть.
- Сменить источник данных: лог, дамп состояния, минимальный пример, история
изменений, документация, issue-трекер или рабочий аналог.
- Только после нового наблюдения менять код.
- Если починка была объявлена, но не подтвердилась, сначала заменить способ
проверки, а не делать ещё одну правку.
Способы получить новые данные — references/stuck-new-data.md. Вопросы к самой
постановке — references/stuck-question-premise.md. Разбор после долгого затыка
— references/stuck-postmortem.md.
Как отвечать
Начать с рекомендации. Коротко назвать, что известно, где главная
неопределённость, что делать дальше и чем проверить результат. Не превращать это
в обязательный шаблон для мелких задач.
1---2name: nodumb3description: Проверить способ решения до того, как цена ошибки выросла. Использовать: перед нетривиальной фичей или дорогой развилкой; когда запрос описывает готовое решение вместо проблемы; при постановке нетривиальной задачи или фиксации предполагаемой причины в трекере; при переносе внешнего факта, исследования или метрики в решение; перед редизайном, миграцией, унификацией или другой массовой правкой; перед второй правкой без новых фактов; после двух неудачных исправлений, повторного сообщения о том же симптоме или одной ложной победы. Не использовать как ритуал для мелких очевидных правок и продолжения уже согласованной работы.4---56# nodumb78Код — дешёвая часть ошибки. Дороже всего уверенно делать не то, не там или на9основании факта, которого никто не проверял.1011Перед продолжением ответить на три вопроса:12131. **Ту ли задачу решаем?** Запрос часто приходит уже в форме решения.142. **В том ли масштабе решаем?** Локальная правка может скрывать общее решение,15 а общий слой может оказаться лишним.163. **Есть ли новый применимый факт?** Следующая попытка на тех же данных обычно17 повторяет предыдущую.1819Не проходить весь скилл каждый раз. Выбрать нужный режим по текущей ситуации.20Перед запуском режима назвать, какой его результат способен изменить следующий21шаг; если такого результата нет, пропустить режим.2223## Как выбрать источник факта2425Искать факт там, где находится источник истины о проверяемом поведении. Если его26определяет текущий проект — сначала наблюдать код, состояние, логи, тесты и27историю. Если источник истины находится вне текущего репозитория — проверить28первичный источник для точной версии зависимости, платформы или сервиса:29официальную документацию, changelog либо issue-трекер владельца.3031Внешний поиск формулировать через **контракт, версию и точный симптом**, а не32через общий запрос «как исправить». Найденное утверждение остаётся гипотезой,33пока локальный пробник или воспроизведение не подтвердят его применимость к34этому проекту. Перед второй правкой без нового факта обязательно сменить35источник данных; подробный выбор — `references/stuck-new-data.md`.3637## 1. Перед кодом3839Применять, если неверное направление стоит часов, результат трудно отменить или40непонятно, зачем предложено конкретное решение.4142- Сформулировать задачу от пользователя, а не от интерфейса или кода.43- Если постановка останется в тикете, плане или другом долговечном артефакте,44 разделить проверенное и предположенное. Для утверждений, определяющих45 направление решения, указать источник проверки.46- Новый факт считать основанием решения только внутри проверенной области47 применимости. Если меняются сущности, предпосылки, условия, способ измерения,48 база, шкала или модель, рассматривать перенос как отдельный вывод: обосновать49 его дедуктивно через сохранение предпосылок и отношений, эмпирически в целевом50 контексте или обоими способами. Без проверки назвать вывод для новой модели51 гипотезой.52- Гипотезу, которую можно безопасно проверить сейчас по доступному коду,53 истории, документации или командой, проверить до записи. Если нельзя —54 назвать её гипотезой и указать, что нужно для проверки: недоступные данные,55 человеческое участие или расширение скоупа.56- Вопрос, зависящий от человеческого выбора, назвать несогласованным решением,57 а не гипотезой. Если ответ создаёт развилку, записать ветки и условие выбора.58- Проверить, как человек справляется сейчас и что должно стать лучше.59- Назвать признак успеха, который можно наблюдать.60- Найти самую дорогую развилку и дать одну рекомендацию.61- Если предлагаемое решение меняет архитектуру, модель продукта или несколько62 независимых сценариев, сначала измерить размер проблемы: сколько сценариев63 сломано, как часто это происходит и как человек справляется сейчас.64- Сравнить самое дешёвое решение с предлагаемым. Для каждого назвать65 пользовательский результат, объём изменения и риск для существующего66 поведения. Если результат одинаков — выбрать дешёвое. Дорогое оправдано,67 только если дешёвое оставляет конкретные подтверждённые случаи нерешёнными.68- Перед возвратом к ранее отвергнутой архитектурной идее проверить решения и69 память проекта. Назвать новый факт, из-за которого прежнее решение больше не70 действует; без нового факта не открывать развилку заново.71- Явно согласовать только необратимое решение, существенную неопределённость или72 изменение скоупа. В остальных случаях назвать допущение и продолжить.73- Данные, права и публичное поведение считать усилителями цены ошибки, а не74 автоматическими причинами вопроса. Остановиться для человеческого выбора,75 только если нужно определить новую политику доступа, допустить потерю или76 миграцию данных либо изменить действующий публичный контракт. Если поведение77 уже однозначно задано проверенным контрактом, исполнить его и продолжить.7879Вопросы для разбора — `references/before-code-questions.md`. Формат плана —80`references/plan-format.md`.8182## 2. Перед массовой правкой8384Применять, если текущая задача требует одинаково менять несколько независимых85мест.8687- Сначала определить фазу продукта. В прототипе и MVP не строить систему ради88 чистоты кода: важнее быстро проверить гипотезу.89- В устоявшейся части продукта посчитать места и значения до правки.90- Проверить, действительно ли повторения имеют одну причину меняться.91- Если отсутствие общего места уже мешает текущей работе — вынести минимальный92 источник: контракт, токен, компонент, адаптер или скрипт.93- Если не мешает или причины разные — оставить решения локальными.94- Начать с одного небольшого участка и проверить его до массового переноса.9596Не заводить дизайн-систему, библиотеку компонентов или другой слой просто «на97будущее». Нормальный результат проверки — **общий слой пока не нужен**.9899Подробности: `references/scaling-phases.md` для выбора фазы,100`references/scaling-triggers.md` для подсчёта и101`references/scaling-build-system.md` для системы значений. Исходный случай —102`references/scaling-postmortem.md`.103104## 3. Когда отладка встала105106Перед второй правкой получить новый факт. После двух неудачных правок считать,107что прежний метод исчерпан.108109- Сначала воспроизвести симптом на той ветке, где он возникает.110- Сформулировать гипотезу так, чтобы проверка могла её опровергнуть.111- Сменить источник данных: лог, дамп состояния, минимальный пример, история112 изменений, документация, issue-трекер или рабочий аналог.113- Только после нового наблюдения менять код.114- Если починка была объявлена, но не подтвердилась, сначала заменить способ115 проверки, а не делать ещё одну правку.116117Способы получить новые данные — `references/stuck-new-data.md`. Вопросы к самой118постановке — `references/stuck-question-premise.md`. Разбор после долгого затыка119— `references/stuck-postmortem.md`.120121## Как отвечать122123Начать с рекомендации. Коротко назвать, что известно, где главная124неопределённость, что делать дальше и чем проверить результат. Не превращать это125в обязательный шаблон для мелких задач.