Расскажи о неудачном проекте

«Расскажи о неудачном проекте» — вопрос из категории Софт-скиллы, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

На одном из проектов мы разрабатывали высоконагруженный API для агрегатора доставки еды на Node.js. Основные проблемы возникли из-за архитектурных просчетов на старте.

Ключевые ошибки:

  1. Монолит на Express.js: Весь функционал (ордеры, рестораны, геолокация) был в одном приложении. При пиковой нагрузке в час обеда сервис падал.
  2. Блокировка Event Loop: Синхронная обработка геокодирования адресов и расчетов маршрутов блокировала главный поток.
    // Проблемный код: синхронный вызов в обработчике запроса
    app.post('/api/order', (req, res) => {
    const route = calculateOptimalRouteSync(req.body); // Долгая синхронная операция!
    // ... остальная логика
    res.json({ success: true });
    });
  3. Прямые запросы к PostgreSQL: Отсутствие кеширования и сложные JOIN-запросы к базе данных пользователей и заказов приводили к высоким задержкам.

Что было сделано для исправления:

  • Рефакторинг в микросервисы: Выделили отдельные сервисы для обработки заказов (Nest.js), геолокации и нотификаций.
  • Асинхронные паттерны: Тяжелые вычисления вынесли в очереди (Bull.js + Redis). Геокодирование стало асинхронным.
  • Внедрение кеширования: Добавили Redis для кеширования данных ресторанов и меню, снизив нагрузку на основную БД.
  • Проактивный мониторинг: Настроили APM (Application Performance Monitoring) и нагрузочное тестирование на ранних этапах каждого релиза.

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