Как вы решали технические долги на проекте?

«Как вы решали технические долги на проекте?» — вопрос из категории Софт-скиллы, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

На моем последнем проекте мы внедрили системный подход к техническим долгам. Каждый квартал проводили "дни долга" — 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), чтобы зафиксировать контекст принятых решений. На код-ревью особое внимание уделяли потенциальным новым долгам — например, сложной бизнес-логике в контроллерах или дублированию кода.