Сайт или веб-приложение: что вы на самом деле строите
Начните с разграничения, от которого зависит всё остальное. Сайт показывает информацию — человек читает, иногда заполняет форму и уходит. Веб-приложение выполняет работу: пользователь входит в аккаунт, создаёт и меняет данные и возвращается завтра, чтобы продолжить с того места, где остановился. SaaS — это веб-приложение, которое вы сдаёте в аренду многим клиентам сразу: изолированные аккаунты и регулярные платежи.
Это не игра словами. Ярлык задаёт бюджет, сроки и риск. Сайт-визитку можно выпустить за пару недель. Продукт с авторизацией, ролями, базой данных, которая не имеет права терять записи, и платежами, которые не должны списывать деньги дважды, — совсем другая история.
Быстрая проверка: что вам нужно
- Если ценность в том, чтобы читать контент, вам нужен сайт.
- Если ценность в том, чтобы что-то делать — вести учёт, считать, управлять, работать вместе, — вам нужно веб-приложение.
- Если вы планируете брать с многих клиентов подписку за один и тот же инструмент, вы строите SaaS.
Большинство основателей понимают, что им нужно приложение, в тот момент, когда произносят: «а потом пользователь сохранит это и вернётся». Одна эта фраза подразумевает аккаунты, хранение, права доступа и постоянную поддержку, которой у статичной страницы нет. Когда всё это нужно собрать целиком, разработка под ключ избавляет от необходимости сшивать пятерых фрилансеров, каждый из которых отвечает за свой фрагмент.
Продуктовое исследование и ТЗ, которое окупается
До первой строки кода нужна ясность: кто ваш пользователь, какую задачу он «нанимает» продукт решить и как вы поймёте, что получилось. Этот этап называют продуктовым исследованием, и пропустить его — самый дорогой способ сэкономить.
Исследование отвечает на простые вопросы. У кого сегодня есть эта проблема и чем он пользуется вместо вашего продукта? Какой один сценарий, будь он быстрым и надёжным, заставил бы человека перейти к вам? Что должно быть верным, чтобы он заплатил? Запишите ответы. Расплывчатые цели рождают расплывчатый софт.
Что на самом деле входит в хорошее ТЗ
Техническое задание — не роман, а рабочая договорённость. Полезные ТЗ описывают:
- роли пользователей и то, что каждой роли разрешено видеть и делать;
- ключевые экраны и доступные на них действия;
- данные, которые вы храните, и правила, которые держат их в порядке;
- внешние сервисы, от которых вы зависите, — платежи, почта, карты;
- то, что не обсуждается, — право, безопасность, скорость — в виде измеримых условий.
Обратите внимание, чего здесь нет: попиксельного дизайна и выбора фреймворка. ТЗ фиксирует намерение, а не реализацию. По нему две разные команды должны собрать примерно один и тот же продукт, а вы — честно сказать, готова функция или нет.
Относитесь к исследованию как к вложению, а не к формальности. Полдня на то, чтобы убрать двусмысленную фразу, экономят неделю на постройку не того.
Объём MVP: искусство отрезать правильное
MVP — минимально жизнеспособный продукт — это не дешёвый и не сломанный продукт. Это самая маленькая версия, которая приносит реальную пользу реальному пользователю и учит вас тому, чего не узнать из презентации.
Сложность не в том, чтобы добавлять функции, а в том, чтобы их отрезать. Каждая выпущенная функция — это то, что вы будете проектировать, тестировать, защищать, документировать и поддерживать вечно. Поэтому вопрос к каждому пункту прямой: если убрать это, получит ли ранний пользователь свою главную ценность? Если да — режьте или откладывайте.
Простой способ определить объём
- Назовите единственный сценарий, ради которого вы существуете. Защищайте его.
- Выпишите всё остальное. Разложите на «нужно для этого сценария» и «было бы приятно».
- Выпустите первый список. Второй отправьте в бэклог, который вам разрешено игнорировать.
Что обычно безопасно вырезать из первого релиза: сложные иерархии ролей сверх двух, чат внутри продукта, бесконечные экраны настроек, нативные мобильные приложения и аналитические дашборды для клиента. Всё это добавляется, когда спрос доказан.
Когда мы определяли объём ранних релизов — например, в работе над сервисом коротких ссылок, — дисциплина была та же: одна задача, сделанная хорошо, лучше десяти, сделанных наполовину. Компактный MVP держит кодовую базу небольшой, а значит, вы сможете быстро сменить курс — а менять его придётся.
Выбор стека: фронтенд, бэкенд, база, авторизация, платежи
Лучший стек — скучный, тот, что ваша команда умеет выпускать и поддерживать. Новизна — это налог, который вы платите в три часа ночи, когда что-то ломается. И всё же несколько принципов помогают выбрать.
Фронтенд
Для приложения с большим количеством интерактивного состояния — дашборды, редакторы, обновления в реальном времени — компонентный фреймворк оправдывает себя. Для контентных продуктов страницы, отрисованные на сервере, грузятся быстрее и лучше ранжируются. Многие команды выбирают фреймворк, который умеет и то и другое.
Бэкенд и база данных
Берите язык бэкенда, который команда уже знает. Реляционная база данных — безопасный выбор по умолчанию: она задаёт структуру, поддерживает транзакции и не теряет ту запись, потерять которую вы не можете себе позволить. Другие хранилища подключайте, только когда появляется конкретная нужда — кэш, поиск, очереди.
Авторизация и платежи
Не пишите авторизацию и обработку карт с нуля. Используйте проверенного провайдера идентификации или хорошо проаудированную библиотеку для авторизации и известный платёжный сервис для денег. Они уже решили крайние случаи — сброс пароля, фрод, возвраты, налоги, — которые иначе съедят вашу дорожную карту. Ваша задача — аккуратно интегрировать, а не изобретать доверие.
Прагматичное правило: выберите наименьший набор технологий, который закрывает сегодняшние требования с запасом на завтра. Каждый лишний инструмент — это то, что нужно патчить, мониторить и под что нанимать людей.
Архитектура и масштабируемость простыми словами
Архитектура — это просто набор решений, которые дорого менять потом. Сделайте правильно несколько крупных, и остальное останется гибким.
Начинайте с модульного монолита — одного хорошо организованного приложения, — а не с флота микросервисов. Микросервисы решают проблемы организационного масштаба, которых у раннего продукта ещё нет, зато с первого дня добавляют сетевые сбои, сложность деплоя и боль отладки. Вынести сервис можно позже, когда реальное узкое место само подскажет где.
Что на самом деле значит «масштабируемо»
Масштабируемость — не загадочное свойство, которое покупают заранее. Это способность выдержать больше нагрузки без переписывания. На практике она складывается из нескольких привычек:
- держите приложение без состояния, чтобы запускать несколько копий за балансировщиком;
- уносите медленную работу — отправку писем, генерацию отчётов — в фоновые задачи;
- кэшируйте дорогое, что редко меняется;
- добавляйте индексы в базу раньше, чем серверы.
Адтех и маркетплейсы показывают это наглядно. Платформы вроде рекламной сети держат всплески трафика тем, что сначала измеряют, а потом оптимизируют тот единственный запрос, который реально болит, а не переделывают всё. Преждевременное масштабирование — просто ещё один способ потратить деньги на проблему, которой у вас пока нет.
UX для дашбордов, аккаунтов и повседневной работы
Потребительские сайты борются за первый клик. Продукты борются за сотый. Ваши пользователи живут внутри приложения, поэтому важен скучный, повторяющийся опыт: вошёл, нашёл нужное, сделал задачу, доверился результату.
Проектируйте под возвращающегося пользователя
- Делайте главное действие на каждом экране очевидным и единственным.
- Показывайте состояние ясно: что сохранено, что в процессе, что упало и как это починить.
- Уважайте пустой экран: новый аккаунт должен учить, а не смотреть в пустоту.
- Держите навигацию стабильной, чтобы формировалась мышечная память.
Дашборды соблазняют команду впихнуть все цифры на один экран. Сопротивляйтесь. Хороший дашборд отвечает на один вопрос с первого взгляда и позволяет провалиться в детали за остальным. Если подсвечено всё — не подсвечено ничего.
Сценарии аккаунта и биллинга требуют особой заботы, потому что касаются денег и доверия. Маркетплейсы вроде биржи фриланса живут или умирают в зависимости от того, понимает ли пользователь свой баланс, счета и права, не написав в поддержку. Ясность здесь — не украшение, а удержание.
Безопасность и данные, на которых нельзя ошибаться
Безопасность — не функция, которую добавляют в конце. Это набор умолчаний, которые вы держите с первого коммита. Хорошая новость: большинство взломов — из короткого списка предотвратимых ошибок.
- Никогда не доверяйте вводу. Проверяйте на сервере всегда, даже если браузер уже проверил.
- Используйте параметризованные запросы, чтобы текст пользователя никогда не стал командой.
- Храните пароли только в виде стойких хэшей — никогда в открытом виде, никогда обратимо.
- Ставьте проверку прав на каждое действие: «вошёл» — не то же самое, что «имеет право».
- Раздавайте всё по HTTPS и держите зависимости обновлёнными.
Относитесь к данным как к ответственности
Собирайте минимум необходимого. Данные, которые вы не храните, не могут утечь. Про то, что храните, знайте: где это лежит, кто имеет доступ и как вы это удалите, если пользователь попросит. Делайте резервные копии регулярно и — вот что все пропускают — реально проверяйте, что можете восстановиться. Бэкап, из которого вы ни разу не восстанавливались, — это надежда, а не план.
Если вы работаете с платежами или персональными данными, действуют требования приватности и локальные правила. Закладывайте их рано; встраивать согласие, выгрузку и удаление данных в зрелый продукт больно и дорого.
Интеграции и API: ваш продукт — не остров
Современные продукты скорее собирают, чем пишут. Платежи, почта, поиск, карты, аналитика, чат — каждый из них сервис, который кто-то другой держит лучше, чем вы смогли бы в этом году. Ваша ценность — в сценарии, который их связывает, а не в переписывании каждого.
Потребляйте интеграции защищённо
Любой внешний сервис рано или поздно окажется медленным или упадёт. Планируйте это. Ставьте тайм-ауты, повторяйте с умом и падайте так, чтобы пользователь понял. Никогда не позволяйте сбою третьей стороны тихо испортить ваши данные или заморозить приложение.
Проектирование собственного API
Рано или поздно вы откроете API — для мобильного клиента, партнёра или собственного фронтенда. Несколько привычек держат его в порядке:
- будьте последовательны в именовании, структуре и ошибках, чтобы вызывающий угадывал следующий эндпоинт;
- версионируйте с самого начала, чтобы развиваться, не ломая пользователей;
- ставьте аутентификацию и лимит запросов на каждый маршрут;
- документируйте по ходу, а не потом.
Считайте модель данных контрактом. Как только другая система начинает зависеть от поля, изменить его — это уже переговоры. Хороший повод держать поверхность маленькой и продуманной.
Тестирование и QA, которые ловят проблемы раньше пользователей
Тестирование — не про доказательство, что код идеален. Оно про способность менять его завтра без страха. Именно эта уверенность позволяет маленькой команде двигаться быстро годами, а не месяцами.
Разумная пирамида тестов
- Много быстрых юнит-тестов на логику, которая обязана быть верной, — цены, права, расчёты.
- Меньше интеграционных тестов, проверяющих, что части работают вместе: приложение правильно общается с базой и платёжной песочницей.
- Горстка сквозных тестов, проходящих критические пути пользователя: регистрация, ключевая задача, оплата.
Автоматизируйте то, что иначе повторяли бы руками. Ручной QA всё ещё важен, но берегите человеческое внимание для суждения — «ощущается ли это правильно», «понятен ли текст», — а не для пятидесятого клика по одной и той же форме входа.
Добавляйте тест каждый раз, когда баг сбежал в продакшн. Баги ходят семьями: у того, что вы починили, есть родня. Тест — это способ гарантировать, что одна и та же поломка не выйдет дважды, и заодно самая дешёвая документация того, как система должна себя вести.
Запуск и аналитика: выйти в свет, не оставшись в темноте
Запуск — не один драматичный момент, а управляемая последовательность. Сначала выкатите на себя, потом на горстку дружелюбных пользователей, потом на более широкий круг. Каждый шаг даёт живую обратную связь, пока радиус поражения от ошибки остаётся маленьким.
Ставьте измерения до запуска, а не после
Нельзя улучшить то, чего не видишь. До прихода реальных пользователей поставьте три пары глаз:
- Продуктовая аналитика — какими функциями пользуются, где отваливаются, как выглядит путь к активации.
- Мониторинг ошибок — чтобы о сломанной странице узнавали вы, а не твитящий клиент.
- Метрики производительности — реальное время загрузки у реальных людей, а не лабораторная цифра.
Уважайте приватность, пока измеряете: собирайте то, что влияет на решение, а не всё, что технически можете. И договоритесь заранее об одном-двух числах, которые определяют успех релиза, — активация, удержание, конверсия, — чтобы рулить по сигналу, а не спорить об ощущениях.
День после запуска — это когда продукт по-настоящему начинается. Наблюдайте, разговаривайте с пользователями и чините главное трение прежде, чем добавлять новое.
Стоимость, сроки и ошибки, которые их раздувают
Два честных ответа сразу: никто не оценит продукт точно по идее в одну строку, и цифра определяется не тем, «сколько функций», а тем, сколько неопределённости и риска несёт каждая функция. Обычный вход стоит недорого; собственный биллинг с пропорциональными списаниями и налогами — нет.
Что на самом деле определяет стоимость и сроки
- Ясность объёма — расплывчатые требования это самый скрытый расход.
- Интеграции с капризными третьими сторонами и их процессами согласования.
- Нефункциональные требования: высокая доступность, строгий комплаенс, тяжёлая нагрузка.
- Амбиции дизайна — уникальные интерфейсы дороже чистых и привычных.
- Непрерывность команды — перезапуски и передачи тихо жгут бюджет.
Ошибки, которые раздувают и то и другое
Классика повторяется на каждом проекте. Строить на миллион пользователей в первый день. Добавлять функции, которых никто не просил, пока ядро остаётся сырым. Пропустить исследование, а потом платить за это переделками. Выбирать экзотичную технологию ради резюме, а не ради продукта. И откладывать безопасность и тесты на «потом», которое не наступает.
Если нужна обоснованная оценка, а не догадка, самый быстрый путь — короткий разговор об объёме. Расскажите про один важный сценарий, и мы поможем спланировать реалистичный бюджет и сроки вокруг него.
Ваш чек-лист запуска MVP
Используйте это как финальный проход перед выходом в свет. Если честно ставите галочку у каждой строки — вы готовы. Если нет — вы нашли следующий список задач.
Перед запуском
- Единственный ключевой сценарий работает от начала до конца — и на медленном телефоне, и на быстром ноутбуке.
- Регистрация, вход, сброс пароля и выход ведут себя правильно.
- Платежи протестированы на реальных крайних случаях: отказ, повтор, возврат.
- Каждый маршрут проверяет и аутентификацию, и права.
- Ввод валидируется на сервере; запросы параметризованы.
- HTTPS обязателен, а секреты вынесены из кода.
- Резервные копии делаются автоматически, и вы успешно восстановились из одной.
- Мониторинг ошибок, продуктовая аналитика и проверка доступности работают.
- Пустой экран учит нового пользователя, с чего начать.
- Вы знаете ту единственную метрику успеха, за которой будете следить на этой неделе.
Сразу после запуска
- Следите за ошибками и производительностью ежедневно первые две недели.
- Говорите с самыми первыми пользователями и записывайте их точные слова.
- Чините главную точку трения прежде, чем строить что-то новое.
- Держите короткий безжалостный бэклог и защищайте ядро.
Первый релиз — это начало, а не памятник. Выпустите самую маленькую честную версию, учитесь на реальном использовании и дайте продукту заработать следующую функцию. Этот цикл — построить, измерить, научиться, повторить — и есть то, как на самом деле делают долговечный софт.
Частые вопросы
Чем веб-приложение отличается от сайта и SaaS?
Сайт в основном показывает информацию для чтения. Веб-приложение выполняет работу: пользователи входят, создают и меняют данные и возвращаются со временем. SaaS — это веб-приложение, которое продают многим клиентам по подписке, с изолированными аккаунтами и регулярными платежами. Чем больше пользователи «делают», а не «читают», тем нужнее приложение.
Сколько времени занимает разработка MVP?
Универсального числа нет, но сфокусированный MVP вокруг одного ключевого сценария измеряется неделями и парой месяцев, а не годами. Срок растёт с числом ролей, интеграций и нефункциональных требований вроде комплаенса. Жёсткий объём — самый сильный рычаг для скорости.
Сколько стоит разработка веб-приложения?
Стоимость определяется неопределённостью и риском, а не числом функций. Обычный вход дёшев; собственный биллинг с пропорциональными списаниями и налогами — нет. Расплывчатые требования, капризные интеграции, требования высокой доступности и уникальный дизайн поднимают цифру. Короткий разговор об объёме даёт куда более честную оценку, чем онлайн-калькулятор.
Нужно ли техническое задание перед разработкой?
Да, хотя это не обязано быть тяжёлым документом. Полезное ТЗ фиксирует намерение: роли, ключевые экраны, хранимые данные и их правила, внешние зависимости и измеримые «не обсуждается». Оно позволяет команде строить то, что нужно, а вам — честно судить, готова ли функция. Оно экономит больше времени, чем стоит.
Какой стек лучше для SaaS?
Лучший стек — тот, что команда умеет выпускать и поддерживать, а не самый новый. Компонентный фронтенд-фреймворк подходит для интерактивных дашбордов; серверный рендер — для контента. Реляционная база — безопасный выбор по умолчанию. Для авторизации берите проверенного провайдера, для платежей — известный сервис, а не пишите их сами.
Что делать сначала — мобильное приложение или веб?
Для большинства продуктов начинайте с веба. Адаптивное веб-приложение достаёт до любого устройства из одной кодовой базы, выходит быстрее и обновляется мгновенно без ревью в сторах. Нативное мобильное приложение стройте, когда спрос доказан и нужны возможности, которых у веба нет, — глубокая интеграция с устройством или офлайн-режим.