Когда продукт «готов»? Мы обречены на вечный допил?

от автора

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

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

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

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

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

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

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

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

  • Сделал выгрузку — «а давай график»

  • Сделал график — «а чё он не по регионам?»

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

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

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

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

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

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

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

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

Жиза?

Жиза?

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

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

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

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

Изменение в законе — и где то тысячи разработчиков по всей россии переписывают «типовую» конфигурацию, мои соболезнования…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ссылка на оригинал статьи https://habr.com/ru/articles/1056826/