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

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

На самом деле задался этим вопросом несколько недель назад на мероприятии из прошлой моей статьи. Смотря на продукты разработанные техно-гигантом Яндекс, не нарочно задаешься вопросом: "Этому в принципе небольшому сервису (без нейминга сами догадайтесь) уже почти 20 лет, но всё равно 10-ки, а то и 100-ни разработчиков работают над его улучшением каждый день, Когда можно сказать, что вот теперь идеально?". Да это чистой воды философия, но мысль как по мне интересная...

Спойлер для ленивых: у меня нет ответа. Но у меня есть подозрение, что "готового" продукта не существует в природе, а есть только продукт, который временно перестали трогать. И я хочу, чтобы вы в комментариях доказали мне обратное. Или согласились. Или подрались - тоже вариант.

Глава 0. Иллюзия финишной черты

Когда ты начинаешь делать что-то своё: пет-проект, скрипт, сервис - в голове всегда есть картинка "вот доделаю ЭТО, и всё, релиз". Такая красивая финишная ленточка.

Проблема в том, что ленточка убегает. Ты добегаешь до неё - а она уже на десять метров дальше.

  • Доделал парсер - "а давай ещё выгрузку в Excel"

  • Сделал выгрузку - "а давай график"

  • Сделал график - "а чё он не по регионам?"

И вот ты уже полгода полируешь то, чем должен был пользоваться, а не строить.

Знакомо? Мне - да.

У меня был скрипт, который я писал «на вечер», а потом дорабатывал так долго, что задача, ради которой он создавался, успела стать неактуальной. Классика: продукт пережил свою собственную цель.

Или был кейс из недавних. Задача была сделать обработку банковских платёжек. Сделал в короткие сроки. Заказчик благодаренРП благодарен. Но мой глаз продолжает дёргаться, но уже не на цель разработать быстро в кроткие сроки, а на то, что обработка 10.000 платёжек занимает 30 минут, а это долго. Короче я оптимизировал, потом оптимизировал оптимизированное, а потом оптимизировал оптимизированное которое было уже оптимизировано и так несколько недель. Никто об этом не просил, просто наващивая идея, которая не давала спать.

…Да, в результате обработка с 30-ти минут сократилась до 5-ти минут… Но это не нужно было никому… Ни заказчику… Ни РП…

Глава 1. Ещё одна маленькая кнопочка

Есть отдельный жанр вечного допила - когда допиливаешь не ты, а тебя допиливают.

Заказчик (или Марья Петровна, или ты сам через полгода) приходит с фразой-убийцей: "Тут надо совсем чуть-чуть, буквально одну кнопку". И ты знаешь, чем это заканчивается. "Одна кнопка" тянет за собой новое поле, новое поле - новую проверку, проверка - новую таблицу, а таблица - переписывание половины логики.

Жиза?
Жиза?

Продукт был готов. Ровно до того момента, пока кто-то не решил, что он недостаточно готов.

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

Глава 2. И тут я вспомнил про 1С (вскользь, честно)

Не могу пройти мимо. Мир 1С - это, наверное, самый чистый в природе пример вечного допила. Там продукт в принципе не задумывается как "законченный". Типовая конфигурация живёт, обновляется, обрастает доработками, доработки конфликтуют с обновлениями, обновления рождают новые доработки - и так по кругу, вечно.

Изменение в законе - и где то тысячи разработчиков по всей россии переписывают "типовую" конфигурацию, мои соболезнования...

Это не баг индустрии, это её образ жизни: пока бизнес жив - база дорабатывается. Точка "готово" там не предусмотрена архитектурно.

Но давайте честно - это не только про 1С. Я это отметил, потому что там оно доведено до абсолюта. А так этим болеет любой живой продукт, который кому-то реально нужен. Мёртвые проекты не дорабатывают. Дорабатывают как раз те, что работают.

И вот отсюда неудобная мысль: вечный допил - это всё таки не признак плохого продукта, это признак живого, а для кого-то даже и любимого. Или всё-таки признак того, что мы не умеем вовремя сказать "стоп" - тут решать вам?

Глава 3. Так где же выключатель?

Я вижу три лагеря, и все три меня по-своему бесят и восхищают одновременно.

Лагерь - Работает - не трогай. Продукт готов только, когда он решает задачу. Всё. Кривовато? Плевать. Задача закрыта - иди делай следующую. Технический долг? Проблема будущего тебя, а он вообще-то мужик крепкий, разберётся.

Лагерь - Доведи до ума. Готово - это когда не стыдно. Когда код чистый, тесты зелёные, архитектура не сыпется от одного взгляда. Проблема: до этого состояния продукт не доходит примерно никогда, потому что «идеально» - это движущаяся цель.

Лагерь - Отпусти и иди дальше. Идея простая: продукт готов, когда дальнейшие улучшения приносят меньше пользы, чем новый проект, на который ты потратишь то же время. То есть в какой-то момент полировать старое - это прокрастинация с чувством собственной важности.

Да, да… Конечно мы разработчики люди не то что бы свободные. Есть задачи, где мы понимаем, что возможно они не такие важные и это уже допил ради допила. Но в большинстве своём мы на что-то влиять можем.

Конечно-конечно, мы разработчики люди не свободные, решать, что и когда стоит допиливать не можем. Но иногда сами это делаем, иногда и сверхурочно. И здесь я могу сказать только то что это наверное от любви к продукту. Разработка это творчество, и нормально любить и хотеть сделать идеальным то что греет тебе душу... Но стараться всё же не возводить в абсолют.

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

К примеру, я на текущем своём проекте безумно влюбился в продукт. Но со временем нескольких бессонных ночей решил, что стоит всё такие чуточку проще относится к нему и не уходить в дебри перфекционизма и доработки до идеала, особенно на этапе MVP. Теперь я выписываю свои хотелки в блокнотик и если у меня появится время я посмотрю на него и что мне покажется суперполезным из всего этого, то и сделаю. Долго грузится форма (для меня это 4-6 секунд) -> пишу в блокнот -> через несколько дней смотрю и думаю Катастрофа? -> Нет, значит пусть лежит дальше.

И вот вопрос от меня на засыпку: Как отличить "продукт ещё требует работы" от "я просто боюсь его отпустить и начать новое"? …Возможно ввести метрики на подобии Definition of Done… Не исключаю…

Вердикт (который вердиктом то не является)

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

Да и вообще "Продукт готов" - это неправильный, наверное, вопрос. Правильный здесь: "эта конкретная доработка кому-нибудь, кроме моей тревоги или тревоги менеджера, нужна?".

Так-то лучше))

Но это моя гипотеза дилетанта, который прыгает между технологиями и ни в одной не осел настолько, чтобы допиливать один продукт десять лет.

Поэтому вопрос к вам, и я реально хочу услышать ответы:

  • Был ли у вас проект, который вы смогли назвать законченным? Или все они живы и по сей день сосут из вас время?

  • И честно: вечный допил болезнь индустрии или её нормальное здоровое состояние?

Пишите. Мне правда интересно, есть ли среди вас те, кто хоть раз в жизни сказал продукту "ты готов" - и не соврал.

Комментарии (0)