В работе у программиста есть проект, в котором нужно пофиксить три бага и добавить три фичи. За час программист может пофиксить 1–2 бага или добавить 1–2 фичи. Но он постоянно отвлекается на форумы и соцсети, поэтому каждый час работа идёт так:
- Если он пофиксит один баг, то вылезут два новых.
- Если он пофиксит за час сразу два бага, то в трекере появится задание сделать ещё одну новую фичу, и не факт, что она войдёт в финальный релиз.
- Если он добавит одну фичу, то в трекере появится запись, что ему обязательно нужно добавить ещё одну фичу, но попроще, и без этого проект не сдать.
- И только если он за час добавит сразу две фичи, то новых задач не прибавится.
Сколько минимально времени потребуется программисту, чтобы сдать проект без багов и с пустым трекером задач?
Единственное действие, при котором не появляется новых багов и фич — это когда программист за час добавляет сразу две фичи. Получается, что для успешного завершения нужно сделать чётное количество фич подряд — 2, 4, 6, 8 или что-то подобное.
Получается, что задача программиста — своими действиями как можно быстрее прийти к тому, чтобы в проекте остались ненаписанными только фичи и чтобы их число делилось на 2. На старте ему нужно сделать 3 фичи, значит, новая цель — из трёх багов получить нечётное количество фич-заданий в трекере. В итоге это даст программисту их чётное количество, и он их попарно выполнит.
Нечётное количество фич — это 1, 3, 5 и так далее. Если мы закроем сразу два бага, то это даст нам только одну новую фичу в трекере, и останется ещё один баг. Делаем это за первый час:
Исходные данные: 3 бага, 3 фичи.
Час 1: 1 баг, 4 фичи (пофиксили 2 бага, получили +1 фичу в трекере).
У нас появилось чётное количество фич, которые можно сразу попарно закрыть. Тратим ещё 2 часа.
Час 2: 1 баг, 2 фичи (реализовали сразу 2 фичи, новых заданий не появилось).
Час 3: 1 баг (реализовали сразу 2 фичи, новых заданий не появилось).
Уже хорошо. Теперь единственное, что остаётся программисту — отработать этот баг.
Час 4: 2 бага (пофиксили 1 баг, получили 2 новых).
А вот тут можно попасть в ловушку, если сразу пофиксить 2 бага и получить фичу. Дело в том, что если остаётся только одна фича, то после её выполнения в трекере появляется запись, что нужно сделать ещё одну. Получается бесконечный цикл. Значит, нам нужно фиксить по одному багу по очереди.
Час 5: 3 бага (пофиксили 1 баг, получили 2 новых).
Ага, у нас уже 3 бага, а это значит, что можно сделать одновременно 2 из них, и не попасть потом в замкнутый круг. Проверим.
Час 6: 1 баг, 1 фича (пофиксили 2 бага, получили +1 фичу в трекере).
Но мы уже встречали ситуацию, когда был только один баг, и знаем, как из него получить 2, а из двух — фичу. Делаем.
Час 7: 2 бага, 1 фича (пофиксили 1 баг, получили 2 новых).
Час 8: 2 фичи (пофиксили 2 бага, получили +1 фичу в трекере).
И снова появилось чётное количество фич, которые нужно сделать. Закрываем проект финальным шагом.
Час 9: всё сделано (реализовали сразу 2 фичи, новых заданий не появилось).
Ответ: программисту потребуется минимум 9 часов.