Все посты
PostgresArchitectureOpinion

Почему я снова и снова тянусь к скучным технологиям

Опубликовано 15 декабря 2025 г. · 4 мин чтения

Сразу оговорюсь о том, чего я не говорю

Я не говорю, что новые технологии плохие или что никогда не стоит ничего пробовать. Я использовал новые базы данных, играл с edge-рантаймами, экспериментировал с ORM, которые обещают упростить всё. Часть из этого реально интересна.

Но после нескольких лет поставки реальных продуктов — BookUp, ERP InterRail, проекты для клиентов — я снова и снова прихожу в одно место: Postgres, NestJS, TypeScript, Redis для кэширования и очередей. Примерно один и тот же стек.

Вот почему я с этим в мире.

Postgres делает всё

Я имею в виду буквально. Postgres обрабатывает:

  • Реляционные данные с внешними ключами и джойнами (очевидно)
  • JSON и JSONB столбцы когда нужна гибкая схема
  • Полнотекстовый поиск, достаточно хороший для большинства приложений
  • Геопространственные запросы через PostGIS
  • Row-level security для мультитенантности

Каждый раз, когда я думал "может, нужна отдельная база для X", честный ответ был "нет, Postgres может X." Стоимость управления одной базой данных намного ниже, чем тремя.

NestJS упрямый в правильных местах

Я строил API на Express, Fastify, Hono и NestJS. Express и Fastify отлично подходят для небольшого. По мере роста проектов приходится строить свои конвенции — dependency injection, структуру модулей, паттерны guard/middleware.

В NestJS всё это встроено. Тяжелее, но когда присоединяешься к проекту или вводишь кого-то, конвенции уже есть. DI-система позволяет тестировать логику сервиса без запуска базы данных.

Аргумент надёжности

Вот в чём дело со скучными технологиями: они ломаются скучными способами. Когда у Postgres проблема, есть ответ на StackOverflow. Когда у новой базы данных проблема, вы читаете GitHub issues трёхнедельной давности.

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

Когда я всё же тянусь к чему-то другому

Очереди: использую BullMQ на Redis. Реальное время: WebSocket когда нужно. Поиск: если основной сценарий приложения — поиск, Elasticsearch имеет смысл.

Паттерн: добавляю что-то новое, когда есть конкретная потребность, которую скучный стек реально не может хорошо закрыть. Не потому что интересно, не потому что это в тренде.

Скучное — не то же самое, что простое. Postgres сложен. NestJS сложен. Но они проверены боем, и их сложность задокументирована. Это важнее новизны, когда поставляешь реальные вещи.