Техдолг — это кредит с плавающей ставкой
Он никогда не приходит счётом. Он приходит тем, сколько времени занимает следующая задача.
- Техдолг
- 62%
- Скорость выпуска
- −31%
- Багов в неделю
- 7
- Рефакторинг
- 3 дня
Почему это кредит, а не бардак
«Грязный код» — эстетическая претензия, и фаундеры правильно делают, что её игнорируют. Долг — другое дело, и метафора здесь точная: ты взял что-то сейчас — выпущенную фичу, закрытую сделку, работающее демо — и согласился заплатить больше потом. Есть тело долга, есть проценты, и ставка не фиксированная.
Ставка плавает по двум вещам: сколько людей трогает код и насколько продукт уехал от того, на что рассчитывал костыль. Хак, написанный под одного клиента, почти ничего не стоит, пока клиент один. На сорока клиентах и четырёх инженерах тот же хак снимает с тебя деньги каждую неделю.
Проценты платятся неделями и всеми сразу
Счёт не приходит никогда. Приходит фича, оценённая в три дня и занявшая восемь, причём никто не может внятно объяснить почему. Вот так проценты выглядят изнутри: оценка неверна не потому, что инженер был оптимистом, а потому, что в работу теперь входит неучтённый крюк через что-то, недостроенное в марте.
Ещё два места, где это вылезает. Баги — потому что каждый костыль это частный случай, который кто-нибудь забудет. И онбординг: время разгона нового инженера — прямое измерение того, какая часть твоей системы существует только у кого-то в голове.
Не всякий долг плохой
Осознанный долг — это дешёвое финансирование. Ты не знаешь, нужна ли кому-то фича, поэтому делаешь уродливую версию, выпускаешь за четыре дня вместо трёх недель и выясняешь. Если не нужна — удаляешь, и долг уходит вместе с ней: этот костыль был самым дешёвым исследованием в твоей жизни.
Дорогой — это случайный долг: его никто не выбирал, никто не записал, и он тихо капает. А худший случай — осознанный долг, переживший свою цель: выброшенный прототип, который уехал в прод, набрал клиентов и стал несущей стеной. Это микрозайм, о котором ты забыл, что подписывал.
Практическая разница — одна строчка в тикете. Долг, который ты назвал, можно погасить. Долг, который не назвали, становится архитектурой.
Сигнал, что пора гасить
Не уродливость. И не разработчик, который говорит, что ненавидит кодовую базу, — это перманентное состояние профессии. Сигнал — второй раз, когда оценка удваивается по одной и той же причине. Один раз — невезение. Второй — это ставка, а ставки капают.
Когда это случилось, не назначай переписывание. Переписывания — это способ превратить трёхдневную проблему в двухквартальную, а новая система всё равно унаследует долг старой, минус те куски, о которых забыли, что она их закрывала. Погаси конкретную вещь, из-за которой обе оценки удвоились, на той же неделе выпусти поверх неё что-нибудь работающее — и возвращайся строить.
«Каждая из трёх последних фич заняла вдвое больше предыдущей. Это не проблема людей. Это проценты.»
Техдолг в Axon — это процент, который молча облагает налогом всё, что ты выпускаешь. Никакого объявления не будет: просто фичи начинают стоить больше Focus, чем раньше, а баги съедают неделю. Рефакторинг выкупает процент обратно — и стоит тех самых дней, которые ты хотел потратить на рост.