Технический долг: профилактика и погашение

Image via Shutterstock.

Всем привет. Сегодня хочу затронуть такую тему, как технический долг с точки зрения проектного менеджера.

Для начала разберемся, что такое технический долг (ТД). Под ТД я имею в виду:
— Откровенно плохую архитектуру;
— Не-модульность компонентов;
— Плохое качество кода отдельных компонентов;
— «Костыли»;
— Изменения, которые нужно сделать в отдельных модулях кода, вызванные другими изменениями.

Причины возникновения и последствия

ТД может быть вызван такими вещами, как:

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

 Плохое взаимодействие внутри команды, которое приводит к тому, что на этапе отладки приходиться тратить времени больше, чем было запланировано. Это, в свою очередь, возвращает к предыдущему пункту.

— Непонимание заказчиком того, как устроен его продукт. В таком случае разработчикам приходиться добавлять функционал, который противоречит первоначальной задумке. Либо успевать к определенным датам, когда продукт должен быть представлен инвесторам\тестировщикам\пользователям. В результате костыли в коде растут, как грибы.

— Отсутствие рефакторинга. Как правило, случается из-за невозможности донести до заказчика необходимость его проведения. И, как следствие, происходит потеря качества и производительности кода.

— Низкая квалификация сотрудников. Они вроде и хотели бы написать код лучше, но как-то не выходит.

А на выходе получатся продукт, который сложно поддерживать.

Как и любой другой долг, этот тоже приходится со временем отдавать. Команда отдает долг в тот момент, когда переписывает код. ТД также имеет проценты. Их приходиться выплачивать за счет того, что при выполнении следующих задач нужно тратить больше времени, чем можно было бы.

А как все это выглядит со стороны проектного менеджера? Приблизительно вот так. Сроки подходят к концу, бюджет подходит к концу, резервов уже нет — а дело не сделано.

Как пример, в моей практике был такой случай: заказчик постоянно присылал все новые и новые требования, согласно которым функционал становился сложнее. Каждый раз, когда поступало новое требование, команда давала заказчику оценку, что задача займет небольшое количество часов, так как и задачи были по своей сути не сложные. Но в результате этого socket соединение было перегружено и при высокой активности часто отпадало. То есть неожиданно для нас образовался технический долг — архитектура, которая была заложена при проектировании системы, стала не оптимальной. В этой ситуации оценка давалась каждой отдельной задаче, а влияние на систему в общем не учитывалось совсем. Соответственно, времени на решение проблем также выделено не было. В итоге по окончанию выделенного на разработку времени получилось крайне не стабильное (в определенных частях) приложение.

Документируем и оцениваем

Проектный менеджер должен работать с ТД приблизительно таким же образом, как и с тасками во время формирования плана на спринт. Обязательно следует документировать ТД: делать векселя и планировать время для выплаты долгов в каждом спринте, а также распознавать и устранять риски, которые могут вызывать появление такого долга.

Таким образом, в проекте появляется новый тип задач — технический долг, с жизненным циклом, очень похожим на таск или баг. Только если источником тасок является проектный или продуктовый менеджер, а багов — команда тестировщиков, то задачи по ТД должны создаваться и сразу оцениваться разработчиками. Получается, что разработчик пишет сам себе напоминание на будущее в тот самый момент, когда делает костыль. Преимущество заключается в том, что пока воспоминания о только что написанном коде свежие, то и напоминания получатся точными. Источником задачи по погашению ТД может стать и проектный менеджер, если при проведении ретроспективы были обнаружены ТД.

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

Если бы я применил такой подход ранее, то имел меньше проблем со своим проектам. Тогда бы команда обращала внимание на возможные последствия добавления дополнительных данных в один и тот же канал связи и сразу бы оценивала изменения, которые нужно сделать в архитектуре, возможный перенос некоторых данных в другие каналы и т.п. И я бы мог оговорить необходимость выделения большего времени для того, чтобы интегрировать новый функционал правильно, либо оговорить другие варианты внедрения с меньшим ущербом для архитектуры приложения.

Если вы знаете/имеете практику работы с ТД, пожалуйста, пишите в комментариях. Давайте обсудим вместе.

Похожие статьи:
Оператор мобильной связи «Билайн» объявил о расширении возможностей линейки тарифов «ВСЁ!», создавая, как он заявляет, условия...
Оперативники Департаменту кіберполіції разом зі слідчими Нацполіції провели багаторівневу спецоперацію та викрили групу хакерів,...
Видання Forbes опублікувало рейтинг приватних українських бізнесів — лідерів 15 галузей економіки. Розповідаємо, хто потрапив...
Засновник IT-компанії MacPaw Олександр Косован на своїй сторінці у Facebook опублікував детальний допис-розʼяснення щодо справи,...
34-річний Тарас Покорний з Чернівців. До повномасштабного вторгнення працював Software Development Engineer у компанії DataRobot,...
Яндекс.Метрика