Эффект «почти готово»: почему последние 10% занимают 90% времени

Эффект «почти готово»: почему последние 10% занимают 90% времени

Прочитал на днях очередную историю про то, как стартап год не может выпустить продукт, потому что «осталось совсем чуть-чуть доделать». И вспомнил, сколько раз сам попадал в эту ловушку.

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

В программировании даже есть полушутливое правило: первые 90% работы занимают 90% времени, а оставшиеся 10% — ещё 90% времени. И это не шутка. Это реальность, с которой сталкивается каждый, кто хоть раз пытался довести проект до конца.

Почему так происходит

В начале проекта ты работаешь с крупными блоками. Делаешь авторизацию — сразу видно, что проект готов на 15%. Прикручиваешь базу данных — ещё 20%. Рисуешь главный экран — ещё 15%. Прогресс виден, он измеримый, он мотивирует. За день работы проект может подскочить с 30% до 50% готовности. Это кайф.

Но ближе к концу картина меняется. Остаются мелочи. Сотни мелочей. Нужно исправить баг с валидацией email (два часа на поиск, понимание, исправление, тестирование). Подправить отступы в мобильной версии (час). Добавить обработку того случая, когда пользователь вводит эмоджи в поле, где их быть не должно (три часа). Проверить, что всё работает в Safari (спойлер: не работает, ещё четыре часа).

Каждая такая мелочь требует усилий, но не даёт ощутимого прогресса. Исправил баг — проект всё ещё на 90%. Подправил вёрстку — всё ещё на 90%. Добавил обработку ошибки — опять 90%. Ты работаешь целый день, устаёшь, а визуально ничего не изменилось. Это выматывает психологически.

Психология выгорания на финише

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

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

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

Проект превращается в бесконечную полировку. Потому что «идеально» — это недостижимая цель. Всегда можно улучшить, всегда можно добавить, всегда можно переделать. И в какой-то момент понимаешь, что это способ оттягивать выпуск. Потому что пока проект не выпущен, он не может провалиться.

Кладбище 90%-ных проектов

У каждого разработчика (дизайнера, писателя, любого креатора) есть такое кладбище. Куча проектов, которые готовы на 90% и так никогда и не вышли. Я знаю людей, у которых таких проектов десятки. Все они умерли на одной и той же стадии — «осталось совсем чуть-чуть».

Почему? Потому что весь энтузиазм уходит на первые 90%. На интересную часть. На создание. А последние 10% — это работа. Скучная, утомительная, неблагодарная. И когда энергия кончается, а конца всё ещё не видно (потому что эти 10% растягиваются на недели и месяцы), люди сдаются. Находят новую идею, новый проект, где снова есть энтузиазм и быстрый прогресс. А старый остаётся на 90% навсегда.

Пропасть между «работает» и «готово»

Программисты особенно хорошо знают эту пропасть. «Работает» — это когда ты запустил на своей машине, ввёл правильные данные, и оно сработало. «Готово к продакшну» — это когда оно работает на всех платформах и браузерах, обрабатывает некорректные данные (включая попытки SQL-инъекций), не падает при высокой нагрузке, имеет понятные сообщения об ошибках, залогировано для отладки, протестировано хотя бы по основным сценариям, задокументировано, можно развернуть одной командой, есть мониторинг и возможность отката на предыдущую версию.

Между этими двумя состояниями — огромная работа. И это всё те самые последние 10%, которые превращаются в 90% времени.

Отдельная песня — баги на финальной стадии. Классическая история: проект почти готов, осталось исправить пару багов. Исправляешь один — появляются два новых. Исправляешь эти два — появляются три. Потому что на финальной стадии ты начинаешь интенсивно тестировать и находишь то, что раньше не замечал. И когда исправляешь — трогаешь код, который раньше работал, и создаёшь новые баги. Как с гидрой: отрубил одну голову — выросли две.

Что с этим делать

Первое и главное — принять реальность. Последние 10% — это не 10% времени, это минимум 50%, а иногда и все 90%. Когда планируешь проект, закладывай это изначально. Не «основной функционал — две недели, а там допилим за пару дней». А «основной функционал — две недели, полировка и баги — ещё две недели». Тогда не будет разочарования, что «я думал через три дня закончу, а прошёл месяц».

Второе — определи критерий «достаточно хорошо». Идеально недостижимо, и попытка достичь идеала убьёт проект. Пропиши конкретно: проект готов, когда работают основные сценарии, нет критичных багов, и можно показать пользователям. Не «когда всё идеально, нет ни одного бага, и код чистый на 100%». Достаточно хорошо — достаточно.

Третье — подход MVP (Minimum Viable Product). Выкати то, что работает, даже если не идеально. Пусть дизайн простой, пусть не все фичи, пусть есть мелкие некритичные баги. Главное — работает. И получи обратную связь. Часто оказывается, что то, что ты считал критичным, пользователям не нужно. А то, что считал мелочью, они требуют в первую очередь. Доделывай по реальным потребностям, а не по своим фантазиям о том, что «может понадобиться».

Четвёртое — найди мотивацию для финиша. В начале тебя мотивирует создание, энтузиазм, прогресс. В конце нужна другая мотивация — завершение. Визуализируй конец: когда выпущу, смогу показать людям, получить обратную связь, начать зарабатывать, или просто закрыть этот проект и начать новый. Награди себя за завершение: выходной, покупка чего-то, празднование. Финиш должен быть привлекательным, иначе застрянешь на 90% навсегда.

Пятое — поставь жёсткий таймбокс на полировку. «У меня есть неделя на доработку, что успею — то успею, остальное в следующей версии». Без таймбокса полировка бесконечна, всегда найдётся что улучшить. С таймбоксом фокусируешься на важном и выпускаешь.

Шестое — составь конкретный чеклист для последних 10%. Не абстрактное «доделать проект», а список: исправить баг с формой регистрации, протестировать в Firefox, написать README, настроить деплой, проверить мобильную версию. Конкретика убивает ощущение бесконечности. Видишь 15 задач, делаешь по одной, вычёркиваешь — и видишь прогресс.

Итого

Если у тебя сейчас есть проект на 90%, который никак не можешь доделать — это нормально. Ты не плохой разработчик и не ленивый. Ты столкнулся с универсальной проблемой всех, кто создаёт что-то. Последние 10% — это реально 50-90% времени и усилий.

Прими это, планируй с учётом этого, определи «достаточно хорошо» и останови себя. Выпусти несовершенное, но работающее. Получи обратную связь, доработай по факту. Не дай проекту умереть на 90%, потому что выпущенный несовершенный проект лучше невыпущенного идеального. Несовершенный приносит пользу, получает обратную связь, развивается. Идеальный, застрявший на 90%, не приносит ничего, кроме разочарования.

Законченное лучше, чем превосходное. А проект, замерший на 90% — это не проект, это труп в шкафу.

Предыдущий пост Следующий пост
Наверх