Перейти к содержанию

Как развивать проект, не накапливая технический долг

Последние дни из меня просто фонтанировали идеи. Хочется сделать полноценную систему поддержки в боте — чтобы пользователи могли сигнализировать о проблемах, запрашивать помощь и вести диалог с администратором прямо внутри приложения. Хочется добавить на сайт раздел «Руководство пользователя» — нормальную документацию, написанную человеческим языком, а не техно-гиковским, понятным только разработчикам и AI. И еще — добавить QR-код в карточку устройства. Казалось бы, мелочь: после недавней работы над триал-функциональностью я примерно понимаю, как это делается. Думаю, это несложно и не займет много времени.

Стоп.

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

Фраза, с которой все начинается #

«Это несложно и не займет много времени» — у этой фразы два режима работы, и оба одинаково коварны.

Первый: «Это несложно и не займет много времени. Сделаем потом.» Задача понятна прямо сейчас: контекст в голове, реализация очевидна, рука тянется к клавиатуре. Но есть что-то более срочное. Задача уходит в список «на потом». Проходит неделя, потом еще одна. Контекст рассеивается — и когда ты наконец возвращаешься к ней, оказывается, что нужно все вспоминать заново: зачем это было нужно, как это должно работать, с чем связано. То, что требовало пятнадцати минут в момент возникновения, теперь требует полутора часов и отдельного места в расписании. Мелкая текущая задача незаметно превращается в Задачу с большой буквы.

Второй: «Это несложно и не займет много времени. Сделаем прямо сейчас!» Новая идея захватывает — и рука тянется к клавиатуре, но в ущерб тому, что уже давно стоит в очереди. Здесь вступает в силу закон Мерфи в расширенной редакции: запланированное время умножай на два, чтобы учесть непредвиденные обстоятельства. А потом умножь еще раз на два — чтобы учесть, насколько непредвиденными окажутся эти непредвиденные обстоятельства. Та же триал-функциональность заняла у меня целую сессию программирования. Результат хороший — проект сделал шаг вперед. Но что-то другое при этом сдвинулось назад.

Каждая новая фича открывает горизонты. Но некоторые направления при этом топчутся на месте — вытесненные потоком все новых и новых идей.

Задачи, которые всегда откладываются #

У меня уже давно накопилась масса задач, которые все время откладываются. Не все из них технические. Помните маскота проекта, о котором я упоминал в самом первом посте? Прошло больше трех недель — а дело не сдвинулось с места. Я пытаюсь закрыть большой фронт задач по весьма разрозненным направлениям — в одиночку. Две трети времени уходит на ведение этого блога и канала, вместо того чтобы решать технические вопросы. Меня волнует пользовательский опыт — вместо расширения инфраструктуры и настройки сетевого стека на бэкенде.

Я знаю, что нельзя объять необъятное. Но я пытаюсь.

Невидимая работа #

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

Как найти баланс между движением вперед и этой невидимой шлифовкой? Как развивать проект, не накапливая технический долг?

К сожалению, у меня нет ответа на этот вопрос.