Решение задач — Примеры

Пример 1 — Одно предложение, затем разделение

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

Наблюдение  прогон счетов идёт медленно только в последний день месяца
Потрачено   час в коде отрисовки, ничего не исключено

Решение

Проблема: прогон счетов идёт медленно только в последний день месяца.
Части   (a) число счетов, выпущенных в этот день
        (b) задание сверки, которое тоже идёт тогда
        (c) размер пакета, с которым настроен прогон
Известно (c) не менялось год
Предполагается (a) объём достигает пика в последний день  <- дешевле всего
              проверить
Далее   логировать число счетов и время прогона два месяца

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

Пример 2 — Ведите журнал исключений

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

Баг           в некоторых PDF-счетах пропала последняя строка
Точка старта  шаблон, потому что именно там рисуется строка

Решение

13:00  гипотеза: шаблон отбрасывает последнюю строку. Перепечатал
       падающий заказ; строки нет и на печати. Исключено.
13:35  гипотеза: высота страницы обрезает блок. Поставил страницу выше;
       строка всё ещё пропадает. Исключено.
14:10  гипотеза: чётное или нечётное число строк. В трёх провалах число
       чётное, в двух успехах — нечётное. Исключено.
14:40  Осталось: строки, которые получает отрисовщик, а не их рисование.
Далее  выгрузить строки для одного падающего заказа и посчитать, что
       доходит до отрисовщика.

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