Team LeadleadExperience

Расскажите, когда вам пришлось выбирать между сроком поставки и качеством инженерного решения.

Разделил задачу на «must have» и «можно отложить», выпустил MVP с документированным техническим долгом в конкретных тикетах и зафиксированным планом их закрытия с PM.

Контекст

Нам нужно было выпустить интеграцию с платёжной системой к конкретной дате — маркетинг уже анонсировал фичу партнёрам. При этом наш первоначальный план предполагал полноценную абстракцию платёжного шлюза с поддержкой нескольких провайдеров, unit и integration тесты, и graceful degradation. На реализацию в полном объёме требовалось ещё три недели, которых не было.

Анализ компромисса

Я структурировал решение через явное разделение на «must have» и «nice to have»:

  • Must have для релиза: рабочий payment flow для одного провайдера, базовая обработка ошибок, логирование транзакций, smoke-тесты критического пути.
  • Можно отложить: абстракция под несколько провайдеров, полный regression suite, мониторинг всех edge cases.

Ключевой вопрос был не «срок vs качество», а «какое минимальное качество приемлемо для production». Это принципиально разные постановки.

Что сделали

Мы выпустили версию с одним провайдером, задокументировав технический долг в трёх конкретных тикетах с описанием рисков:

  • Тикет 1: Добавить абстракцию PaymentGateway — риск: добавление второго провайдера потребует рефакторинга.
  • Тикет 2: Расширить тест-сьют — риск: регрессии могут не поймать в CI.
  • Тикет 3: Добавить circuit breaker — риск: при недоступности провайдера запросы будут висеть до таймаута.

Я согласовал с продуктовым менеджером, что эти тикеты войдут в следующий спринт — это не «однажды», а конкретное обязательство.

Что я не сделал

Я не выпустил код без тестов критического пути. Компромисс с качеством имеет пределы: код, который нельзя проверить хотя бы на happy path, в production не идёт. Это не обсуждалось.

Результат

Релиз состоялся в срок. Технический долг был закрыт в течение двух следующих спринтов. Ни одного инцидента, связанного с поспешным решением.

Подводные камни

  • Отдавать в production код без хотя бы smoke-тестов под давлением дедлайна — это не компромисс, это авантюра.
  • Не фиксировать технический долг письменно сразу — «потом разберёмся» превращается в «никогда».
  • Не получить явного согласия от PM на план закрытия долга — без договорённости тикеты будут вечно выталкиваться следующими задачами.
  • Называть «срезание углов» компромиссом — важно честно называть вещи своими именами внутри команды.
  • Принимать решение в одиночку, не информируя команду о том, что и почему упрощается.
  • Думать, что технический долг «не критичный» не накапливается — каждый такой тикет увеличивает когнитивную нагрузку на разработку.

What hurts your answer

  • Говорить, что качество всегда важнее без бизнес-контекста.
  • Срезать углы и не назвать последствия.
  • Не зафиксировать долг и не вернуться к нему.

What they're listening for

  • Мыслит trade-off-ами.
  • Умеет говорить с продуктом и менеджментом языком риска.
  • Не прячет технический долг.

Related topics