Стек технологий для разработки: как выбрать
Заказчику приходит предложение: «сделаем на Node.js и MongoDB» — и проверить это нечем, кроме доверия. А через год выясняется, что разработчика, который всё это писал, заменить некем, а данные, которые оказались строго табличными, живут в базе, не рассчитанной на такие связи. Мы в Code Pilots делаем продукты под процесс заказчика больше десяти лет и знаем: технологии редко бывают плохими сами по себе — они бывают выбранными не под задачу.
Если совсем коротко. Стек технологий — набор языков, фреймворков, баз данных и инфраструктуры, на которых работает продукт. Выбирают его по задаче, доступной команде и рынку найма, а не по новизне.
Практические ориентиры: под контентные и e-commerce проекты берут PHP-стек, под данные и ML — Python, под высокие нагрузки и сервисы — Go, под мобильное — Flutter или нативную разработку. Обязательные ограничения в России 2026 — локализация персональных данных и требования реестра отечественного ПО для госзаказа и КИИ.
Что такое стек технологий и из чего он состоит
Стек — это все технологии, на которых продукт написан и работает. Слово прижилось потому, что технологии складываются слоями: каждый опирается на предыдущий.
Фронтенд — то, что видит пользователь: HTML, CSS, JavaScript или TypeScript и фреймворк вроде Vue, React или Angular. Для мобильных приложений сюда же относится Flutter или нативные Swift и Kotlin.
Бэкенд — серверная логика: язык (PHP, Python, Go, Java, Node.js) и фреймворк (Symfony, Laravel, Django, Spring). Здесь живут бизнес-правила, интеграции и всё, что нельзя доверить браузеру.
Хранение данных — реляционные СУБД (PostgreSQL, MySQL), нереляционные (MongoDB), кеш и очереди (Redis, RabbitMQ, Kafka), аналитические хранилища (ClickHouse).
Инфраструктура — где и как это запускается: сервер или облако, Docker, оркестрация, CI/CD, мониторинг, резервное копирование.
Отдельная деталь, которую при обсуждении «стека» обычно упускают: инфраструктура и процессы влияют на итог не меньше выбора языка. Продукт на идеальном стеке без нормального деплоя и мониторинга ломается ровно так же, как продукт на устаревшем.
Кто выбирает стек и когда это решают
Здесь кроется первая системная ошибка. Стек часто выбирает тот разработчик, который первым взялся за проект, — по своему опыту и интересу. Решение получается техническим по форме и случайным по сути.
Правильно, когда выбор делает архитектор или технический руководитель проекта вместе с бизнесом, и делает это до старта разработки — на этапе аналитики. Потому что стек — это не только код: это стоимость поддержки, скорость найма, ограничения по нагрузке и сроки на несколько лет вперёд.
Заказчику при этом не нужно разбираться в синтаксисе. Ему нужно понимать логику решения и уметь задать три вопроса: почему именно эти технологии для нашей задачи, кого мы сможем найти на поддержку и что будет, если нагрузка вырастет в десять раз. Если внятных ответов нет, стек, скорее всего, выбран по привычке исполнителя.
Менять стек по ходу дорого: это переписывание, а не настройка. Поэтому решение принимают один раз и осознанно — и пересматривают только тогда, когда продукт упёрся в реальное ограничение, а не в чью-то усталость от технологии.
Семь критериев выбора
Набор вопросов, который закрывает большую часть решений. Порядок важен: первые три сильнее остальных.
| Критерий | Что смотреть | Чем грозит ошибка |
|---|---|---|
| Тип и логика продукта | Контентный сайт, e-commerce, портал, highload-сервис, мобильное приложение, ML-продукт | Стек упирается в потолок на первой же нетиповой задаче |
| Нагрузка и данные | Пользователи в пике, объём данных, требования к отклику | Переписывание под нагрузку через год после запуска |
| Рынок найма | Кого реально найти и заменить в вашем городе и бюджете | Продукт зависит от одного человека |
| Скорость и сроки | Есть ли готовые решения и библиотеки под задачу | Полгода на то, что делается за месяц |
| Стоимость владения | Лицензии, инфраструктура, поддержка, обновления | Смета сходится, а эксплуатация — нет |
| Требования и регулирование | 152-ФЗ, реестр отечественного ПО, отраслевые нормы | Готовый продукт нельзя ввести в эксплуатацию |
| Совместимость с существующим | Что уже работает: 1С, учётные системы, легаси-код | Интеграции дороже самой разработки |
Отдельно про модность. Технология из свежих обзоров и конференций может быть отличной — но у неё, как правило, меньше готовых библиотек, меньше специалистов и меньше опыта эксплуатации в продакшене. Для внутреннего эксперимента это допустимо, для продукта, который должен работать пять лет, — риск, который стоит осознавать.
Найм: критерий, о котором молчат
Самый недооценённый пункт. В обзорах стеков он умещается в строку «учитывайте опыт команды», хотя на практике решает больше, чем сравнение фреймворков.
Логика простая. Продукт живёт годами, разработчики меняются. Если стек распространён, замену находят за недели и она вливается в проект по знакомым правилам. Если стек экзотический, поиск растягивается на месяцы, ставки выше, а знания живут в голове одного человека — и его отпуск становится риском для бизнеса.
В российских реалиях 2026 года широкий рынок специалистов — это PHP, Python, Java, JavaScript и TypeScript, Go набрал массу и уверенно растёт. Экзотика вроде Elixir, Scala или Haskell даёт технически элегантные решения и очень узкий рынок найма: такие проекты живут, пока в них есть тот, кто их начал.
Практический вывод для заказчика: спросите у подрядчика не только «на чём сделаете», но и «сколько людей на рынке смогут это поддерживать, если мы с вами расстанемся». Ответ на второй вопрос честнее показывает риск, чем любая таблица сравнения фреймворков.
Фронтенд: Vue, React, Angular
Все три фреймворка решают одну задачу — собирают интерфейс из компонентов и управляют состоянием. Спор об их превосходстве в основном профессиональный вкус, но практическая разница есть.
React — самый большой рынок и экосистема, много готовых решений, широкий выбор специалистов. Цена — свобода в архитектуре: одинаковых проектов на React не бывает, и качество сильно зависит от команды, которая задала правила.
Vue — более цельный и предсказуемый: в нём меньше способов сделать одно и то же, порог входа ниже, код разных команд похож. Именно поэтому Vue и TypeScript — наш продуктовый выбор: на длинных проектах предсказуемость дороже гибкости.
Angular — самый структурированный и тяжёлый, со встроенными решениями почти на всё. Уместен в крупных корпоративных системах с большими командами и долгим жизненным циклом.
Отдельно вопрос, который влияет на SEO и скорость: рендеринг. Классическое одностраничное приложение (SPA) отдаёт браузеру пустую страницу и собирает её скриптом — для внутренних систем нормально, для публичного сайта с поисковым трафиком нужен серверный рендеринг или предгенерация страниц. Это решается на уровне выбора стека, а не «потом оптимизируем».
Бэкенд: PHP, Python, Go, Node.js, Java — под какие задачи
Здесь больше всего мифов. «PHP умер», «Go для всего», «Node.js потому что один язык на фронте и бэке». Реальность прозаичнее: у языков разные сильные стороны, и выбор диктует задача.
| Язык / стек | Где силён | Что учесть |
|---|---|---|
| PHP (Symfony, Laravel) | Веб-продукты, e-commerce, порталы, админки, интеграции; огромная экосистема и рынок найма | Не для тяжёлых вычислений и не для ML |
| Python (Django, FastAPI) | Данные, аналитика, ML и AI-функции, быстрые сервисы и прототипы | Медленнее на высоких нагрузках без оптимизации |
| Go | Высоконагруженные сервисы, шлюзы, обработка потоков, микросервисы | Меньше готовых библиотек под прикладную логику |
| Node.js | Реальное время (чаты, уведомления), API-шлюзы, единый язык с фронтендом | Тяжёлые вычисления блокируют обработку |
| Java / Kotlin | Крупные корпоративные системы, банки, долгий жизненный цикл | Дороже и медленнее в разработке на малых задачах |
Про PHP отдельно, потому что вокруг него больше всего снобизма. Современный PHP восьмой версии с Symfony или Laravel — это строгая типизация, зрелые инструменты и очень большой рынок специалистов. На нём работает значительная часть российского веба, включая нагруженные проекты. Он действительно не для машинного обучения и не для обработки миллионов событий в секунду — для этого в стек добавляют Go или Python, а не переписывают всё.
Нормальная практика на сложных продуктах — не один язык, а разделение по ролям: прикладная логика и админка на PHP, тяжёлый поток данных на Go, ML-часть на Python. Как эти части устроены внутри и почему их разделяют, мы разбирали в материале про серверную часть продукта.
Базы данных: не «SQL против NoSQL»
Постановка «выбрать между SQL и NoSQL» устарела: в реальном продукте обычно есть и то и другое, каждое под свою задачу.
| Тип хранилища | Для чего | Примеры |
|---|---|---|
| Реляционная СУБД | Основные данные со связями: заказы, клиенты, документы, деньги | PostgreSQL, MySQL, Postgres Pro |
| Документная | Гибкие структуры без жёсткой схемы: логи событий, каталоги с разными атрибутами | MongoDB |
| Кеш и очереди | Ускорение чтения, фоновые задачи, развязка сервисов | Redis, RabbitMQ, Kafka |
| Аналитическое хранилище | Отчёты и аналитика по большим объёмам | ClickHouse |
| Поиск | Полнотекстовый поиск, фасеты, подсказки | OpenSearch, Elasticsearch |
Практическое правило: основа почти всегда реляционная. Данные бизнеса связанные — заказ принадлежит клиенту, позиция заказа ссылается на товар, — и целостность здесь важнее гибкости. Мы по умолчанию используем PostgreSQL: он бесплатный, зрелый, есть российская сертифицированная сборка Postgres Pro для проектов с требованиями к реестру.
Типичная ошибка — взять документную базу «для гибкости» под строго табличные данные. Через год в приложении появляется собственный самописный контроль связей, который в реляционной СУБД работал бы из коробки.
Мобильный стек: Flutter или нативная разработка
Для мобильных приложений выбор сводится к двум путям, и разница здесь не вкусовая, а экономическая.
Нативная разработка — Swift для iOS и Kotlin для Android. Максимальный доступ к возможностям платформы и предсказуемое поведение, но две кодовые базы: две команды, два бюджета, двойные правки на каждое изменение.
Кроссплатформенная разработка на Flutter — одна кодовая база на обе платформы, интерфейс неотличим от нативного, скорость выше. Это наш основной мобильный стек; нативные вставки добавляем там, где нужны специфические возможности устройства.
Подробный разбор с плюсами, минусами и случаями, когда нативка действительно оправдана, — в отдельном материале про нативную, гибридную и кроссплатформенную разработку. Коротко: если у вас не приложение уровня системной утилиты или тяжёлой графики, Flutter закрывает задачу дешевле при том же качестве.
React Native и Kotlin Multiplatform на рынке есть, и мы честно говорим, что не работаем с ними: держать глубокую экспертизу в трёх кроссплатформенных технологиях одновременно нельзя, а поверхностная в продакшене опаснее её отсутствия.
Инфраструктура, 152-ФЗ и реестр: что ограничивает выбор
Технический выбор в России ограничен не только задачей. Два ограничения нужно проверять до проектирования, а не после.
Локализация персональных данных. Данные российских пользователей должны обрабатываться на серверах в России. Практически это означает: основное хранилище — в российском облаке или на своём железе в РФ. Зарубежные облака в контуре продукта с персональными данными — прямой юридический риск.
Реестр отечественного ПО. Для госкомпаний, объектов КИИ и части закупок нужны решения из реестра Минцифры, а требования к нему в 2026 году ужесточились. Это влияет на выбор СУБД (Postgres Pro), операционных систем (Astra Linux, РЕД ОС) и отдельных компонентов инфраструктуры.
Из российских облаков в проектах обычно фигурируют Yandex Cloud, VK Cloud и Cloud.ru — они закрывают базовые потребности: виртуальные машины, управляемые базы, объектное хранилище, Kubernetes.
Инфраструктурный минимум, который стоит требовать в любом проекте независимо от стека: Docker для повторяемого окружения, автоматический деплой через CI/CD, мониторинг с алертами, регулярные бэкапы с проверкой восстановления. Отсутствие последнего пункта обнаруживается всегда в один и тот же момент.
Типовые стеки под типовые задачи
Готовые ориентиры, от которых можно отталкиваться в разговоре с подрядчиком.
| Задача | Разумный стек | Почему так |
|---|---|---|
| Контентный сайт, лендинг | PHP или готовая CMS, Vue при интерактиве | Быстро, дёшево, много специалистов |
| Интернет-магазин | PHP (Symfony/Laravel) + Vue + PostgreSQL + Redis | Зрелая экосистема e-commerce, интеграции с 1С |
| Веб-приложение, портал, ЛК | PHP или Python на бэкенде + Vue + PostgreSQL + Docker | Сложная логика, роли, интеграции |
| Highload-сервис | Go + PostgreSQL + Kafka + Kubernetes | Держит поток, экономит на железе |
| MVP стартапа | Один язык на всё (PHP или Python) + Vue | Скорость важнее оптимальности |
| Мобильное приложение | Flutter, нативка под особые задачи | Одна кодовая база вместо двух |
| ML- и AI-функции | Python + очередь + отдельный сервис | Вся экосистема ML на Python |
| Enterprise-интеграции | PHP/Java + брокер + интеграционный слой | Много систем, гарантии доставки |
Аббревиатуры вроде LAMP, MERN и JAMstack — это те же наборы под конкретные ниши, а не универсальные рецепты. Полезно помнить: почти любой серьёзный продукт со временем становится гибридом, где под каждую задачу используется подходящий инструмент.
Что делать с легаси: когда переписывать не нужно
Отдельный сюжет, с которым к нам приходят чаще всего: «у нас старый код, нам говорят переписать с нуля». Иногда это правда, чаще — нет.
Переписать всё с нуля — самый дорогой и рискованный путь. Пока команда пишет новую версию, продукт не развивается, а бизнес живёт на старом; при этом новая система повторяет незадокументированную логику старой, о существовании которой узнают уже после запуска. Через два года можно получить те же проблемы, только с новыми технологиями.
Рабочая альтернатива — постепенное вытеснение: новые модули пишутся на новом стеке рядом со старым, трафик и функции переносятся частями, старая система постепенно теряет ответственность и в какой-то момент отключается. Дольше по календарю, безопаснее по риску, и продукт всё это время работает.
Переписывать с нуля стоит, когда технология больше не поддерживается и не получает обновлений безопасности; когда доработки стоят дороже, чем создание с нуля; когда нельзя найти людей, способных это поддерживать. Решается это не спором, а замером: аудит кода и архитектуры показывает, что можно переиспользовать, а что действительно тупик.
Наш стек и почему он такой
Мы не пытаемся уметь всё — держим глубокую экспертизу в ограниченном наборе и говорим об этом прямо.
Бэкенд — PHP с Symfony и Laravel как основной, Go для нагруженных сервисов, Python для ML-части и обработки данных. Фронтенд — Vue.js и TypeScript, с серверным рендерингом там, где нужен поисковый трафик. Мобильное — Flutter, нативные Swift и Kotlin под особые задачи. Данные — PostgreSQL как основа, Redis и очереди, ClickHouse под аналитику. Инфраструктура — Docker, CI/CD, российские облака.
Чего мы не берём: React как продуктовый стек (наш выбор — Vue), React Native и Kotlin Multiplatform, десктопные приложения на Electron — вместо них предлагаем PWA, — а также Bitrix в роли платформы для продукта. Это не оценка технологий, а честная граница компетенции.
Про деньги, чтобы разговор был предметным. Если выбор стека сам по себе — задача (нужно спроектировать решение, сравнить варианты или проверить смету другого подрядчика), это консалтинг: 300–900 тыс. ₽ в зависимости от объёма. Аудит существующего кода и архитектуры — 200–600 тыс. ₽. Разработка веб-продукта начинается от 1 млн ₽, продукта под сложный бизнес-процесс — от 1,7 млн ₽.
Точная сумма зависит от задачи, а оценка проекта у нас бесплатная и быстрая: опишите, что нужно сделать — вернёмся с архитектурным решением и сметой по этапам.
Ошибки при выборе стека
Выбирать по резюме исполнителя. Подрядчик предлагает то, что умеет сам. Это нормально, если его стек подходит задаче, и плохо, если задачу подгоняют под стек.
Гнаться за новизной. Технология с прошлогодней конференции может оказаться прекрасной — а может лишиться поддержки. Для продукта на годы важнее зрелость и размер сообщества.
Игнорировать найм. Стек, на котором в вашем регионе три специалиста, превращает команду в единственную точку отказа.
Собирать зоопарк. Пять языков в одном небольшом продукте означают пять компетенций в поддержке. Разделение по задачам оправдано на масштабе, а не на старте.
Забыть про требования закона. Локализация данных и реестр отечественного ПО — не бюрократия, а условия ввода в эксплуатацию. Проверять их надо до проектирования.
Считать только разработку. Лицензии проприетарных СУБД, инфраструктура, обновления и поддержка иногда стоят больше самой разработки за первые три года.
Вопросы, которые стоит задать подрядчику
Короткий чек-лист, чтобы проверить обоснованность предложенного стека, не будучи техническим специалистом:
- Почему именно эти технологии для нашей задачи, а не более распространённые?
- Сколько специалистов на рынке смогут поддерживать это, если мы расстанемся?
- Что будет со стеком, если нагрузка вырастет в десять раз?
- Какие лицензии платные и сколько стоит инфраструктура в год?
- Где будут храниться персональные данные и подходит ли решение под требования реестра, если они к нам применимы?
- Как вы обеспечите повторяемость окружения, деплой и бэкапы?
- Что из существующих у нас систем и кода можно переиспользовать?
Если на большинство вопросов отвечают уверенно и с обоснованием — стек, скорее всего, выбран под задачу. Если ответы сводятся к «это современно и всем нравится», стоит попросить второе мнение.
Часто задаваемые вопросы
Это все технологии, на которых работает продукт: язык и фреймворк на сервере, фреймворк интерфейса, база данных, инфраструктура для запуска. Название пошло от того, что технологии складываются слоями. Для заказчика важна не сама аббревиатура стека, а три вещи: подходит ли он задаче, кого можно найти на поддержку и сколько стоит владение.
Универсально лучшего нет. Для большинства бизнес-приложений с логикой, ролями и интеграциями рабочий вариант — PHP с Symfony или Laravel либо Python, фронтенд на Vue или React, PostgreSQL как база, Redis для кеша и очередей, Docker для окружения. Если ключевое требование — очень высокая нагрузка, часть сервисов делают на Go.
Не как самоцель. Новые технологии дают выигрыш в конкретных сценариях, но у них меньше готовых библиотек, меньше специалистов и меньше опыта эксплуатации. Для продукта, который должен работать годами, надёжнее зрелые технологии с большим сообществом, а новизну добавлять точечно — там, где она решает конкретную задачу.
Можно, но это переписывание, а не настройка: дорого и рискованно. Разумный способ — постепенное вытеснение: новые модули на новом стеке пишутся рядом со старым, функции переносятся частями, продукт всё это время работает. Переписывание с нуля оправдано, когда технология не поддерживается или её некому поддерживать.
Задайте пять вопросов: почему эти технологии для вашей задачи, сколько специалистов на рынке смогут это поддерживать, что будет при десятикратном росте нагрузки, какие лицензии и инфраструктура платные, где будут храниться персональные данные. Уверенные обоснованные ответы — хороший признак; «это современно» — повод получить второе мнение.
Разработка с Code Pilots
Code Pilots — студия заказной разработки полного цикла: веб- и мобильные продукты с нетривиальной бизнес-логикой, интеграциями и высокими нагрузками. Мы держим глубокую экспертизу в ограниченном наборе технологий — Symfony и Laravel, Go, Python, Vue.js, Flutter, PostgreSQL, Docker — и подбираем решение под задачу, а не задачу под свой стек. Там, где технология не наша, говорим об этом прямо.
Внутри — сильная in-house команда: аналитики с отраслевой экспертизой, продуктовые дизайнеры, разработчики, QA и DevOps. Мы начинаем не с нуля: часть каркасов, админ-панелей и решений по автоматизации уже готова, поэтому архитектурное решение и рабочий прототип появляются быстро — и на них видно, выдержит ли выбранный стек вашу задачу.
Расскажите, что нужно построить или что уже болит в существующем продукте, — предложим стек и оценим объём. Обсудить проект →