Технологии

Код, который нас убивает

Дисклеймер: Эта статья — субъективное мнение, крик души и попытка облечь в слова накопленную усталость и разочарование. Она не претендует на истину в последней инстанции и не ставит целью предложить конкретные решения, но надеется привлечь внимание к тихой эпидемии выгорания в наших рядах. Автор не стремится никого обидеть или обвинить, а лишь хочет донести важность осознания масштаба этой проблемы. Все совпадения с реальными проектами случайны и не преднамеренны. «Беспорядок — это не технический долг. Беспорядок — это просто беспорядок» — Роберт Мартин, 22 сентября 2009 г. Это начинается незаметно. Сначала — просто «временное решение». Потом — «сделаем рефакторинг». Но «потом» не наступает никогда. Мы называем это техническим долгом, словно он когда-то будет погашен, но прекрасно знаем — чаще всего это просто красивое описание хаоса. Долг (он же хаос) зарождается тогда, когда аналитики, загнанные в жесткие рамки бизнеса и стремящиеся угодить ему во что бы то ни стало, начинают брать на себя смелость оценивать трудоемкость, не обладая для этого достаточной экспертизой. Да, в теории мы должны совместно оценивать риски. Но на практике они не могут аргументированно отстоять реалистичные сроки, предпочитая соглашаться с любыми ожиданиями. Они видят функциональность, но не видят кода, думая, что новая фича — это просто добавить строчку. И именно с этого момента продукт начинает медленно умирать, а вместе с ним и мы. То, что раньше делалось за час, теперь требует целого дня. Чтобы уложиться в сроки, разработчики вынуждены вечеровать и ночевать. Каждое изменение — это игра в русскую рулетку. Исправил баг — получи два, исправил два — получи четыре. И так по кругу — бесконечная погоня за собственным хвостом, где каждый спринт лишь отдаляет момент полного краха, а моральная усталость становится постоянным спутником тех, кто когда-то верил в проект. Архитектура размывается бесконечными компромиссами. Вместо четких границ — спагетти-код, где всё связано со всем. Да, иногда временные решения оправданы. Но когда «временно» становится постоянной стратегией, фундамент начинает рушиться. Монолит обрастает непредсказуемыми связями, микросервисы превращаются в распределённого монстра. Эти компромиссы словно трещины в фундаменте — сначала их не видно, но однажды здание рухнет. А в эпицентре этого хаоса — «герои». Они отказываются продумывать архитектуру, считая это пустой тратой времени. Они гордятся тем, что не читают документацию, изобретая свои «кривые велосипеды». Их код — это лабиринт, в котором есть только один ключ — они сами. Аналитики их обожают, ведь те всегда делают «прямо сейчас», прикрывая свои архитектурные преступления «потребностями бизнеса». Они становятся незаменимыми узниками системы, которую сами и создали. И здесь проявляется фундаментальный закон проекта: степень хаоса в коде делает невозможным использование инструментов, предназначенных для порядка. Это не баг, это фича системы. Любые разговоры о CI/CD и тестах разбиваются об этот железный закон. Они бессильны против архитектуры, где всё связано со всем. В конце концов деградация приводит к невозможности писать эти самые тесты. Хрупкие, спутанные зависимости, функции с десятком побочных эффектов. Любая попытка покрыть код тестами наталкивается на стену. В лучшем случае, вместо модульных тестов — горстка скриптов, которые симулируют работу, но не дают никакой уверенности. Отсутствие тестов означает, что каждое изменение — это прыжок с завязанными глазами. Релиз превращается в ад, полный паники и горячих фиксов. Процессы деградируют вместе с кодом. Апрувы на MR превращаются в пустую формальность. Клич в канал разработки: «Коллеги, срочно нужен апрув!» — и вуаля, через 3 минуты две галочки сверкают на ещё не остывшем запросе на слияние… Никто не задаёт вопросов, никто не спрашивает об архитектуре. Главное — поставить галочки и влить в мастер. Система контроля качества становится фикцией. Те, кто пытается бороться за чистоту, быстро выгорают. Более того, они становятся изгоями, а их голос тонет в аргументах «надо быстрее». Аналитики начинают видеть в них препятствие для закрытия стори, а на высказывания со словами «рефакторинг» реагируют как вампиры на чеснок. В итоге эти недооценённые изгои смотрят, как творение, в которое они вкладывали душу, превращается в монстра, и уходят. Остаются те, кто смирился с грязью, и те, кто ею управляет. Итог предсказуем. Больше всех страдают разработчики. Постоянный стресс от «пожаров», стыд за собственный код, чувство вины за неизбежные ошибки и ощущение бессмысленной траты сил — вот цена компромиссов. Исчезает радость от решения задач, креативность, вера в свои силы. Остаётся лишь выжженное поле апатии и раздражения. В финале бизнес получает то, что хотел — продукт работает. Но это не триумф, а отсрочка приговора. Ценой стали выгоревшие люди и лабиринт кода, в котором завтра снова заблудится и выгорит новая команда. Труд не напрасен, но он обесценен, ведь каждый следующий шаг будет даваться в десять раз тяжелее. Система жива, но её будущее — это бесконечная борьба с последствиями вчерашних компромиссов.

Фильтры и сортировка