Ответ
На моем последнем проекте мы внедрили системный подход к техническим долгам. Каждый квартал проводили "дни долга" — 1-2 спринта, полностью посвященные рефакторингу и устранению накопленных проблем. Приоритизацию делали по матрице влияния: оценивали, как долг влияет на производительность системы, скорость разработки новых фич и стабильность.
Пример из практики:
У нас была проблема с медленными запросами к базе данных из-за отсутствия индексов и N+1 проблем:
# Было: медленный запрос с N+1 проблемой
orders = Order.objects.filter(user_id=user_id)
for order in orders:
items = order.items.all() # Отдельный запрос для каждого заказа
# обработка...
# Стало: оптимизированный запрос с индексами и prefetch_related
orders = Order.objects
.filter(user_id=user_id)
.select_related('customer')
.prefetch_related('items')
.only('id', 'created_at', 'total_amount')
# Добавили индекс в миграции:
# CREATE INDEX idx_orders_user_id ON orders(user_id);
Все значимые изменения мы документировали в ADR (Architecture Decision Records), чтобы зафиксировать контекст принятых решений. На код-ревью особое внимание уделяли потенциальным новым долгам — например, сложной бизнес-логике в контроллерах или дублированию кода.