А маленькая просьба вроде:
«Добавьте здесь ещё один статус»
может внезапно затронуть базу данных, API, права пользователей, уведомления, отчёты, мобильный интерфейс и историю уже созданных объектов.
Поэтому проекты редко становятся дорогими из-за одной «сложной кнопки».
Гораздо чаще бюджет постепенно увеличивают решения, которые в момент принятия казались незначительными.
Неопределённые требования.
Разработка до проектирования.
Временные решения, которые неожиданно становятся постоянными.
Поздно обнаруженные ограничения.
Недооценённые интеграции.
Изменения в уже готовом фундаменте.
В результате заказчик смотрит на новую функцию и думает:
«Почему это стоит столько? Здесь же нужно добавить всего одно поле».
А разработчик видит цепочку из двадцати зависимостей.
Разберём ошибки, которые чаще всего приводят к такому результату, и главное — что можно сделать до начала разработки, чтобы не оплачивать одну и ту же работу несколько раз.
Самая дорогая стадия для изменения требования — когда система уже построена
Представим, что проект пока существует в виде схемы.
В ней написано:
Проект
│
├── название
├── клиент
├── стоимость
└── статусКто-то предлагает добавить несколько отдельных согласований стоимости.
Исправить схему можно за несколько минут.
Теперь представим, что приложение уже разработано.
Стоимость хранится в базе.
Есть форма редактирования.
API.
История проекта.
Уведомления.
Административная панель.
Клиентский кабинет.
Отчёты.
Тесты.
И только сейчас появляется требование:
Изменение стоимости должно вступать в силу только после подтверждения клиента, причём старое значение необходимо сохранять.
Теперь это уже не изменение одного поля.
Появляется новая бизнес-сущность или workflow:
Текущая стоимость
↓
Предложение изменения
↓
Ожидает решения клиента
↙ ↓ ↘
Принято Отклонено
↓
Новая стоимостьНужно изменить модель данных, API, интерфейс администратора, клиентский интерфейс, уведомления, историю действий и тесты.
Сама идея не стала сложнее.
Изменился момент, когда её обнаружили.
Отсюда первое важное правило экономики разработки:
стоимость требования зависит не только от его сложности, но и от того, на каком этапе проекта оно появилось.
Ошибка №1. Начинать программирование до того, как понятен основной процесс
Это одна из самых дорогих ошибок.
Иногда кажется, что аналитика только задерживает настоящую работу.
Есть идея, интерфейс примерно понятен — значит, можно начинать разработку.
Команда создаёт базу, авторизацию, страницы и API.
Через месяц выясняется, что заказчик и разработчик по-разному понимали сам процесс.
Рассмотрим платформу заказов.
Первоначально процесс представляли так:
Заявка
↓
Оценка
↓
Принято
↓
Работа
↓
ЗавершеноПосле начала разработки появляются детали.
Перед оценкой исполнитель должен иметь возможность запросить уточнение.
Заказчик должен ответить, даже если проект ещё не принят.
После оценки клиент либо соглашается, либо запрашивает изменение.
Во время работы он может оформить дополнительную доработку.
После завершения проект остаётся доступным, а клиент может инициировать новый запрос на изменение.
Получается уже другая модель:
Заявка
↓
Рассмотрение
↓
Нужно уточнение
↓
Ответ клиента
↓
Оценка
↙ ↘
Принято Требует изменений
↓
Работа
↓
Доработки
↓
Завершено
↓
Новый запрос клиентаЕсли эта схема появилась до разработки — прекрасно.
Если после — придётся переделывать уже созданные состояния, разрешения, уведомления и интерфейс.
Как уменьшить риск
До разработки полезно описать несколько основных сценариев словами.
Не:
Нужен раздел проектов.
А:
Клиент создаёт проект, отправляет его на проверку, администратор может запросить уточнение, клиент отвечает до принятия проекта, затем получает оценку и принимает или отклоняет её.
Такое описание сразу раскрывает значительно больше требований, чем список экранов.
Ошибка №2. Описывать функции, но не описывать правила
Функция:
Пользователь может изменить проект.
Выглядит понятно.
Но разработчику всё равно неизвестно почти всё.
Можно ли изменять проект после отправки?
Какие поля?
Кому?
Что делать с уже согласованной стоимостью?
Нужно ли уведомить администратора?
Сохранять ли старое значение?
Может ли изменение отменить уже начатую работу?
А если у пользователя несколько сотрудников?
Одна короткая функция превращается в десяток правил.
Чем меньше правил известно до разработки, тем шире реальный диапазон стоимости.
Поэтому для сложных функций полезнее описывать три вещи:
кто выполняет действие;
при каких условиях оно разрешено;
что должно произойти после действия.
Например:
Клиент может создать запрос на изменение только для активного или завершённого проекта. Запрос не изменяет проект автоматически. Администратор оценивает изменение, указывает новую стоимость и срок, после чего клиент принимает или отклоняет предложение.
Теперь уже можно проектировать систему.
Ошибка №3. Считать каждую маленькую правку маленькой
Фраза:
Здесь просто добавим ещё один статус.
— одна из самых опасных в разработке.
Возьмём существующие статусы:
NEW
IN_PROGRESS
COMPLETEDДобавляем:
PAUSEDНа уровне enum — несколько символов.
Но дальше возникают вопросы.
Кто может приостановить проект?
Может ли клиент?
Что происходит с активными задачами?
Останавливается ли срок?
Можно ли отправлять сообщения?
Показывается ли проект в архиве?
Что видит клиент?
Какие уведомления отправляются?
Как статус учитывается в аналитике?
Можно ли возобновить проект?
Куда он переходит после возобновления?
Что происходит с уже запущенными фоновыми операциями?
И вот «ещё один статус» перестаёт быть маленькой правкой.
Полезный подход
Оценивать не размер интерфейсного изменения, а количество затронутых правил и компонентов.
Можно мысленно использовать формулу:
Сложность изменения ≈ количество зависимостей × сложность новых правил.
Это не математически точная формула, но она хорошо объясняет природу стоимости.
Ошибка №4. Проектировать базу данных после интерфейса
Иногда сначала создаются красивые макеты, а затем под них пытаются придумать модель данных.
Для простых сайтов это может работать.
Для сложных приложений — опасно.
Представим карточку:
Проект №184
Клиент: Иван
Статус: В работе
Стоимость: 480 000 ₽Интерфейс простой.
Но данные могут иметь значительно более сложную структуру.
Клиент — это физическое лицо или организация?
У организации может быть несколько представителей?
У проекта один ответственный или несколько?
Стоимость одна или есть версии?
История статуса сохраняется?
Может ли проект принадлежать нескольким подразделениям?
Есть ли этапы?
А платежи?
А дополнительные работы?
Эти решения определяют архитектуру значительно сильнее, чем расположение карточки на странице.
Если модель данных оказывается неправильной после появления реальных записей, изменение может потребовать миграции уже существующей информации.
А это намного дороже обычного изменения интерфейса.
Ошибка №5. Оставлять права доступа «на потом»
На первой версии есть:
ADMIN
CLIENTВсё замечательно.
Затем появляется сотрудник клиента.
Он должен читать проекты, но не видеть стоимость.
Бухгалтер должен видеть платежи, но не переписку.
Менеджер исполнителя работает только с назначенными проектами.
Руководитель видит проекты всего отдела.
Администратор может изменять настройки, но определённые критичные события всё равно должны попадать в аудит.
В этот момент простой role превращается в систему разрешений.
Например:
project.read
project.edit
project.approve
billing.read
billing.manage
messages.read
messages.write
members.manageЕсли архитектура была изначально рассчитана только на две роли, изменения начинают проникать практически в каждый endpoint.
Поэтому не обязательно сразу реализовывать двадцать ролей.
Но полезно заранее понять, останется ли модель доступа простой вообще.
Ошибка №6. Проверять права только на frontend
Иногда функция выглядит защищённой, потому что пользователь просто не видит кнопку.
Например:
клиенту нельзя удалить проект — кнопку удаления скрыли.
Но API всё ещё принимает:
DELETE /api/projects/184Если backend самостоятельно не проверяет разрешение, безопасность существует только визуально.
После обнаружения такой проблемы часто приходится пересматривать большой набор endpoints.
Это ещё один пример того, как технический долг превращается в прямые расходы.
Безопасность дешевле включить в архитектуру сразу, чем добавлять её после аудита уже готового продукта.
Ошибка №7. Недооценивать интеграции
В техническом задании может быть одна строка:
Интеграция с CRM.
Или:
Подключить Telegram.
Или:
Синхронизировать данные с 1С.
Количество слов почти никак не связано со стоимостью.
Простая интеграция
Система отправила сообщение.
Получила успешный ответ.
Готово.
Реальная интеграция
Что делать, если внешний сервис недоступен?
А если запрос прошёл, но ответ потерялся?
Можно ли повторить операцию?
Не создаст ли повтор дубль?
Как долго повторять?
Кто увидит ошибку?
Как восстановить синхронизацию после нескольких часов недоступности?
Что делать, если две системы одновременно изменили объект?
Кто является источником истины?
После этих вопросов появляются:
Queue
Retry
Idempotency
Integration log
Dead-letter handling
Monitoring
ReconciliationТо есть отдельная техническая подсистема.
Практический вывод
Интеграции лучше оценивать каждую отдельно, а не одной строкой:
Интеграции — 100 часов.
Пять интеграций могут потребовать как несколько десятков, так и сотни часов.
Ошибка №8. Пытаться сделать систему универсальной раньше времени
Есть противоположная проблема.
Проект ещё не запущен, но команда пытается предусмотреть всё.
Нужны статусы?
Создадим универсальный конструктор статусов.
Нужны отчёты?
Сразу построим конструктор любых отчётов.
Нужны автоматические действия?
Сделаем визуальный workflow builder.
Нужны поля клиента?
Сделаем конструктор произвольных сущностей.
В результате вместо продукта начинает разрабатываться платформа для создания продукта.
Это может быть оправдано.
Но только если универсальность действительно является бизнес-требованием.
Если компании нужны пять фиксированных отчётов, часто значительно дешевле сделать пять хороших отчётов, чем сначала потратить месяцы на универсальный report builder.
Ошибка №9. Масштабироваться до появления проблемы масштабирования
Есть проекты, в которых первая архитектурная схема выглядит так:
API Gateway
↓
Service Mesh
↓
20 микросервисов
↓
Kafka
↓
Несколько баз данных
↓
KubernetesА пользователей пока нет.
Микросервисы — не ошибка сами по себе.
Ошибка — использовать сложность без задачи, которую она решает.
Каждый дополнительный сервис означает:
отдельное развёртывание;
конфигурацию;
логи;
мониторинг;
сетевые ошибки;
контракты;
версионирование;
CI/CD;
диагностику.
Для многих новых продуктов хорошо структурированный модульный монолит значительно экономичнее:
Application
│
├── Auth
├── Users
├── Projects
├── Billing
├── Notifications
└── Reports
↓
PostgreSQLЕсли потом нагрузка действительно потребует выделить отдельную часть системы, это можно сделать на основании измерений, а не предположений.
Ошибка №10. Делать временный прототип, а потом объявлять его production
Это происходит постоянно.
Команда говорит:
Сейчас быстро сделаем временно, потом перепишем.
Появляются:
упрощённая авторизация;
жёстко прописанные статусы;
ручные изменения базы;
отсутствие миграций;
нет тестов;
нет истории;
нет мониторинга;
временное хранение файлов.
Затем первая версия начинает приносить пользу.
Появляются пользователи.
Бизнес не хочет останавливать развитие на несколько месяцев ради переписывания.
И временная архитектура постепенно превращается в постоянную.
Через год любое изменение стоит заметно дороже.
Проблема здесь не в MVP.
Хороший MVP может иметь небольшой функционал.
Опасно другое:
минимальный продукт ≠ технически одноразовый продукт.
Ошибка №11. Забывать об административной части
В требованиях часто подробно описан пользовательский интерфейс.
Но почти ничего не сказано о том, как системой будет управлять сама компания.
После запуска выясняется, что необходимо:
найти пользователя;
заблокировать аккаунт;
изменить статус;
посмотреть ошибку;
повторить интеграцию;
вернуть объект;
проверить уведомления;
посмотреть историю платежей;
скорректировать данные.
Если административных инструментов нет, эту работу начинают делать разработчики непосредственно через базу данных.
Сначала это кажется экономией.
Затем каждая обычная операция поддержки превращается в техническую задачу.
Админ-панель увеличивает начальный бюджет, но часто заметно уменьшает стоимость эксплуатации.
Ошибка №12. Не учитывать миграцию старых данных
Фраза:
У нас есть Excel, потом просто загрузим.
может скрывать отдельный проект.
В таблице могут находиться:
дубликаты;
пустые значения;
разные форматы телефонов;
старые статусы;
невалидные email;
различающиеся названия одной компании;
отсутствующие связи;
текст вместо структурированных данных.
Например:
ООО Ромашка
ООО "Ромашка"
Ромашка ООО
ООО «РОМАШКА»Человек понимает, что это может быть одна организация.
Программа — нет.
До миграции нужно определить правила очистки, преобразования и сопоставления.
Чем позже это обнаруживается, тем выше риск задержать запуск уже готовой системы.
Ошибка №13. Считать тестирование последним этапом
Плохой сценарий:
Разработка
↓
Разработка
↓
Ещё разработка
↓
Готово
↓
Теперь давайте всё протестируемК этому моменту ошибка в фундаменте могла размножиться по всей системе.
Например, неправильно реализованный доступ к проектам использует 30 endpoints.
Исправление одного общего authorization layer в начале было бы относительно простым.
Исправление тридцати отдельных реализаций после завершения проекта — уже другая задача.
Чем быстрее дефект обнаруживается после появления, тем дешевле его исправить.
Поэтому тестирование должно сопровождать разработку.
Ошибка №14. Проверять только «идеальный» сценарий
Пользователь:
- открыл форму;
- правильно всё заполнил;
- один раз нажал кнопку;
- интернет работал;
- сервер ответил;
- внешний API тоже ответил.
В таком мире почти любое приложение работает хорошо.
Реальные пользователи делают иначе.
Дважды нажимают кнопку.
Закрывают вкладку посреди формы.
Загружают файл с огромным названием.
Открывают приложение с телефона.
Возвращаются через несколько дней.
Используют старую ссылку.
Теряют интернет во время отправки.
Меняют данные в двух вкладках.
Именно пограничные состояния часто создают самые дорогие production-баги.
Ошибка №15. Оставлять мобильную версию на финал
Сначала интерфейс создаётся для большого экрана.
Появляется таблица:
Проект | Клиент | Статус | Срок | Цена | Менеджер | ДействияПотом приходит время мобильной версии.
На ширине 360 пикселей выясняется, что всё это невозможно просто «ужать».
Нужно менять представление.
Например:
CRM для отдела продаж
В работе
Срок: 28 сентября
480 000 ₽
[Открыть]Если мобильные сценарии учитывать одновременно с проектированием desktop-интерфейса, компоненты можно сразу строить адаптивно.
Если делать мобильную версию в конце, иногда приходится переделывать структуру готовых компонентов.
Ошибка №16. Вспоминать о доступности после разработки
Доступность тоже дешевле проектировать сразу.
Например, поле имеет только placeholder:
Введите имя
Визуально всё понятно.
Но доступного имени у поля может не быть.
Или модальное окно выглядит хорошо мышью, но пользователь с клавиатурой может уйти фокусом под него.
Или скрытый элемент фактически остаётся доступен из-за CSS.
По отдельности это небольшие дефекты.
Но если одна и та же ошибочная практика повторена на десятках страниц, исправление превращается в отдельный этап.
Ошибка №17. Откладывать безопасность до запуска
Фраза:
Сейчас главное запуститься, безопасность потом.
может оказаться очень дорогой.
Потому что безопасность связана с фундаментальными решениями:
как хранятся сессии;
как проверяются permissions;
как изолируются пользовательские данные;
как загружаются файлы;
где находятся secrets;
как выполняется password reset;
как устроен rate limiting;
как фиксируются критические события.
Сложно безопасно «обернуть» систему постфактум, если внутри неё изначально нет нормальной модели доверия.
Ошибка №18. Не думать о резервном восстановлении, пока всё работает
Backup — не то же самое, что возможность восстановления.
Можно годами создавать резервные копии и однажды обнаружить, что восстановить из них рабочую систему невозможно.
Для важных приложений нужно понимать хотя бы:
как часто создаются копии;
где они хранятся;
как долго сохраняются;
копируются ли пользовательские файлы;
как проверить целостность;
сколько занимает восстановление.
Самая дорогая проверка backup — первая проверка после настоящей аварии.
Ошибка №19. Экономить на наблюдаемости системы
В разработке ошибка выглядит так:
Error: database timeoutИ разработчик может воспроизвести её локально.
После запуска клиент сообщает:
Вчера примерно вечером у нас что-то не сохранилось.
Теперь нужны ответы.
Какой пользователь?
Какой запрос?
Какой объект?
В какое время?
Как долго работал сервер?
Что происходило с базой?
Был ли внешний сервис доступен?
Если приложение не имеет нормального логирования, error tracking и метрик, расследование начинает оплачиваться человеческими часами.
Поэтому observability — это не только техническое удобство.
Это способ снизить будущую стоимость эксплуатации.
Ошибка №20. Не фиксировать бизнес-значимые изменения
Представим проект стоимостью 400 000 ₽.
Сегодня в системе указано:
470 000 ₽.
Клиент говорит:
Вчера было 400.
Администратор:
Не помню.
Если старое значение просто перезаписалось, разобраться сложно.
Для значимых событий полезен audit trail:
21.09.2026 14:31
Проект #184
Стоимость изменена
400 000 ₽
↓
470 000 ₽
Автор:
Администратор
Причина:
Дополнительная интеграцияИстория требует разработки и хранения данных.
Но отсутствие истории иногда обходится значительно дороже — особенно когда возникают финансовые разногласия.
Ошибка №21. Использовать чат вместо формального процесса
Клиент пишет:
Добавьте экспорт.
Исполнитель:
Сделаем за 30 тысяч.
Клиент:
Ок.
Через месяц:
А почему итоговая стоимость стала больше?
Все начинают искать сообщение.
Для значимых изменений намного безопаснее отдельная сущность:
Запрос на изменение #17
Экспорт отчётов в Excel
Стоимость:
+30 000 ₽
Срок:
+2 рабочих дня
Статус:
Ожидает решения
[Принять]
[Отклонить]Чат нужен для разговора.
Бизнес-решения лучше хранить структурированно.
Ошибка №22. Не назначить человека, который принимает решения
Есть ещё одна причина удорожания, которая почти не связана с программированием.
Проект смотрят:
владелец;
маркетолог;
менеджер;
бухгалтер;
руководитель продаж.
Первый говорит:
Сделать кнопку справа.
Второй:
Нет, слева.
После реализации появляется третий:
Вообще уберите её отсюда.
Команда разработчиков честно выполняет каждое изменение.
Бюджет растёт.
Здесь нет технической ошибки.
Это проблема управления решениями.
Для проекта полезно заранее определить:
кто имеет право финально утверждать требования и интерфейс.
Обсуждать могут многие.
Финальное решение желательно получать из одного согласованного источника.
Ошибка №23. Менять приоритеты быстрее, чем команда завершает работу
Сегодня главная задача — новая система уведомлений.
Команда начинает переделывать backend.
Завтра срочно нужен новый каталог.
Работа останавливается.
Через неделю снова возвращаются к уведомлениям.
Разработчику приходится повторно загружать контекст:
что уже сделано;
почему было принято конкретное решение;
что осталось;
какие миграции подготовлены.
Само переключение имеет стоимость.
Чем сложнее задача, тем выше она становится.
Поэтому постоянная смена приоритетов способна удорожать проект даже без изменения общего списка функций.
Ошибка №24. Требовать точную цену при высокой неопределённости
Заказчик естественно хочет знать бюджет.
Но иногда требования выглядят так:
Нужна система типа CRM с аналитикой, автоматизацией, AI и интеграциями.
А затем требуется точная цена.
У исполнителя остаётся два варианта.
Первый — заложить огромный запас.
Заказчик переплачивает за риск.
Второй — назвать привлекательную цифру на основании оптимистичных предположений.
Затем начинаются доплаты.
Более здоровый подход на ранней стадии:
Предварительная оценка:
1600–2300 часовИ список предположений, на которых она основана.
После discovery диапазон сужается.
Например:
После аналитики:
1850–2050 часовЭто менее красиво, чем магически точная цифра.
Зато значительно честнее.
Ошибка №25. Не определить, что значит «готово»
Задача:
Реализовать уведомления.
Разработчик отправляет уведомление внутри сайта.
Заказчик ожидал:
web;
email;
Telegram;
счётчик непрочитанных;
deep link;
настройки каналов.
Обе стороны считают свою интерпретацию очевидной.
Получается конфликт, который на самом деле возник не из-за качества разработки, а из-за отсутствия критериев приёмки.
Полезный формат:
Функция
Уведомление о новом сообщении.
Готово, когда
- событие создаётся после нового сообщения;
- клиент видит непрочитанное уведомление;
- счётчик обновляется без перезагрузки;
- нажатие открывает конкретное сообщение;
- повторное открытие не увеличивает счётчик;
- уведомление корректно работает на мобильном.
Теперь значительно меньше пространства для разных трактовок.
Ошибка №26. Передавать всё сложное одной фразой «потом доработаем»
Есть вещи, которые действительно можно добавить позже.
Тёмную тему.
Дополнительный отчёт.
Ещё один фильтр.
Но некоторые решения формируют фундамент:
модель пользователей;
tenant-модель;
структура данных;
права доступа;
жизненный цикл ключевых сущностей;
финансовые операции.
Если их оставить неопределёнными, будущая «доработка» может оказаться перестройкой системы.
Хорошее проектирование не означает попытку предусмотреть весь мир.
Оно означает раннее определение тех решений, которые дорого менять позже.
Насколько сильно ошибки могут увеличить бюджет
Возьмём полностью условный проект.
Первоначальная разработка оценена в:
| Блок | Часы |
|---|---|
| Аналитика | 100 |
| UX/UI | 160 |
| Frontend | 450 |
| Backend | 600 |
| Интеграции | 180 |
| QA | 260 |
| DevOps | 100 |
| Управление | 150 |
| Итого | 2000 |
Теперь представим несколько поздно обнаруженных требований.
Изменение модели ролей
Дополнительно:
+120 часов
Переделка workflow проекта
+150 часов
Оказавшаяся сложнее интеграция
+100 часов
Поздняя мобильная переработка
+80 часов
Миграция данных, которую не учитывали
+90 часов
Получается:
2540 часов вместо 2000.
Рост:
27%.
Не появилось никакой одной гигантской функции.
Бюджет вырос из нескольких отдельных решений.
При условной ставке 3000 ₽/час:
первоначально:
6 000 000 ₽
после переделок:
7 620 000 ₽
Разница:
1 620 000 ₽.
Это условная модель, а не статистика рынка.
Но она хорошо показывает экономику переделок.
А можно ли вообще избежать изменений требований?
Нет.
И пытаться — плохая идея.
Особенно в новых продуктах.
После появления пользователей почти неизбежно выясняется, что часть предположений была неправильной.
Вопрос не в том, как полностью запретить изменения.
Нужно сделать так, чтобы изменения были дешёвыми и управляемыми.
Именно здесь появляется ценность нормальной архитектуры.
Если статусы проекта хранятся централизованно, добавить новый проще.
Если permissions вынесены в отдельный слой, изменить доступ проще.
Если уведомления работают через события, добавить новый канал проще.
Если бизнес-логика отделена от интерфейса, новый frontend не требует переписывать backend.
Хорошая архитектура не устраняет изменения.
Она уменьшает их цену.
На чём точно не стоит экономить
У разных проектов приоритеты различаются, но есть несколько вещей, экономия на которых часто возвращается позже дополнительными расходами.
Предпроектный анализ
Не нужно писать 500 страниц документации.
Но основные сущности, процессы, роли и интеграции должны быть понятны.
Модель данных
Особенно связи между основными объектами.
Права доступа
Если в системе больше одного типа пользователя.
Миграции базы
Изменения структуры данных должны быть воспроизводимыми.
Базовые автоматические тесты
В первую очередь для критичной бизнес-логики.
Логи и ошибки
Чтобы production-проблемы можно было диагностировать.
Резервное копирование
И проверка восстановления.
Мобильные сценарии
Если пользователи действительно будут работать с телефона.
Это не самые эффектные части проекта.
Но именно они часто определяют стоимость его дальнейшего развития.
На чём, наоборот, можно экономить
Экономия необязательно означает ухудшение качества.
Можно уменьшить объём первой версии.
Например, вместо универсального конструктора отчётов сделать пять необходимых отчётов.
Вместо двенадцати интеграций — две критичные.
Вместо мобильных приложений для iOS и Android — хороший адаптивный веб-интерфейс или PWA, если это соответствует сценарию продукта.
Вместо гибкого конструктора ролей — несколько заранее определённых ролей, если их действительно достаточно.
Вместо сложного automation builder — набор конкретных автоматических действий.
Это нормальная продуктовая оптимизация.
Главное — не заменять экономию функциональности экономией на фундаменте.
Полезный вопрос перед каждой функцией
Перед добавлением крупной возможности можно задавать три вопроса.
1. Какую проблему она решает?
Не:
Было бы здорово иметь AI.
А:
Сейчас менеджер тратит 20 минут на классификацию заявки. Мы хотим сократить это время.
2. Нужна ли она в первом релизе?
Если убрать функцию, может ли пользователь всё равно получить основную ценность?
3. Насколько дорого будет добавить её позже?
Некоторые вещи действительно легко отложить.
Другие лучше учитывать в фундаменте, даже если полноценный интерфейс появится позже.
Эти три вопроса способны заметно уменьшить бюджет без ухудшения продукта.
Что подготовить перед запросом оценки у разработчика
Не обязательно приносить огромное ТЗ.
Для хорошей предварительной оценки гораздо полезнее подготовить несколько вещей.
Описание проблемы
Что бизнес хочет изменить?
Типы пользователей
Кто работает с системой?
Основные сценарии
Что каждый из них делает?
Ключевые объекты
Клиенты?
Проекты?
Сделки?
Документы?
Заказы?
Роли
Кто что может видеть и изменять?
Интеграции
С какими внешними системами нужно работать?
Данные
Есть ли существующая база, которую потребуется перенести?
Первый релиз
Что действительно необходимо для запуска?
Будущее развитие
Какие функции почти наверняка появятся позже?
Этого уже достаточно, чтобы разговор о стоимости стал значительно предметнее.
Как понять, что оценка проекта качественная
Хорошая оценка обычно объяснима.
Можно увидеть:
Аналитика 80–120 ч
UX/UI 120–180 ч
Auth 60–90 ч
Projects 180–240 ч
Permissions 80–120 ч
Notifications 90–130 ч
Integrations 120–200 ч
QA 180–260 ч
...И рядом находятся предположения:
три роли;
две интеграции;
без мобильного приложения;
одна организация на пользователя;
фиксированный workflow;
без миграции legacy-данных.
Теперь изменение требований можно посчитать.
Например:
Пользователь должен состоять в нескольких организациях.
Это влияет на конкретный набор модулей.
Так намного понятнее, откуда появилась новая стоимость.
Самые дешёвые часы разработки — те, которые не пришлось тратить
Уменьшить бюджет можно не только снижением ставки исполнителя.
Иногда намного эффективнее вообще не разрабатывать ненужную функцию.
Допустим, команда стоит 3000 ₽ в час.
Можно долго торговаться и снизить цену на 10%.
Но если правильно проведённый discovery позволяет исключить 500 ненужных часов, экономический эффект гораздо больше.
Именно поэтому профессиональная разработка начинается не с максимального количества кода.
Она начинается с определения того, какой код вообще имеет смысл писать.
Вместо вывода
Веб-разработка чаще всего дорожает не потому, что программисты внезапно начали медленнее работать.
Причины обычно находятся раньше.
Начали писать код до понимания процесса.
Не определили бизнес-правила.
Не продумали модель данных.
Недооценили права доступа.
Сочли интеграцию «одним API-запросом».
Сделали временное решение постоянным.
Добавили универсальность, которой никто пока не пользуется.
Поздно начали проверять мобильную версию.
Не предусмотрели миграцию данных.
Использовали чат вместо формального процесса согласования.
Не определили критерии готовности.
Каждое такое решение по отдельности может выглядеть незначительным.
Но веб-приложение — связанная система.
Одно позднее изменение проходит через базу, backend, frontend, мобильный интерфейс, уведомления, аналитику и тесты.
Поэтому самый эффективный способ контролировать стоимость — не пытаться заранее запретить любые изменения.
Нужно понять, какие решения дороги в изменении, принять их достаточно рано и оставить гибкими те части продукта, которые почти наверняка будут развиваться.
Тогда бюджет расходуется в первую очередь на создание продукта.
А не на многократное исправление уже созданного.