
Будучи ведущим инженером, я неоднократно наблюдал следующую картину в разных компаниях.
- Руководители жалуются на недостаточно высокую скорость разработки. "Я просто хочу показывать день рождения пользователя на странице настроек. Почему на это уходит целый год?"
- Инженеры говорят, что техдолг мешает им двигаться вперед.
- Руководство поручает менеджерам «разобраться с техдолгом», чтобы повысить скорость разработки.
- Менеджеры начинают искать крупные проекты с технологическим долгом, чтобы добавить их в роадмап
- Амбициозный разработчик продвигает масштабный привлекательный проект, над которым интересно работать, который красиво смотрится в резюме и/или поможет получить повышение. «Перейдём на событийную архитектуру! И на сей раз — по-настоящему правильно!»
- Менеджеру нравится это, потому что такой проект для него престижен, хорошо смотрится в резюме и показывает, что он активно «повышает скорость разработки».
- Руководство понятия не имеет о том, как устроена текущая система, не говоря уже о предлагаемой событийно-ориентированной архитектуре. Но она им нравится, потому что обещает решение их главной проблемы. «В будущем все запросы на разработку новых фич будут выполняться за считанные дни!»
- Половину инженерной команды перебрасывают на «Грандиозный Проект по Устранению Техдолга» на следующие несколько кварталов. За это время будут внесены минимальные улучшения, почти не заметные для пользователей
- Год спустя проект завершается. Все празднуют. Людей повышают в должности.
- Скорость разработки теперь чуть выше. Но процесс по-прежнему упирается в десятки нерешенных проблем.
- Новый техдолг начинает копиться в свежей системе сразу после первого же запроса на новую функцию.
Реальность такова, что технический долг — это смерть от тысячи порезов. Вас ждут такие проблемы, как:
- Некачественные тесты, из-за которых приходится тратить время на отладку, решая мнимые проблемы. Из-за этого замедляется развертывание CI/CD.
- Бреши в тестовом покрытии, из-за которых разработчики тратят часы на ручное тестирование каждого изменения.
- Плохая документация, из-за чего люди тратят 30 минут на выполнение задачи, которая должна занимать 1 минуту.
- Функции на 200 строк и классы на 3000 строк с ужасно поименованными переменными и методами — настоящий кошмар, так как в коде ничего не понятно, а с ним приходится работать.
- Запутанные объектно-ориентированные иерархии с избыточными абстракциями и неожиданными побочными эффектами — приходится потратить целый день, чтобы просто понять эту мешанину перед внесением изменений.
Невозможно решить проблему неработающих тестов, слишком сложного кода и плохой документации с помощью большого проекта роадмапа. Просто слишком много мелких препятствий, разбросанных по разным уголкам. Попытка перечислить их все, отнести к DRI, привязать к тикетам спринт-планирования или OKR, отследить их выполнение… всё это займет столько же времени, сколько и сама работа. Хуже того: такой формализованный «водопадный» процесс даже не позволяет выявить большинство проблем.
Лучший способ устранить эти многочисленные препятствия – практиковать восходящий подход, который постепенно войдёт в повседневную рабочую культуру команды.
- Призывайте команду находить время на совершенствование кода вместо того, чтобы просто сдавать изменения как можно быстрее.
- Создайте культуру код-ревью, в которой уделяется особое внимание сложности, удобочитаемости кода, документации и тестированию.
- Считайте код-ревью неотъемлемой обязанностью сотрудников. Подходите к этому как к инструменту, с помощью которого сеньор-разработчики направляют команду и поддерживают техническое качество проектов… и соответствующим образом планируйте под это время. Не стоит просто сбрасывать проверки джуниор-разработчикам для формального 'одобрения'.
- Поощряйте и давайте возможность каждому сотруднику исправлять мелкие проблемы, которые он замечает при повседневной работе. Не топчите эти мелочи в бюрократии спринт-планирования. Не должно быть так, что для добавления документации нужно создавать JIRA-тикет, ждать его обсуждения и приоритезации. «Увидел проблему — реши проблему».
- Дайте понять вашим старшим и ведущим инженерам, что их главная обязанность — не только работать над масштабными «глянцевыми» проектами, но и обеспечивать прогресс всей команды. Они должны регулярно выделять время на выявление и устранение всего, что создаёт технический долг или тормозит коллег — даже если это рутинная, неприглядная работа вроде рефакторинга сложной функции или дописывания неполной документации.
- Признавайте и поощряйте вклад инженеров в ежедневную работу по улучшению кода и сокращению техдолга. Особенно отмечайте заслуги senior-разработчиков, чьё руководство приводит к отличным результатам всей команды — даже если лично они не реализовали ни одного «эффектного» проекта.
Единственный способ сохранить зубы и дёсны здоровыми — добиться, чтобы повседневная гигиена полости рта вошла в привычку. Чистить зубы дважды в день, пользоваться нитью и не злоупотреблять сладостями. Если пренебрегать этим, то никакие визиты к врачу раз в квартал не помогут.
P.S. Обращаем ваше внимание на то, что у нас на сайте проходит распродажа.
Комментарии (3)
Count_s
16.05.2025 12:49Техдолг можно и нужно планировать уже на этапе архитектуры.
Это не исключение из процесса - это часть процесса.Принятые на старте проектные и архитектурные решения и есть первоисточник техдолга.
Именно здесь определяется: какова будет стоимость изменений завтра и послезавтра,будет ли возможна компонентная замена элементов без риска для всей системы, где будут пролегать технологические границы и насколько они поддаются пересмотру.Искусство архитектора (или менеджера - зависит от проекта) - не избегать техдолга, а управлять им.
Балансировать между скоростью, устойчивостью и стоимостью.
Создавать систему, где возможна эволюция без остановки сервиса.Дальше - да, культура важна. Код-ревью, рефакторинг, документация, «почини по ходу» - всё это обязательно. И это тоже требуется планировать.
Но если в основании проекта нет миграционной стратегии, если не заданы устойчивые интерфейсы, если всё строится на слоёной каше из фреймворков -
никакая «гигиена» не спасёт.Проблема не в том, что техдолг не чинят - проблема в том, что о нём не думают, пока не стало поздно.
only_music
16.05.2025 12:49Звучит как правильная идея, но как это всё внедрять? Вы культуру строить предлагаете. А это как с существующий культурой работать будет?
ramil_trinion
Все эти списки, списки, списки. Идеальное оформление. Но нет души. Автор, признайтесь - это же ИИ.