Тестовое задание для разработчика: как составить, чтобы оценить реальные навыки в эпоху ИИ
Если открыть популярные советы о том, как составить тестовое задание для разработчика, там почти всегда одно и то же: задача из реальной жизни, не дольше нескольких часов, понятные критерии. Советы хорошие, но большинство из них написано до того, как у каждого кандидата появилась нейросеть. Классическое «сделайте приложение со списком фильмов, сортировкой и фильтрами» сейчас собирается одним запросом за пару минут, и проверять в таком решении нечего.
Это не значит, что тестовые задания умерли. Наоборот, сейчас это лучший способ понять, как человек будет работать, если проверить его на контестах и алгоритмических задачах уже не получается. Почему так, мы подробно разобрали в статье «Тестовое задание или алгоритмические задачи». Но само задание нужно строить иначе. Ниже о том, как именно.
Пять принципов тестового задания в эпоху ИИ
Близко к реальной работе
Лучшее тестовое задание похоже на облегчённую версию задачи, которую человек будет делать в вашей команде. Сервис, интеграция, доработка существующего кода, отчёт по данным. Если в работе так не бывает, в тестовом этого тоже не должно быть.
С развилками, где решение за кандидатом
Главное отличие хорошего задания сейчас: в нём нет единственного правильного ответа. Есть требования и есть места, где кандидат должен выбрать сам: как хранить данные, что покрыть тестами, какую функциональность сделать в первую очередь, чем пожертвовать ради срока. Нейросеть может помочь написать код, но выбор за кандидата она не сделает. А именно эти выборы вы и будете оценивать.
С работой в чужом коде
Задания вида «вот готовый проект, найдите и исправьте ошибки» или «добавьте в него функциональность» сильно отличаются от написания с нуля. Нужно разобраться в чужой логике, понять, где проблема, и не сломать то, что работает. Это почти вся реальная работа разработчика, и это хорошо показывает уровень.
Объём на один-три вечера
Задание, которое занимает неделю, отпугивает сильных кандидатов: у них есть работа и другие предложения. Ориентируйтесь на один-три вечера работы и давайте дедлайн в несколько дней, чтобы человек мог выбрать удобное время. Прежде чем отправлять задание кандидатам, попросите кого-то из команды оценить, сколько времени оно займёт у специалиста нужного уровня.
ИИ разрешён, и это написано в условии
Запрещать нейросети бессмысленно: проверить это всё равно нельзя, а в работе ими пользуются все. Честнее прямо написать в условии, что ИИ использовать можно. Тогда кандидаты в равных условиях, а вы оцениваете то, что действительно важно.
Четыре формата тестовых заданий с примерами
Небольшой сервис с открытыми решениями
Что проверяет: умение спроектировать решение с нуля, организовать проект, расставить приоритеты.
Пример: «Сделайте чат-бота для клиентов банка, который отвечает на частые вопросы и передаёт сложные обращения оператору. Какие сценарии поддержать, как хранить историю диалогов и как определять, что обращение сложное, решите сами».
Найти и исправить ошибки в готовом проекте
Что проверяет: умение читать чужой код, искать причины проблем и исправлять их аккуратно, не ломая остальное.
Пример: «В репозитории небольшой сервис бронирования. Пользователи жалуются, что иногда видят пустой список свободных слотов и что одно и то же время могут забронировать двое. Найдите причины, исправьте и опишите в README, что было не так».
Доработать существующий проект
Что проверяет: умение встроиться в чужую архитектуру и расширить её, не превращая проект в лоскутное одеяло.
Пример: «В проекте есть API каталога товаров. Добавьте поиск по названию и фильтры по цене и наличию. Подумайте, что будет, когда товаров станет миллион».
Аналитическая задача
Подходит для аналитиков, дата-инженеров и разработчиков, которые много работают с данными.
Что проверяет: умение работать с данными, делать выводы и показывать их понятно.
Пример: «По выгрузке продаж за год соберите интерактивный отчёт о рынке: какие сегменты растут, где падают и что, на ваш взгляд, стоит проверить дальше».
Как написать условие задания
Хорошее условие отвечает на пять вопросов: что нужно сделать, где у кандидата свобода выбора, что сдать, к какому сроку и на что вы будете смотреть. Шаблон:
Задача. Сделайте сервис, который [что делает] для [кого]. Обязательно: [2–4 ключевых требования].
На ваш выбор. Хранилище, структура проекта, дополнительная функциональность, что покрыть тестами. Если в требованиях есть неоднозначность, решите её сами и опишите своё решение.
Что сдать. Код в репозитории и README: как запустить проект, какие решения вы приняли и почему, что сделали бы дальше, если бы было больше времени.
Срок. [N] дней. По нашей оценке, работа займёт 1–3 вечера.
Нейросети использовать можно.
Что мы оцениваем. Выполнены ли требования, работает ли проект, насколько понятен код и насколько обоснованы ваши решения.
Особенно важен пункт про README. Объяснение решений почти не генерируется вслепую: чтобы его написать, нужно понимать, что и почему ты сделал.
Что оценивать в решении
Не совпадение с эталоном, потому что эталона нет. Смотрите на пять вещей (подробный разбор с признаками хорошего и слабого решения есть в нашем чек-листе для тимлида):
- Требования. Сделано ли обязательное и как кандидат поступил там, где условие было неоднозначным.
- Работоспособность. Собирается ли проект и проходят ли тесты.
- Решения. Обоснован ли выбор хранилища, структуры, приоритетов, и объяснён ли он в README.
- Понятность. Сможет ли коллега разобраться в коде через полгода.
- Тесты. Есть ли они и проверяют ли то, что действительно может сломаться.
Удобно, когда рутинная часть проверки идёт автоматически. В техническом проекте с AI-оценкой Talense для каждого кандидата создаётся приватный репозиторий с условиями задания, решение фиксируется на момент сдачи, а дальше платформа сама собирает проект, запускает тесты и готовит ИИ-ревью: сильные стороны, слабые места, риски и вопросы для собеседования. Тимлиду остаётся посмотреть ключевые места и решить, звать ли кандидата дальше. Как это устроено в найме целиком, можно посмотреть на странице «Найм разработчиков».
Тестовое задание продолжается на собеседовании
Лучшее, что можно сделать с решением кандидата после проверки, это обсудить его. Попросите объяснить два-три решения: почему выбрана такая структура, что будет при росте нагрузки, что бы он изменил, если бы требования поменялись. За двадцать минут такого разговора вы узнаете о человеке больше, чем за час лайвкодинга, а заодно убедитесь, что решение действительно его.
Готовить такие вопросы вручную не обязательно. Talense проверяет решение автоматически и вместе с оценкой сразу предлагает вопросы для собеседования по конкретному коду кандидата: почему выбрано именно такое хранилище, что будет при параллельных запросах, где в решении риски. Тимлиду остаётся выбрать два-три самых интересных.
Частые ошибки
Давать типовую задачу из интернета. Список задач, калькулятор, блог: всё это нейросеть делает идеально, и решения разных кандидатов неотличимы.
Писать условие как пошаговую инструкцию. Если всё расписано до мелочей, кандидату нечего решать самому, и вы не увидите его мышление.
Делать задание огромным. Сильные кандидаты просто не станут тратить на него неделю.
Не объяснять, что будете оценивать. Без этого один кандидат вылизывает интерфейс, другой пишет тесты, третий оптимизирует запросы, и сравнить их невозможно.
Не давать обратную связь. Человек потратил на задание несколько вечеров, и короткий ответ с парой конкретных замечаний он запомнит надолго, вместе с вашей компанией.
Давайте кандидатам реальные задачи
Приватный репозиторий для каждого кандидата, автоматическая проверка с ИИ и готовые вопросы для собеседования. Около 5 минут на один проект.
Частые вопросы
Каким должно быть тестовое задание для разработчика?
Похожим на реальную работу в вашей команде, с местами, где кандидат принимает решения сам, рассчитанным на один-три вечера и с понятными критериями оценки.
Как составить тестовое задание, если кандидаты пользуются ИИ?
Делать задание без единственного правильного ответа, с развилками решений, работой в существующем коде и обязательным README, где кандидат объясняет свой выбор. Нейросеть поможет написать код, но решения кандидату придётся принимать самому.
Можно ли разрешать кандидатам пользоваться нейросетями?
Да, и лучше прямо написать это в условии. Запрет всё равно не проверить, а в работе разработчики пользуются ИИ постоянно.
Сколько времени давать на тестовое задание?
Сам объём работы стоит рассчитывать на один-три вечера, а дедлайн давать в несколько дней, чтобы кандидат мог выбрать удобное время.
Нужно ли платить за тестовое задание?
Если задание небольшое и похоже на учебное, обычно не платят. Если это фактически кусок реальной работы, которую компания потом использует, честно за неё заплатить.