Приведите пример постановки задачи.

Ответ

В моей практике, когда я ставил задачу джуну на проекте по разработке микросервиса на Python, это выглядело так:

Контекст: "У нас в сервисе payment-processor есть проблема: при запросе истории платежей (GET /api/v1/payments) клиенты иногда получают таймаут, если у них очень много транзакций. Логи показывают, что проблема в медленном SQL-запросе к таблице payments."

Задача: "Необходимо оптимизировать endpoint /api/v1/payments. Критерий успеха — время ответа 95-го перцентиля (p95) должно быть ниже 500 мс при нагрузке в 100 RPS. Пользователи не должны замечать изменений в формате ответа."

Ожидаемый результат и шаги:

  1. Анализ: Проведи EXPLAIN ANALYZE текущего запроса, найди узкое место (скорее всего, отсутствие индекса или SELECT *).
  2. Решение: Предложи вариант оптимизации. Например:
    • Добавить составной индекс (user_id, created_at DESC).
    • Внедрить пагинацию с использованием LIMIT/OFFSET или ключа created_at.
    • Рассмотреть возможность денормализации или кэширования.
  3. Валидация: Напиши нагрузочный тест (с помощью Locust) для проверки, что p95 укладывается в 500 мс.
  4. Сроки и приоритет: Это задача среднего приоритета. Ожидаю, что анализ займет 1 день, реализация и тесты — еще 2. Готов обсудить твой план завтра утром."

Критерии приемки:

  • Endpoint возвращает данные в том же JSON-формате.
  • Пагинация реализована (если выберешь этот путь).
  • Нагрузочный тест подтверждает достижение целевого p95.
  • Код покрыт юнит-тестами, изменения в миграциях БД задокументированы.

Ответ 18+ 🔞

Ну, представляешь картину? Сидит джун, глаза по пять копеек, а ему такая задачка подсовывается. Ёпта, классика жанра — «у нас тут всё тормозит, разберись». И ведь не просто «разберись», а с конкретными цифрами, как будто на экзамене: p95, 500 мс, 100 RPS. Чувак, у него же волнение ебать, он только SELECT * FROM users освоил, а тут ему сразу перцентили и нагрузку.

И самое главное — контекст. Не просто «оптимизируй», а вот тебе, блядь, готовая история: сервис payment-processor, эндпоинт /api/v1/payments, клиенты в истерике, таймауты летят. Логи показывают, что SQL-запрос — просто пиздопроебибна какая-то медленная. То есть проблема уже локализована, не надо гадать на кофейной гуще. Уже хорошо.

А дальше — просто инструкция, как в Lego собрано. Первый шаг — «проведи EXPLAIN ANALYZE». Это же гениально! Вместо того чтобы сразу лезть в код и хуй знает что менять, надо сначала понять, где собака зарыта. Может, индекс забыли, а может, он, дурак, SELECT * на миллион записей гоняет. EXPLAIN — это как рентген для базы, сразу видно все кости.

Потом — «предложи вариант». То есть не просто «сделай так», а «подумай, ебушки-воробушки, и предложи». Варианты-то сразу на блюдечке: индекс составной добавить, пагинацию воткнуть, может, кэш прикрутить. Это же не задачка с одним ответом, это целое поле для манёвра! Но с намёком, куда копать.

И вот это — шедевр: «Напиши нагрузочный тест». Ага, чтобы не было как в том анекдоте: «на моей машине работает». Нет, брат, ты это всё проверь под нагрузкой, чтобы p95 был в норме. Возьми Locust, настрой сценарий и гоняй, пока не убедишься. Доверия ебать ноль, сам всё протестируй и докажи.

Критерии приёмки — вообще отдельная песня. Формат ответа не трогать, пагинацию добавить, тесты написать, миграции задокументировать. Всё чётко, без воды. Никаких «сделай красиво». Сделай так, чтобы ничего не сломалось, чтобы клиент не охуел, и чтобы цифры сошлись.

И сроки: анализ — день, реализация — два. И главное — «готов обсудить твой план». То есть ты не один, тебя не бросят в этой каше. Приди, расскажи, что насобирал, и тебе помогут, направят. Это же не «сделай к пятнице и молчи», а нормальная, человеческая работа.

В общем, задача — хоть и сложная для новичка, но оформлена так, что с ума сойти. Всё разжёвано, но не до состояния каши, есть где подумать, но и есть конкретные ориентиры. Если джун такое не потянет — то тогда уже, ядрёна вошь, надо идти не в разработку, а в дворники. Тут тебе и аналитика, и проектирование, и тестирование, и документация — полный спектр, блядь. Отличный пример, как надо ставить задачи.