«Какие у вас нефункциональные требования?» — спрашиваю на встрече. Заказчик смотрит как на инопланетянина. Он не мыслит категориями «1000 RPS» или «доступность 99.9%». Зато точно знает, как работает его бизнес — и НФТ ты выводишь сам, из этого.
ФТ vs НФТ
Функциональные требования — это что система делает. Нефункциональные — как. «Пользователь может авторизоваться» — ФТ. «Авторизация занимает не больше 2 секунд» — НФТ. ФТ про функции, НФТ про ограничения.
Основные типы НФТ:
- Производительность — запросов в секунду, время отклика;
- Доступность — процент аптайма (SLA 99.9% = 8 часов простоя в год);
- Масштабируемость — что будет при росте нагрузки в 10 раз;
- Безопасность — доступ, шифрование, аудит;
- Надёжность — поведение при сбоях и восстановление;
- Совместимость — браузеры, ОС, устройства;
- Локализация — языки, часовые пояса, форматы дат.
Проблема в том, что заказчик не думает этими категориями. Он думает своим бизнесом.
Кейс с собеседования
В Леруа Мерлен дали задачку: приложение, которое показывает сотрудникам — сейчас день или ночь. Собрать ФТ и НФТ. Звучит как шутка, но НФТ оттуда вытаскиваются вопросами:
- «Сколько человек в компании?» → 20 000 → понимаю нагрузку.
- «Есть геораспределение, часовые пояса?» → магазины по стране → нужна логика времени по локации.
- «Как и зачем будут пользоваться?» → «по приколу, сидят в тёмном помещении» → низкая критичность, SLA 99.99% не нужен.
- «На каких устройствах?» → личные телефоны → кроссплатформенность, разные версии ОС.
А ещё из сценария вылезли пики нагрузки — в начале и конце смены все разом проверяют, пора ли домой.
Что я упустил
Не спросил: нужно ли собирать статистику, логировать, синхронизировать что-то между пользователями. Если нет — день/ночь определяется вообще без сервера, по времени на телефоне:
- нет бэкенда → нет нагрузки;
- нет интернета → работает офлайн;
- нет синхронизации → нет проблем с часовыми поясами.
Один вопрос про архитектуру мог изменить всё решение.
Вопросы, которые вытаскивают НФТ
Заказчик не скажет «мне нужна доступность 99.9%», но ответит на:
- «Что будет, если система не поработает час? День?» → критичность, доступность.
- «Сколько человек одновременно?» → нагрузка.
- «Откуда заходят — офис, дом, в дороге?» → мобильность, офлайн.
- «Данные одинаковые для всех или у каждого свои?» → где хранить логику.
- «Что через год — пользователей больше?» → масштабируемость.
- «Кто не должен видеть эти данные?» → безопасность.
Что забрать
- Не спрашивай про НФТ напрямую — спрашивай про сценарии.
- Из контекста бизнеса рождаются конкретные ограничения.
- Один вопрос про архитектуру может перевернуть решение.
Упущенное ограничение больнее упущенной фичи: фичу добавишь, а переделывать архитектуру дорого.
С функционалом справляются все. Ограничения — то, что отличает джуна от мидла.