Alex.Kuznetsov907
New member
Когда я в очередной раз открывал список языков и фреймворков перед запуском своего второго проекта, я понял, что главная ошибка в выборе стека — это не сам стек, а его избыточность. Мы с командой из трёх человек собирались писать сервис, который по сути был CRUD-приложением с очередями задач, а в итоге неделю спорили про микросервисы, Kubernetes и графовую базу данных. Сейчас я подхожу к этому иначе: сначала формулирую продуктовое требование в одном предложении, потом ищу минимальный набор инструментов, который закрывает его целиком, и только после этого смотрю, что вырастет через год.
Нажать чтобы Перейти на сайт
Отдельно про язык. В 2025 году выбор между Python, TypeScript, Go и Kotlin редко бывает техническим — чаще это выбор рынка найма и экосистемы. Python остаётся лучшим вариантом для ML, данных и быстрых прототипов, потому что вокруг него всё ещё самая большая библиотечная база и самое понятное сообщество. TypeScript я выбираю почти всегда, когда продукт уходит в веб: единая кодовая база между фронтендом и бэкендом, строгая типизация и огромное количество готовых решений ускоряют разработку в разы. Go дал нам в одном проекте простой деплой и предсказуемую производительность, и я не жалею об этом выборе для высоконагруженного бэкенда, хотя порог входа для новичков выше.
Базы данных — то место, где я больше всего перестрадал. Postgres с хорошо настроенными индексами и jsonb-полями закрывает порядка девяноста процентов задач, которые мы когда-либо решали, и это дешевле, быстрее и понятнее, чем поднимать отдельную NoSQL-систему ради одной фичи. К индексам я отношусь серьёзно: добавление составного индекса по полям, по которым идут фильтры, один раз ускорило наш отчёт в сорок раз. ClickHouse и другие аналитические хранилища имеет смысл подключать, когда появляется реальная потребность в агрегациях по миллионам событий, а не заранее.
Инфраструктура в 2025 году стала заметно проще. Вместо самописных скриптов развёртывания мы используем контейнеры и托管-платформы, которые берут на себя TLS, бэкапы и мониторинг, и это позволяет небольшой команде держать в штате инженера, а не пятерых. Наблюдаемость я теперь закладываю в стек с первого дня: структурированные логи, метрики и трейсинг стоят недорого, а экономят недели на расследовании инцидентов. Отдельно настоятельно советую сразу определиться с очередями задач и ретраями — большинство «загадочных» багов в асинхронных системах вызвано отсутствием идемпотентности.
Узнать подробнее →
Ещё один принцип, который я вынес из неудачных запусков: сэкономить нужно не на том, что дорого чинить, а на том, что легко заменить. Выбор базы данных мы делали так, чтобы через год её можно было мигрировать без остановки продакшена, а логику продукта держали в прикладном слое, а не в StoredProcedure. Не стоит экономить на тестировании и непрерывной интеграции: цена ошибки в продакшене кратно превышает неделю на настройку пайплайна. И обязательно оставляйте время на документацию — стартапы живут дольше, чем кажется, а знание, почему в марте выбрали именно этот фреймворк, через год никто не вспомнит.
А как выбирали стек вы? Расскажите, какое решение оказалось удачным, а какое пришлось переписывать, и что вы бы добавили к этому чек-листу.
По теме советую почитать: КРАКÉN: где найти официальный сайт и заказать одежду с доставкой
Отдельно про язык. В 2025 году выбор между Python, TypeScript, Go и Kotlin редко бывает техническим — чаще это выбор рынка найма и экосистемы. Python остаётся лучшим вариантом для ML, данных и быстрых прототипов, потому что вокруг него всё ещё самая большая библиотечная база и самое понятное сообщество. TypeScript я выбираю почти всегда, когда продукт уходит в веб: единая кодовая база между фронтендом и бэкендом, строгая типизация и огромное количество готовых решений ускоряют разработку в разы. Go дал нам в одном проекте простой деплой и предсказуемую производительность, и я не жалею об этом выборе для высоконагруженного бэкенда, хотя порог входа для новичков выше.
Базы данных — то место, где я больше всего перестрадал. Postgres с хорошо настроенными индексами и jsonb-полями закрывает порядка девяноста процентов задач, которые мы когда-либо решали, и это дешевле, быстрее и понятнее, чем поднимать отдельную NoSQL-систему ради одной фичи. К индексам я отношусь серьёзно: добавление составного индекса по полям, по которым идут фильтры, один раз ускорило наш отчёт в сорок раз. ClickHouse и другие аналитические хранилища имеет смысл подключать, когда появляется реальная потребность в агрегациях по миллионам событий, а не заранее.
Инфраструктура в 2025 году стала заметно проще. Вместо самописных скриптов развёртывания мы используем контейнеры и托管-платформы, которые берут на себя TLS, бэкапы и мониторинг, и это позволяет небольшой команде держать в штате инженера, а не пятерых. Наблюдаемость я теперь закладываю в стек с первого дня: структурированные логи, метрики и трейсинг стоят недорого, а экономят недели на расследовании инцидентов. Отдельно настоятельно советую сразу определиться с очередями задач и ретраями — большинство «загадочных» багов в асинхронных системах вызвано отсутствием идемпотентности.
Ещё один принцип, который я вынес из неудачных запусков: сэкономить нужно не на том, что дорого чинить, а на том, что легко заменить. Выбор базы данных мы делали так, чтобы через год её можно было мигрировать без остановки продакшена, а логику продукта держали в прикладном слое, а не в StoredProcedure. Не стоит экономить на тестировании и непрерывной интеграции: цена ошибки в продакшене кратно превышает неделю на настройку пайплайна. И обязательно оставляйте время на документацию — стартапы живут дольше, чем кажется, а знание, почему в марте выбрали именно этот фреймворк, через год никто не вспомнит.
А как выбирали стек вы? Расскажите, какое решение оказалось удачным, а какое пришлось переписывать, и что вы бы добавили к этому чек-листу.