Какие сложности возникают при ревью бизнес-логики
Что проверяют
Это поведенческий вопрос: интервьюер хочет услышать, как вы ревьюите не стиль, а смысл изменений и как договариваетесь с автором, когда логика кажется неверной. Следом обычно просят пример: «Расскажите про ошибку, которую вы поймали на ревью или, наоборот, пропустили».
Как отвечать
Опишите реальные сложности и свой способ с ними справляться:
- нет контекста: в диффе видны изменённые строки, но не правило, которое они реализуют. Начинайте с задачи и критериев приёмки, а автора просите перечислить в описании PR сценарии и граничные случаи;
- логика размазана: условие частично в сериализаторе, частично в сервисе, частично в модели Django. Ревьюер проверяет кусок и не видит, что соседний путь обходит проверку;
- тесты зелёные, но проверяют не то: тест повторяет реализацию или всё закрыто моками. Читайте тесты как спецификацию: есть ли граница, пустой список, повторный вызов;
- типовые ловушки Python: деньги во
floatвместоDecimal,round()с банковским округлением, наивныеdatetimeбез часового пояса (datetime.utcnow()устарел с Python 3.12), гонки при конкурентном изменении безselect_for_update()или идемпотентности; - размер PR: изменение на тысячу строк по-настоящему не ревьюится. Договаривайтесь дробить, а сложное разбирайте созвоном с автором.
Дальше пример из своей практики: что было в PR, что вы заметили, как донесли до автора, чем закончилось. Детали и цифры должны быть вашими. Если ревьюили вы мало, скажите это прямо и расскажите, какие замечания получали сами и что поменяли в своём подходе. Такой ответ убедительнее придуманной истории.
Где спотыкаются
Рассказывают про ревью кода вообще: нейминг, PEP 8, линтеры. Это автоматизируется через ruff и не отвечает на вопрос про бизнес-логику.
Описывают ревью как поиск виноватого. Фраза «я сразу завернул PR» без рассказа о том, как вы договорились с автором, звучит тревожно.
Уходят в A/B-тесты и сбор обратной связи от пользователей. Это продуктовая работа, к ревью кода она не относится, и интервьюер решит, что вы не поняли вопрос.