
В прошлой статье я рассказывал, как настроил личный iptables и перешел в режим Default Deny, чтобы отбиться от внешних DDoS-атак (коллег, пустых встреч и спама). Периметр я защитил, входящий трафик почистил. Uptime вырос.
Казалось бы — живи и радуйся. Но я заметил странную вещь: снаружи тихо, а сервер все равно греется. Я заглянул внутрь контейнера и понял: проблема не во входящих пакетах. Проблема в архитектуре самого приложения.
Парадокс: я могу спроектировать архитектуру, которая выдержит падение дата-центра. Я могу дебажить race condition в многопоточном приложении. Но когда мне нужно позвонить в страховую или выбрать отель для отпуска, я впадаю в ступор.
Мой личный бэклог забит задачами типа «разобраться с налогами» и «начать бегать», которые висят там с 2019 года. Я переношу их из спринта в спринт, испытывая фоновое чувство вины.
В какой-то момент я понял: это не лень. И это не «отсутствие мотивации». Это классический Technical Debt (Технический долг), только не в репозитории, а в нейросети.
И проценты по этому долгу я плачу самым дорогим ресурсом — своей когнитивной емкостью.
Архитектура проблемы: Откуда берется Legacy в голове
В разработке техдолг возникает, когда мы выбираем быстрое, «грязное» решение сейчас, обещая переделать «по-нормальному» потом.
«Захардкожу этот конфиг, потом вынесу в переменные».
«Напишу без тестов, потом покрою».
В жизни мы делаем то же самое. Мы пишем «временные костыли», которые становятся фундаментом нашей личности.
Пример 1: «Костыль избегания» Вам нужно поговорить с токсичным коллегой. Это сложно (дорогой рефакторинг отношений). Вы выбираете «быстрое решение»: промолчать и сделать за него. Результат: Вы сэкономили 10 минут сейчас, но внесли баг в архитектуру. Теперь система знает: «Чтобы не было конфликта, работай за двоих». Этот костыль начинает жрать ваш ресурс каждый день.
Пример 2: «Утечка ресурсов» (Unclosed Resources) Вы пообещали себе (или кому-то) что-то сделать. «Выучить Rust», «Починить кран». Вы не делаете. В коде, если вы открыли соединение с БД и не закрыли его, это соединение висит и жрет память. В мозге — то же самое (Эффект Зейгарник). Каждое «надо бы» — это открытый сокет. Когда их становится 500, сервер ложится от Too Many Open Files.

Interest Rate: Цена обслуживания
Самое страшное в техдолге — это проценты. Мартин Фаулер писал: «Главная проблема техдолга не в том, что код некрасивый. А в том, что добавление любой новой фичи становится экспоненциально сложнее».
То же самое с людьми. Когда у вас накопился «Психологический Техдолг»:
Высокий Time-to-Market: Чтобы сделать простую задачу (помыть посуду), вам нужно преодолеть чудовищное сопротивление.
Низкая отказоустойчивость: Любой мелкий баг (нахамили в магазине) вызывает
Kernel Panic(истерику), потому что система и так работала на пределе.Невозможность масштабирования: Вы не можете взять ответственность за семью или новый проект, потому что ваш «монолит» и так еле дышит.
Мы пытаемся лечить это «тайм-менеджментом» (оптимизацией процессов). Но нельзя оптимизировать процесс, если архитектура гнилая. Нужен Рефакторинг.
Алгоритм: Refactoring Strategy
Как мы разгребаем техдолг в проекте? Мы не переписываем всё с нуля (это путь к смерти проекта). Мы выделяем квоту времени в каждом спринте.
Вот мой протокол рефакторинга личности:
Шаг 1. Code Review (Инвентаризация)
Выпишите все свои «висяки». Вообще все.
Обещания себе и другим.
Недоделанные курсы.
Обиды (да, это тоже незакрытые транзакции).
Вещи, которые «надо бы» починить/купить.
У меня получилось 140 пунктов. Это был мой legacy-код.
Шаг 2. Deprecation (Списание)
В коде мы помечаем устаревшие методы как @Deprecated. Мы признаем: «Мы больше это не поддерживаем». Посмотрите на свой список. 50% этих задач уже не актуальны. Вы хотели выучить испанский 3 года назад. Вам это всё еще надо? Честно? Если нет — официально «убейте» задачу. Скажите себе: «Проект закрыт. Поддержка прекращена. Ресурсы освобождены». Это дает колоссальный приток энергии.

Шаг 3. Quick Fixes (Закрытие уязвимостей)
Найдите задачи, которые занимают меньше 15 минут, но висят месяцами (записаться к врачу, оплатить штраф). Выделите один «Спринт Чистки» (суббота) и закройте их пачкой. Вы удивитесь, насколько тише станет в голове.
Шаг 4. Rewrite (Переписывание ядра)
Это самое сложное. Это работа с «багами» характера (например, «Я не умею говорить НЕТ»). Тут нужен не фикс, а переписывание модуля. Я использую метод Протокол 3.16: Рефакторинг Убеждений.
Найти старый скрипт («Если откажу — меня отвергнут»).
Написать новый скрипт («Отказ — это защита моих границ»).
Тестировать на проде (в жизни) малыми итерациями.
Вывод
Вы не «ленивый». Вы просто поддерживаете огромную кодовую базу говнокода, который сами же написали (или унаследовали от родителей). Ваша апатия — это защита сервера от перегрева.
Перестаньте требовать от себя фич. Остановите разработку. И займитесь техдолгом. Потому что, как говорят у нас: «Если вы не платите за техдолг, вы платите за него своей стабильностью».
P.S. Инструменты
Я задокументировал свои методы рефакторинга в виде сухих алгоритмов (без воды и «успешного успеха»). Всё это есть в гайде «System Diagnostics» в моем канале (ссылка в профиле).
Как провести инвентаризацию (
RAM Dump).Как безопасно «депрекейтить» обязательства.
Как переписать скрипты поведения.
Я не психолог, я инженер. И я верю в документацию, а не в магию.
vvbob
ОК, спасибо, закинул эту задачу в туду!
Systems_Engineer Автор
Осторожно, это рекурсия! :) Задача
Task: Write down all tasksдобавлена в очередь. При попытке выполнения:StackOverflowError.На самом деле, это единственная задача, у которой должен быть приоритет
Criticalи дедлайн «Сегодня». Иначе она просто станет памятником вашей прокрастинации..