Перформанс начинается с требований
Рассказываю, почему NFR — не формальность, а точка, вокруг которой строится весь процесс. Как определить реальные критерии перформанса, кто должен их задавать и что делать, если клиент говорит: «Сделайте, чтобы было быстрее».
📋
Введение
Большинство перф-тестеров хотя бы раз сталкивались с ситуацией, когда после детального отчёта и аккуратных графиков клиент задаёт один и тот же вопрос:
«Так это хорошо или плохо?»
И всё. Тут же ясно: нет точки отсчёта. Система может выдерживать сотни пользователей, но если никто не определил, что считать успехом, то результат теряет смысл. Один инженер видит стабильность, другой — деградацию, бизнес — просто красивые графики. В итоге перформанс-инженер превращается в переводчика между цифрами и бизнесом.
Без чётких критериев команда не знает, куда стремиться, а заказчик не понимает, за что платит. Именно поэтому работа над NFR-ами — это не бюрократия, а ключевой этап построения зрелой инженерной культуры.
Содержание
- 🔍 Что такое перформанс-требования и зачем они нужны
- 🧭 Как определить требования: от наблюдений к метрикам
- 🧩 Кто отвечает за NFR
- ⚠️ Типичные ошибки
- 📈 Метрики, на которые стоит смотреть
- 🔧 Главные челленджи
- ☁️ Прод-лайк энвайрмент
- 💼 Инвестиция, а не бюрократия
- 🧭 Вместо вывода
🧠 Эта статья основана на разговоре и совместных размышлениях с Иваном Зарубиным, Надеждой Тамела и Сергеем Руденко.
🔍 Что такое перформанс-требования и зачем они нужны
Перформанс-требования — это язык общения между инженерами, бизнесом и юзерами. Это набор измеримых характеристик, определяющих, при каких условиях система считается работающей хорошо.
Когда нет критериев, победит тот, кто громче скажет, что всё работает.
NFR-ы:
- позволяют определить границы «нормальной» работы;
- создают основу для анализа;
- фиксируют ожидания бизнеса и юзеров.
Хорошие NFR отвечают не только на вопрос насколько быстро, но и на насколько стабильно и насколько предсказуемо. Без этого легко попасть в иллюзию успеха: приложение летает на QA-энве, но умирает при первых 1000 реальных юзерах.
🧭 Как определить требования: от наблюдений к метрикам
Перформанс начинается не с JMeter, а с понимания бизнеса.
- Кто пользователи?
- Что они делают?
- Какие операции критичны для бизнеса?
Только после этого переходят к цифрам.
Хорошие требования не придумывают, их находят в данных.
📊 Источники для определения NFR:
- Логи и мониторинг продакшена — реальная статистика по сценариям.
- Наблюдение за пользователями — как часто и где возникают пиковые нагрузки.
- Бизнес-контекст — сезонность, часы активности, тип клиентов.
- Аналитика и опыт экспертов — прогноз для новых систем.
Если проект локальный, две секунды отклика — нормально. Если глобальный — каждая миллисекунда важна.
У крупных компаний каждые 100 мс задержки — это процент потерь дохода.
NFR не высечены в камне. Это живой документ, который нужно пересматривать, когда продукт растёт, инфраструктура меняется или появляются новые сценарии.
🧩 Кто отвечает за NFR
На зрелых проектах требования формулируются совместно: архитекторы, разработчики, тестирование и бизнес. Но чаще — их пишет перформанс-инженер. Просто потому что больше некому.
«Хочу, чтобы было не хуже» — не требование. Это самоуспокоение.
Хороший инженер не ждёт готовых метрик. Он предлагает их сам: анализирует, формулирует, согласовывает и фиксирует. Так тесты становятся инженерной практикой, а не хаосом.
Иногда NFR рождаются из инцидентов: что-то упало, бизнес потерял деньги и только потом формируется требование «чтобы не повторилось». Зрелые команды действуют наоборот — они формулируют границы заранее.
⚠️ Типичные ошибки
- ❌ Хочу быстрее без цифр. Не цель.
- ⚖️ Среднее время отклика. Среднее ничего не значит, смотрите перцентили.
- 🔍 Без приоритизации. Не все сценарии важны одинаково. Checkout важнее страницы профиля.
- 🧱 Игнор архитектуры. Иногда проблема в дизайне, а не в коде.
- 🔄 Статичные цифры. Требования должны обновляться вместе с системой.
Плохие NFR хуже, чем их отсутствие.
Хуже, потому что создают ложное чувство уверенности. Команда видит зелёные графики и считает, что всё в порядке, пока прод не ложится под реальной нагрузкой.
📈 Метрики, на которые стоит смотреть
Перформанс — это не одно число. Это экосистема метрик.
- Нагрузочные: пользователи, сессии, транзакции/сек.
- Временные: медиана, 90-й и 95-й персентили, максимумы.
- Ресурсные: CPU, память, IO, сеть, база.
- Поведенческие: частота ошибок, время восстановления, GC-паузы, количество таймаутов.
Если всё идеально при 80% нагрузки, вы просто не тестировали достаточно сильно.
Важно не только измерять, но и понимать причинно-следственные связи. Рост CPU может быть следствием неэффективного кэша, а рост задержек в сети — проблемы в балансировщике. Перформанс-инженер должен мыслить системно: искать закономерности, а не отдельные виновные метрики.
Система должна не только выдерживать стресс, но и восстанавливаться после него: освобождать память, закрывать соединения, очищать очереди.
🔧 Главные челленджи
- 📉 Нет данных. Без логов любые оценки субъективны.
- 🗣 Разные языки. Девы говорят о TPS, аналитики — о юзерах, бизнес — о прибыли.
- 🕒 Позднее подключение. Вспоминают о перформансе за месяц до релиза.
- 🧩 Разобщённость. Никто не чувствует ответственности.
- 💸 Недооценка перформанса. Пока система не падает, кажется, что всё хорошо, его воспринимают как приятное дополнение.
Перформанс — это инвестиция в будущее. Мы тестируем не сегодня, мы страхуем завтра.
☁️ Прод-лайк энвайрмент
Тесты имеют смысл только в продоподобном окружении.
Тестировать перформанс на QA — как проверять самолёт в гараже: он двигается, но не летает.
Идеальный энвайрмент:
- то же количество серверов и ядер;
- идентичные настройки баз и кэшей;
- одинаковые версии JVM, драйверов и сервисов.
В облаке это стало проще: Terraform, Helm, CloudWatch, Grafana, Prometheus. Главное — наблюдаемость и стабильность.
Тесты должны имитировать реальные сценарии: логин, навигацию, покупки, отчёты. Иначе результат не покажет, как поведёт себя прод.
💼 Инвестиция, а не бюрократия
Отсутствие NFR превращает обсуждения в спор. Когда они есть, появляется общий язык, измеримость и прозрачность.
В зрелых командах NFR — это не бумажка, а часть ДНК.
Требования делают тесты полезными. Разработчики знают границы, бизнес — понимает риски, инженеры — видят цель. Это не про отчётность, это про контроль над ростом системы.
Сформулированные NFR позволяют прогнозировать развитие. Они помогают планировать масштабирование, закладывать бюджет на инфраструктуру и предупреждать инциденты, а не тушить их.
🧭 Вместо вывода
Перформанс без требований — это полет без приборов. Можно лететь по ощущениям, но рано или поздно наступает туман, и система теряет ориентацию.
Требования — это карта и компас. Без них каждый оптимизирует что-то своё, но никто не движется вперёд.