Как относишься к использованию костылей в работе?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Отношение к использованию костылей в работе
Этот вопрос касается практического подхода к решению проблем. Мой взгляд на использование костылей (workarounds, временные решения) основан на балансе между прагматизмом и долгосрочной устойчивостью системы.
Определение костыля
Костыль (Workaround) — это временное решение, которое решает проблему без адреса корневой причины. Примеры:
- Захардкодить значение вместо получения из конфига
- Добавить обход ошибки вместо её исправления
- Дублировать код вместо рефакторинга
- Использовать старое API вместо миграции на новое
Мой подход: контекстный прагматизм
Я не категорически против костылей, но использую их осознанно.
Когда костыли ОПРАВДАНЫ
1. Критическая ситуация (срочный фикс)
Если система упала на продакшене:
- Нужно быстро восстановить работоспособность
- Нельзя ждать правильного решения
- Костыль с пометкой TODO и план на исправление — нормально
Пример:
# TODO: URGENT FIX - убрать когда придёт ответ от API
if api_response is None:
return mock_data # Временно используем мок
2. Внешние зависимости
Если проблема в третьей стороне, которую мы не контролируем:
- Баг в библиотеке
- API соседней системы упал
- Проблема с сетью
Костыль в этом случае — обоснован, пока проблема не решится на их стороне.
3. Прототипирование и MVP
Когда мы проверяем идею или создаём MVP:
- Костыли приемлемы для быстрой валидации
- Потом переделываем красиво перед продакшеном
- Это называется "быстрое решение, затем перефакторинг"
4. Временные метрики и логирование
Нужно быстро отладить проблему:
print(f"DEBUG: {variable}") # Временно для отладки
Потом удаляем перед коммитом.
Когда костыли НЕДОПУСТИМЫ
1. На постоянной основе
Костыль, существующий больше спринта — это уже не костыль, это технический долг:
Неправильно:
# Костыль с 6 месяцев назад
if user.type == "special_user_that_broke_in_2024":
return special_handling()
2. Скрывающий реальную проблему
Если костыль скрывает баг, который потом взорвётся:
Плохо:
try:
process_order()
except Exception:
pass # Проблемы скрыты, потом потеря денег
3. В критичном коде безопасности
В авторизации, валидации, шифровании — NO SHORTCUTS!
4. Когда нет плана на исправление
Если нет JIRA задачи, плана и сроков — костыль превращается в постоянное решение.
Правильный процесс использования костыля
Шаг 1: Документируй
# WORKAROUND (JIRA-1234): Временный обход критичного бага
# Убрать когда поправим зависимость X версии Y
# Дедлайн: Q2 2026
if should_bypass_validation():
return handle_special_case()
Шаг 2: Создай задачу
- В JIRA, Azure DevOps или системе управления
- Опиши, что нужно исправить
- Поставь сроки (1-2 спринта максимум)
Шаг 3: Приоритизируй
- Костыль должен быть в бэклоге
- На каком-то этапе его нужно исправить
Шаг 4: Исправь
- Когда есть время, переделай правильно
- Запусти все тесты
- Удали костыль
Признаки плохого отношения к костылям
Признак 1: Нет документации Костыль на месте, но никто не знает, почему он здесь.
Признак 2: Нет JIRA задачи Нет плана исправления = костыль станет постоянным.
Признак 3: Множественные вложенные костыли Один костыль потребовал другой костыль, потом третий. Это spiral down.
Признак 4: Костыль на производстве больше года Это уже не костыль, это проблема архитектуры.
Примеры хорошего использования
Пример 1: Срочный фикс на продакшене
# HOT FIX (PROD-2024-03-28): Срочно отключили новый алгоритм
# Используем старый временно
# JIRA-5678: Переделать алгоритм к концу спринта
use_old_algorithm = True
Пример 2: Баг в библиотеке
# WORKAROUND (requests#5234): Баг в requests 2.28.0
# Monkey patch пока не выйдет 2.29.0
# Дедлайн обновления: 2 недели
if requests.__version__ == "2.28.0":
patch_requests_timeout()
Пример 3: Временное логирование
# DEBUG: Убрать перед финальным коммитом
import sys
print(f"DEBUG: response={response}", file=sys.stderr)
Мой совет команде
Балансируй между скоростью и качеством:
- Если критично — используй костыль и план исправить
- Если не критично — сделай правильно с первый раз
Правило 3 недель:
- Если костыль существует больше 3 недель без плана исправления — это проблема
- Нужна refactor задача в спринт
Документируй и трекируй:
- Каждый костыль должен иметь JIRA задачу
- Комментарий в коде с ссылкой
- Дедлайн на исправление
Не копируй костыли:
- Если видишь костыль в коде, не добавляй ещё один рядом
- Спроси, почему он там, может это уже исправлено
Заключение
Костыли — инструмент для прагматичного решения срочных проблем, но не долгосрочная стратегия. Хороший разработчик использует костыли с умом:
- Когда нужно: срочность, критичность, внешние факторы
- Как нужно: документированно, с планом на исправление
- Потом исправляет: не оставляет на продакшене на года
Технический долг от костылей может стоить дороже, чем время на правильное решение.