Быстро и криво не равно дешево
Клиент или CEO давит: "Надо вчера, бюджет около-нулевой!" И первое, что летит в адское пламя экономии - тесты, чистая архитектура, документирование. Кажется, сэкономили время, деньги, клиент счастлив… А вот фиг-то там. Говорю как CTO, который и сам так грешил. Сегодня "сэкономил" 100 часов, а через полгода тратишь 500 на поддержку этого хаоса. И фикс багов на каждом чихе. Но и другая крайность - когда неделями шлифуешь идеальный код для фичи, которую выпилишь через месяц - то ещё удовольствие. Расскажу на реальных косяках, как найти золотую середину. Помню одну CRM: взяли на поддержку систему, вроде все работает, даже красиво. Это пока мы не заглянули в код. Лучше бы мы этого не делали, честно… Компоненты переплетены намертво, тестов - ноль. Любое изменение превращалось в лотерею: починишь отчет и гадаешь, что сломается дальше: рассылка, клиенты, или что ещё? Добавление фичи растягивалось в 2-4 раза: полдня на задачу, три дня на поиск того, что ещё сломалось. Команда ненавидела проект, клиент платил не за фичи, а за наши мучения. Выгребали постепенно: рефакторили только то, что трогали, потихоньку покрывали тестами. Итог: клиент спас систему, но заплатил кратно больше, чем если бы изначально вложился в нормальную архитектуру. 👉 Техдолг - не страшилка CTO. Это реальные сверх-часы и сорванные сроки. И платит за них в итоге клиент. Контраст - наша система парсинга, которая не сдохла через пол года. Задача: сделать систему парсеров, устойчивую к изменениям сайтов-источников. Без фанатизма в виде само-обучения, а просто легко исправляемый. Сперва, сделали модульным - добавление нового источника стало занимать пол дня вместо 2-3, как часто бывает. Автотесты: запустил - сразу видно поломку. Да, тесты на парсинг. Да, с реальными страницами. Мониторинг орал в телегу при изменении вёрстки. Клиент сам мог легко поменять селекторы в конфиге. Или отдать любому вебмастеру, который даже python ни разу не видел. "Плагины" (они же middleware) позволили добавить обработку без переписывания ядра. Итог: 80% проблем чинились правкой конфига за 5 минут, система жила годами без переделок. Клиенты возвращались не из-за технической зависимости, а потому что доверяли. Вывел 4 железных правила. Я не фанатик - в условиях жёстких бюджетов и классического “вчера” жертвую чистотой, но не сутью: 1️⃣ Пишем понятный код. Тут и говорить нечего. Базовые принципы, ревью, голова - твои главные друзья. 2️⃣ Модули. Не микросервисы ради микросервисов, но модули чаще всего нужны. Нет ада сильной связанности сплошных монолитов. Да и переиспользовать отдельный модуль легко. Минус время на то, что уже было сделано. 3️⃣ Тесты. Не гоняемся за 100% покрытием, но, хотя бы базовые быть должны. Хотя бы функциональные. 4️⃣ Без магии! Никакого хардкода, в котором кроме вас никому не разобраться! Если клиент легко может найти другую команду на поддержку, он вероятнее всего вернётся именно к вам. Парадокс, но работает. 90% наших клиентов - доказательство. 🔥 Эксперименты: Быстро и Грязно (с мозгом!) - только для гипотез с риском >50%. Железное правило: зашло → сразу рефакторим; не зашло → мгновенно удаляем. Никаких "потом"!
Личная боль из опыта разработки, породившая последнее правило: потратил недели на идеальную реализацию фитчи. Требование такое - все идеально, или никак (Об том, почему это тоже плохо в следующий раз). Юзеры проигнорировали. Удалили через несколько дней. Печаль, грусть и тоска от потерянного в пустую времени.
Вывод: иногда "быстро и криво" с последующей чисткой или удалением — меньшее зло, чем вбухивать ресурсы в пустоту.
CTO, всё же, не идеалист, проповедующий чистый код, а генератор результатов для бизнеса. А сорванные сроки, тех долг, деморализованная команда - это бизнес-риски. Они бьют по деньгам и репутации. А потому - золотая середина. И ещё раз. Незаменимых быть не должно. Точка. Если клиент может уйти - он будет доверять куда больше. А это уже путь к долгим и счастливым взаимоотношениям.