Ответ
Столкнувшись с некорректными требованиями, действую по следующему алгоритму:
-
Уточнение и диалог: Первым делом обращаюсь к автору требований (аналитик, продакт, заказчик). Задаю конкретные вопросы, чтобы выявить истинную потребность:
- "Какую бизнес-проблему мы решаем?"
- "Каков ожидаемый результат для пользователя?"
- "Есть ли примеры или аналоги в системе?"
- "Каковы критерии успеха (метрики)?"
-
Анализ и исследование: Если прямой диалог невозможен (legacy-код, устаревшая документация):
- Изучаю контекст: логи, историю коммитов, связанные модули.
- Создаю минимальный воспроизводимый пример проблемы.
- Провожу реверс-инжиниринг существующего поведения.
-
Документирование и предложение решений:
- Четко фиксирую найденные противоречия и неясности.
- Предлагаю варианты решений с оценкой рисков и трудозатрат.
- Обсуждаю варианты с командой и стейкхолдерами.
-
Фиксация решения: Принятое решение обязательно документирую в задаче (Jira, GitHub Issue) или в коде (комментарии). Это создает "историческую справку" и снимает ответственность за догадки.
Пример:
Исходное требование: "Сделать фильтрацию быстрее". Мои уточняющие вопросы:
- Текущая скорость? Целевая скорость? (например, "с 2 сек до 200 мс")
- На каком объеме данных? (100 или 1 млн записей?)
- Какие фильтры самые частые? Нужно ли кэширование?
- Есть ли UX-ограничения (индикатор загрузки)?
Такой подход превращает размытое требование в измеримую техническую задачу.
Ответ 18+ 🔞
А, ну это классика, блядь! Подходишь к тебе такой менеджер или аналитик, глаза горят, и такой: «Сделай фильтрацию быстрее!». И всё, пиздец. Сиди и гадай, что этот «быстрее» значит — чтобы за секунду, а не за две, или чтобы вообще в реальном времени, как у ЦРУ в фильмах.
Так вот, слушай, как я с этим борюсь, чтобы потом не оказаться крайним, когда окажется, что «быстрее» — это «вчера».
Первым делом — не кидаюсь сразу писать код, а начинаю этого гения расспрашивать, как будто он только что с Марса прилетел. По пунктам, сука: «Окей, а какую конкретно бизнес-хуйню мы тут решаем? Люди из-за этого бага деньги теряют или просто им не нравится, что спиннер крутится?» «А какой, блядь, ожидаемый результат? Чтобы пользователь нажал кнопку и сразу, без тени сомнения, получил свои данные? Или чтобы он хотя бы успел кофе сделать, пока грузится?» «Покажи мне, отец, где в приложении уже есть пример такой штуки, которая работает «нормально», чтобы я понял, на что ровняться?» «И самый главный вопрос — как мы поймём, что всё получилось? Какие цифры? Метрики, блядь!»
Если же этот автор требований уже на пенсии, в отпуске или просто его никогда не существовало, а в таске только кривое описание из 2015 года — тут начинается детектив. Лезу в логи, смотрю, кто, когда и зачем этот кусок кода трогал в последний раз. Часто оказывается, что какой-то костыль прилепили на скорую руку, а теперь он на миллионе записей просто дохнет. Пытаюсь воспроизвести проблему на локальной базе, чтобы понять, где конкретно тормоза — в запросе, в обработке данных на бэке или уже на фронте, когда 10 тысяч строк рендерятся.
Потом, когда более-менее ясно, где собака зарыта, сажусь и пишу. Не код, а документ, ёпта! Чётко расписываю: «Вот тут требование ебанутое, вот тут оно противоречит вот этому, а вот здесь нихуя не понятно». И предлагаю не один, а несколько вариантов, от дешёвого костыля до нормальной, но долгой переделки. И везде пишу: «Если сделаем так — будет быстро, но потом сложно расширять. Если сделаем эдак — придётся перелопатить пол-системы, зато летать будет». Пусть выбирают, я не волшебник.
И, блядь, самое главное — ВСЁ, что решили, фиксирую. Прямо в таске пишу: «По итогам созвона с Васькой и Петькой принято решение ебашить вариант №2». Или в коде комментарий оставляю: // 2024-04-12: Сделано так, потому что Вася сказал, что фильтр по статусу используется в 90% случаев. Не трогать, не оптимизировать.
Это потом спасает, когда через полгода прибегают с криками: «А почему тут всё так сделано, идиот?!». А ты такой: «А вот, мать вашу, протокол допроса, все подписи есть».
Вот смотри, как это работает на практике:
Было: «Сделать фильтрацию быстрее». Стало после моих вопросов:
- Сейчас фильтрация по 100 тысячам записей выполняется за 2 секунды. Целевой показатель — 200 миллисекунд.
- Самые частые фильтры — по статусу (
active) и дате. По ним нужно кэширование.- Пока данные грузятся, должен отображаться спиннер, а не просто висеть интерфейс.
Вот так из пиздежа в воздухе получается нормальная техническая задача, за которую не стыдно и которая понятна всем. А не «сделай волшебно».