Невидимый список дел в кодовой базе: как превратить TODO в настоящий роадмап
Ваша кодовая база полна скрытой работы в виде комментариев TODO и FIXME. Узнайте, как превратить эти невидимые заметки в видимый, приоритизированный роадмап с помощью автоматизации, трекера задач и командных процессов.
Невидимый список дел в вашей кодовой базе: как превратить TODO в настоящий роадмап
Большинство инженерных команд сидят на тихом бэклоге, который почти никто не признаёт: это TODO, FIXME и комментарии в духе «потом бы это улучшить», разбросанные по всей кодовой базе.
В моменте такие маленькие заметки кажутся безобидными и даже полезными. Но со временем они накапливаются и превращаются в невидимый роадмап багов, техдолга, идей и недоделанных улучшений, которые никто системно не отслеживает.
В этом посте разберём, как превратить этот невидимый бэклог в видимый, приоритизированный и применимый на практике роадмап — не утопив команду в бюрократии.
Проблема: невидимая работа, спрятанная в комментариях
Инлайн‑комментарии вроде // TODO: optimize this или # FIXME: handle nulls properly — это по сути управление проектом, только сделанное плохим способом.
Почему это проблема:
- Они невидимы за пределами файла: пока никто не открыл конкретный файл, эта работа не существует ни в одном планирующем инструменте.
- У них нет приоритета: «TODO: log errors» и «TODO: rewrite payment flow» выглядят одинаково, хотя влияние у них радикально разное.
- У них нет владельца: в комментариях почти никогда не указано, кто и когда должен это сделать.
- Их нельзя измерить: нельзя отслеживать прогресс по TODO, которых вы не видите, — техдолг тихо накапливается.
При этом сами комментарии ценны. В них попадает:
- Обработка краевых случаев, на которую не хватило времени
- Техдолг, который вы сознательно внесли, чтобы быстрее выкатить фичу
- Замечания про безопасность или производительность
- Продуктовые идеи и мысли о рефакторинге
Цель не в том, чтобы запретить комментарии TODO/FIXME. Цель — системно поднять их до статуса полноценных задач.
Шаг 1. Сделать невидимый роадмап видимым
Первый шаг — осознанность: относитесь к комментариям как к данным.
1.1. Просканируйте кодовую базу на TODO/FIXME
Начните с простого поиска по репозиториям:
- Используйте поиск по коду (например, GitHub, GitLab, Sourcegraph, ripgrep), чтобы найти:
TODOFIXMEXXXилиHACK(если ваша команда их использует)
- Запустите поиск по всем репозиториям, чтобы увидеть скрытую работу во всей организации.
Уже это может открыть глаза:
- Сколько TODO у вас вообще есть?
- Где они концентрируются (сервисы, модули, языки)?
- Есть ли явно опасные с точки зрения безопасности или надёжности комментарии?
1.2. Разбейте находки на категории
По мере сканирования вы увидите закономерности. Большинство TODO попадает в несколько типичных корзин:
- Баги и корректность работы: FIXME: off-by-one when month changes
- Технический долг и рефакторинг: TODO: extract this into a separate service
- Производительность и масштабируемость: TODO: avoid full table scan
- Безопасность и соответствие требованиям: TODO: sanitize user input here
- Разработческое удобство (DX): TODO: improve error messages
- Продуктовые и фичевые идеи: TODO: support bulk operations
Эти категории позже помогут расставлять приоритеты и направлять работу нужным командам.
Шаг 2. Автоматически превращайте комментарии в задачи
Ручная конвертация каждого TODO в тикет — скучно и нереалистично. Вместо этого автоматизируйте поток «комментарий → роадмап».
2.1. Используйте CI или GitHub Actions для извлечения TODO
Вы можете настроить автопроцесс, который:
- Периодически сканирует кодовую базу на
TODO/FIXME(например, каждую ночь) или при изменениях в main. - Парсит комментарии и метаданные (файл, строка, автор, временная метка, контекст).
- Создаёт или обновляет задачи в вашем трекере (GitHub Issues, Jira, Linear и т.д.).
Минимум ваш скрипт или Action должны собирать:
- Текст комментария
- Путь к файлу и номер строки
- Имя репозитория
- Хэш коммита (чтобы можно было перейти к историческому контексту)
Пример комментария TODO в формате, удобном для парсинга автоматикой:
// TODO[security][P1]: Validate JWT audience claim before using it
Из него можно создать задачу с заголовком: «Validate JWT audience claim before use», с лейблами security, priority:high и ссылкой на исходный файл.
2.2. Не допускайте дублей задач
Чтобы не заспамить трекер:
- Встраивайте идентификатор в описание задачи, ссылающийся на конкретный комментарий.
- При следующих сканированиях инструмент проверяет, существует ли уже задача для этого комментария, прежде чем создавать новую.
Так ваш трекер задач остаётся единственным источником правды, а кодовый комментарий — локальным контекстом.
Шаг 3. Сделайте TODO полноправными участниками процесса
Когда TODO и FIXME превращаются в задачи, они перестают быть фоновым шумом и становятся управляемой работой.
3.1. Назначайте, оценивайте и приоритизируйте
Теперь, когда у каждого TODO/FIXME есть задача, вы можете:
- Назначить владельца: больше никаких «кто‑нибудь когда‑нибудь это поправит».
- Добавить контекст: прикрепить связанные инциденты, PR или документацию.
- Оценить влияние: безопасность, UX‑косметика или производительность.
- Приоритизировать на одном борде вместе с фичами.
Команды могут осознанно решать:
- Какие TODO брать в каждый спринт
- Какие критичные FIXME закрыть перед крупным релизом
- Какой техдолг логично убирать «в попутку» вместе с доработкой фич
3.2. Встройте это в CI/CD
Можно пойти дальше и связать управление TODO/FIXME с пайплайном:
- Падать или выдавать предупреждение на определённые теги: например, блокировать merge, если вносятся новые комментарии
FIXME[security]. - Закладывать бюджет на техдолг: отслеживать, какая доля ёмкости спринта уходит на задачи, появившиеся из комментариев.
- Отслеживать динамику: мониторить количество открытых TODO/FIXME‑задач во времени как метрику здоровья.
Так техдолг становится измеряемой, управляемой частью инженерной работы, а не побочным эффектом.
Шаг 4. Регулярный триаж, чтобы выделять сигнал среди шума
Не каждый TODO достоин того, чтобы жить в трекере вечно. Часть из них устарела, сформулирована расплывчато или уже неактуальна.
4.1. Задайте ритм триажа
Добавьте регулярный ритуал, например:
- Ежемесячный разбор TODO/FIXME внутри команды
- Ежеквартальный кросс‑репо аудит для рисков по безопасности и надёжности
На таких сессиях команда:
- Закрывает устаревшие задачи, где код уже изменился
- Уточняет расплывчатые комментарии и перезаписывает их как понятные, исполнимые тикеты
- Пересматривает приоритеты с учётом текущего роадмапа и инцидентов
- Группирует связанные элементы в более крупные эпики по рефакторингу или улучшениям
4.2. Связывайте это с инцидентами и баг‑репортами
Всякий раз, когда вы проводите разбор инцидента (post‑incident review):
- Ищите TODO/FIXME в затронутых областях кода
- Линкуйте связанные задачи из комментариев к инциденту
- Поднимайте приоритет у TODO, которые явно повлияли на инцидент или могут предотвратить похожие сбои
Так вы сокращаете разрыв между скрытой работой и реальным воздействием на прод, снижаете количество регрессий и делаете триаж более основанным на данных.
Шаг 5. Организационная видимость через кросс‑репо поиск
По мере роста кодовой базы по сервисам и репозиториям TODO и FIXME начинают сигнализировать о системных проблемах.
Используйте кросс‑репо поиск по коду, чтобы отвечать на вопросы:
- Сколько TODO, связанных с безопасностью, существует во всех сервисах?
- Какие репозитории больше всего насыщены комментариями FIXME?
- Есть ли TODO про одну и ту же проблему, разбросанные по нескольким сервисам (например, обработка ошибок, feature flags, auth‑флоу)?
Имея видимость на уровне всей организации, вы можете:
- Выявлять «горячие точки» техдолга и рисков
- Обосновывать крупные рефакторинги или инвестиции в платформу
- Замечать паттерны, которые не видны на уровне одного репозитория
Комбинируйте это с автоматизацией: кросс‑репо поиск подпитывает кросс‑репо создание задач, а вы получаете портфельный взгляд на скрытую работу.
Практичные соглашения, чтобы всё это работало
Чтобы масштабировать поток «комментарий → роадмап», введите лёгкие соглашения:
-
Структурированный формат TODO
- Пример:
// TODO[area][priority]: понятное, исполнимое описание - Области:
security,perf,ux,refactor,infraи т.п.
- Пример:
-
Ссылка на задачу, если она уже есть
// TODO: see ISSUE-1234 for full context- Автоматизация может такие комментарии пропускать (задача уже существует).
-
Правила, когда уместно писать TODO
- Использовать TODO/FIXME только для работы, которую вы реально планируете сделать.
- Для чисто спекулятивных идей лучше использовать документацию или продуктовый бэклог.
-
Проверки в pull request‑ах
- При желании — предупреждать, если добавляется новый TODO без меток или понятного контекста.
Эти простые привычки сильно повышают ценность работы, которая рождается из комментариев.
Польза: зачем относиться к TODO как к реальной работе
Когда вы начинаете считать TODO и FIXME полноправной работой, вы получаете накопительный эффект:
- Более быстрый и осознанный возврат техдолга
Долг перестаёт быть туманом — он превращается в бэклог с владельцами и приоритетами. - Меньше регрессий и сюрпризов в проде
Важные FIXME больше не живут забытыми в тёмных уголках кода. - Постепенное улучшение качества кода
TODO закрываются в рамках планирования, а не только во время «недель уборки». - Лучшее соответствие кода и роадмапа
Работа, которую инженеры видят в коде, совпадает с тем, что они видят на борде. - Организационная видимость рисков
Лидеры понимают, где сконцентрированы риски по безопасности, производительности и надёжности.
Главное — вы переходите от реактивного управления долгом («когда‑нибудь надо будет это почистить») к проактивному, измеримому подходу.
Вывод: превратите шёпот в коде в настоящий план
Ваша кодовая база уже содержит набросок карты: где больно, где хрупко и где можно сделать лучше. Эта карта спрятана в крошечных, легко игнорируемых комментариях: TODO, FIXME, HACK.
Вместо того чтобы давать этим заметкам медленно сгнить:
- Поднимите их на поверхность с помощью кросс‑репо поиска.
- Автоматизируйте перенос в задачи через CI или GitHub Actions.
- Сделайте их полноправными элементами планирования, владения и приоритизации.
- Регулярно пересматривайте и триажируйте, чтобы сохранять высокий сигнал.
Если сделать это хорошо, ваш «невидимый список дел» превратится в живой и полезный роадмап — тот, который ускоряет погашение техдолга, снижает риски и постепенно повышает качество софта, который вы выпускаете.