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