
За последние пару лет рынок разработки заметно изменился. Сегодня многие сильные инженеры ищут работу месяцами — конкуренция выросла в разы. Но у нанимающих менеджеров есть свой парадокс: несмотря на огромное количество кандидатов, найти людей, которые действительно решают задачи, по-прежнему сложно.
Код становится всё проще генерировать. AI уже может предложить архитектуру, написать функцию и подсветить ошибки. Но ни один инструмент не отвечает за главное — чтобы система действительно заработала в продакшене и продолжала работать после релиза.
Поэтому ценность разработчика сегодня не просто в умении писать код или знать правильные паттерны. Она в способности доводить задачи до рабочего результата.
Как нанимающий менеджер, я стараюсь находить и продвигать именно таких людей.
В начале я тратил много времени на технические интервью: гонял кандидатов по теории, обсуждал SOLID, паттерны проектирования, тонкости версий языка. Но всё равно через пару месяцев часто выяснялось, что человек не тянет.
Когда я начал задавать два простых вопроса, многое стало понятнее гораздо раньше. Иногда буквально за несколько минут разговора становится ясно, сможет ли разработчик пройти испытательный срок.
Это, конечно, не стопроцентная гарантия. Но корреляция оказалась удивительно высокой.
Эти вопросы не про синтаксис и не про правильные формулировки. Их нельзя выучить за вечер перед интервью.
Кто отвечает за задачу?
Пишете ли вы unit-тесты?
На первый взгляд — простые вопросы.
На практике — это быстрый способ понять уровень инженерного мышления.
Вопрос №1. Кто отвечает за задачу?
Как-то я наблюдал две очень похожие ситуации в одной большой компании.
Ситуация №1.
Огромный проект. Много команд: мобильные, бэкенд, инфраструктура, поддержка, аналитики, тестирование. Каждый отвечает за свой кусок.
Пользователь пишет в поддержку: в мобильном приложении не обновляются данные. Поддержка отправляет тикет мобильной команде. Мобильный разработчик пересылает его на бэкенд: «Похоже, бэк не присылает данные», а тот отвечает: «Мы всё отправили в WebSocket, у нас всё нормально». Потом вспоминают, что вебсокет-сервером занимается инфраструктура. Инфраструктура проверяет и говорит, что сервер работает как положено.
Тикет по кругу проходит несколько команд. У каждой со своей стороны всё выглядит нормально. Никто не попытался пройтись по логам, воспроизвести сценарий, решить проблему, все просто закрыли свою задачу с формулировкой: «Проблема не у нас».
Но у пользователя данные всё так же не обновляются.
Ситуация №2.
Та же компания и проект, но другая команда.
Приходит тикет: на форме некорректно работает валидация поля. Бэкенд-разработчик начинает разбираться, что происходит. Смотрит, какой паттерн отправляется с сервера и как он используется. Выясняется, что с бэкенда всё приходит корректно, но на фронте на этой форме используются свои правила валидации. Он объясняет фронтенду, где именно возникает проблема. Параллельно заводит тикет в техдолг: перевести платёжные формы на валидацию с бэкенда. И передает его продукту, чтобы задачу включили в работу.
В обеих историях — опытные бэкенд-разработчики. Давно в компании, сильные технически, работают в похожих условиях. Но одна история заканчивается тем, что тикет просто гуляет между командами. А другая — тем, что проблему всё-таки закрывают.
Со временем я заметил, что есть очень простой способ заранее понять, какой из этих сценариев скорее всего повторится. Достаточно задать один вопрос:
Кто отвечает за задачу?
Ответы почти всегда укладываются в две модели мышления.
Первая модель звучит просто: «Я».
И дело не в красивой формулировке. Важно, как человек это произносит и что стоит за этим ответом.
Обычно за таким «я» скрывается позиция владельца результата. Такой разработчик не ждёт идеального ТЗ. Он уточняет требования, если видит пробелы. Поднимает риски, если что-то выглядит хрупким. Спрашивает «а что будет, если…», прежде чем писать код. Проверяет свою функциональность сам, а не перекладывает это целиком на QA. Думает не только о том, чтобы задача закрылась в трекере, а о том, чтобы она продолжала работать после релиза.
Такие инженеры сильнее всего выделяются на фоне остальных. Их компании стараются нанимать и удерживать. И когда начинаются сокращения, именно они обычно остаются последними в списках на выход.
Именно такая проактивность сегодня даёт разработчику большое преимущество перед AI: код он уже умеет генерировать неплохо, но ответственность за результат всё равно остаётся на инженере.
Есть и другая модель.
Человек начинает делить ответственность по ролям: «Я отвечаю за код, дальше — QA», «За требования отвечает аналитик», «Инфраструктура — это не ко мне». Формально всё корректно. В зрелых процессах зоны ответственности действительно распределены.
Такие разработчики могут быть технически сильными. С ними можно выстроить процессы, договориться о правилах, закрыть пробелы регламентами. Но инициативы по доведению задачи до конца от них, как правило, меньше — её приходится дополнительно организовывать. В итоге на такого разработчика приходится тратить больше организационных ресурсов — а значит, его реальная ценность для команды ниже.
Именно поэтому этот вопрос для меня не про «хороший или плохой». Он про модель ответственности.
Если зона ответственности заканчивается на коммите, в продакшене неизбежно появляются «ничьи» проблемы. А пользователю всё равно, где именно сбой — на клиенте, в инфраструктуре или на бэкенде. Ему важно, чтобы работало.
Один короткий вопрос довольно точно показывает, где человек проведёт границу: возьмёт ли он задачу целиком или остановится на формальном объёме своей роли.
Поэтому для меня этот вопрос — быстрый способ понять, как человек будет закрывать задачи на практике. Иногда вместо долгого технического интервью достаточно просто спросить напрямую — и по ответу сразу становится понятно, будет ли задача доведена до результата.
Вопрос №2. Пишете ли вы unit-тесты?
Это не про догму «все обязаны писать тесты», а про отношение к коду и к тому, как он будет жить вдолгую.
Разницу в этом отношении я особенно отчётливо увидел несколько лет назад, когда собирал команду разработки в Самаре для локальной компании. Формат — офис, рынок — ограниченный. Очереди из разработчиков с серьёзным enterprise-опытом не было. Зато было много кандидатов с базовыми техническими знаниями, но глубины и системного опыта часто не хватало.
Во многом я узнавал в их примерах кода то, с чем сам сталкивался в начале карьеры. Тогда я тоже работал в проектах, где код постепенно превращался в набор решений «как получилось»: модули были связаны напрямую, логика копировалась из файла в файл, и любое изменение начинало задевать всё вокруг.
Помню, как однажды нужно было всего лишь немного изменить дизайн пагинации. Казалось бы — задача на пару часов. Но из-за копипасты и локальных доработок оказалось, что эта логика реализована в нескольких местах, причём в каждой версии немного по-разному. В итоге простая правка растянулась на несколько дней: нужно было найти все варианты, аккуратно изменить их и проверить, что ничего не сломалось. И вот тут становится понятно, зачем вообще придумали слово «техдолг». В такие моменты особенно ясно, насколько дорого обходятся решения «сделать быстро, а потом разберёмся».
Код, который показывали некоторые кандидаты на собеседованиях, очень напоминал именно такие проекты. Формально он работал. Но поддерживать его было почти невозможно: любая правка требовала долгого изучения и всегда оставался риск, что где-то всплывёт ещё один скрытый кусок копипасты.
И постепенно я заметил: один простой вопрос довольно точно показывает, насколько легко команде будет жить с кодом этого разработчика через год.
«Пишете ли вы unit-тесты?»
Он почти всегда вскрывает несколько слоёв мышления.
Отношение к качеству.
Человек, который пишет тесты, как правило, отвечает не за сам факт коммита, а за поведение системы. Ему важно, чтобы код продолжал работать завтра, через месяц, после чужих изменений. Это совсем другой горизонт ответственности.
Способ проектирования.
Тесты невозможно писать в вакууме. Очень быстро становится больно тестировать код без границ, с сильной связностью и скрытыми зависимостями. Поэтому человек, который регулярно пишет тесты, вынужден думать о модульности, управляемых зависимостях, разделении ответственности. Иначе тестирование превращается в мучение.
Отношение к изменениям.
Разработчик без тестов часто боится рефакторинга — слишком много неизвестных. Разработчик с тестами относится к изменениям иначе: он может проверить гипотезу, внести правку, быстро убедиться, что не сломал соседние сценарии. Это сильно влияет на скорость вдолгую.
Инженерная культура.
Тесты почти неизбежно тянут за собой разговоры про DI, инверсию зависимостей, принципы модульности, про то, как сделать код расширяемым, а не хрупким. Не потому что «так правильно», а потому что иначе система начинает сопротивляться.
Поэтому этот вопрос для меня — не про тесты, а про опыт работы с изменяющейся и сложной системой.
А что если эти вопросы задать тимлиду?
Со временем я заметил, что они отлично работают и при найме лидов. Только смысл ответа начинает немного меняться.
Вопрос №1. Кто отвечает за задачу?
Ответ на него для разработчика и тимлида оказывается разным.
Для разработчика ответ «я» — сильный сигнал. Для тимлида — уже не всегда.
В одной из команд, за работой которой мне довелось наблюдать, тимлидом сделали отличного инженера. Сильный фулстек, знал систему от и до, умел пошутить в подходящий момент, уверенно разбирался в сложных задачах и действительно отвечал за результат.
Сначала всё выглядело отлично. Бизнесу было приятно общаться с лидом — он понимал контекст, говорил по делу и не уходил в лишние технические детали. Команде тоже было комфортно: рядом сильный тимлид, который мог разобраться в сложной задаче и взять на себя общение с бизнесом.
Проблемы проявились постепенно. Большинство решений проходило через него: архитектура, сложные баги, приоритизация. Если что-то было непонятно — шли к нему. Ключевые задачи он всё чаще брал на себя. Стоило ему уйти в отпуск — и система начинала скрипеть. Нагрузка на него росла, он начал выгорать. И со временем стало очевидно: без него система не работает.
В итоге роли просто перераспределились. Он ушёл в архитектурную позицию, где мог сосредоточиться на системе и сложных технических решениях. А роль тимлида взял на себя другой человек — тот, кто строил работу команды иначе, распределяя ответственность и решения внутри команды. И довольно быстро стало заметно, что система перестала зависеть от одного человека.
И вот здесь вопрос начинает звучать иначе.
Для разработчика концентрация ответственности — это сила. Для тимлида она легко превращается в узкое место системы. Это не значит, что тимлид не отвечает за результат. Но его ответственность — не в том, чтобы сделать задачу самому, а в том, чтобы команда могла её решить.
Его задача — выстроить процесс, в котором решения принимаются внутри команды. Работать со стейкхолдерами, снимать блокеры, держать фокус на приоритетах, обеспечивать предсказуемость поставки — но не становиться главным исполнителем.
Хороший разработчик говорит: «Я отвечаю за задачу».
Хороший тимлид отвечает иначе: «У задачи есть конкретный ответственный. Команда отвечает за результат. А роль тимлида — сделать так, чтобы команда могла его добиться».
Поэтому, когда я задаю тимлиду вопрос «кто отвечает за задачу?», я слушаю не готовность подставить плечо. Я слушаю, умеет ли он строить систему ответственности — или собирается стать её единственной точкой опоры.
Вопрос №2. Пишете ли вы unit-тесты?
Вторая история — из начала моей карьеры.
Я работал в небольшом стартапе. Тимлид был классный парень: энергичный, харизматичный, с отличными софт-скиллами. С делегированием проблем не было — он спокойно передавал ответственность разработчикам, не микроменеджил, доверял.
Проблема была в другом. Он плохо чувствовал техническую сторону разработки, не видел реальную сложность реализации задач, архитектурные риски и не понимал, зачем тратить время на тесты и инженерные практики. И не было никакого техлида, который закрывал бы эти вопросы вместо него.
Стартап жил в классическом режиме «всё горит», «надо было вчера», «потом разберёмся». При этом амбиции были серьёзные: кратный рост нагрузок, масштабирование, «стать лидерами рынка». Но реальность была далека от этих планов: система не была к ним готова, инженерная база отсутствовала. Со временем руководство стало недовольно тем, как развивается техническая часть продукта, и решило пригласить нового лидера с рынка.
Ownership был, делегирование — тоже. Не хватало инженерного понимания.
И вот здесь второй вопрос становится критичным. Для тимлида недостаточно просто распределять ответственность. Важно понимать инженерную реальность системы — её ограничения, риски и последствия решений. Поэтому вопрос про unit-тесты для тимлида — это не про количество тестов, а про понимание архитектуры, рисков и долгосрочной устойчивости системы.
У роли тимлида, конечно, свой набор требований и ожиданий. Но показательно, что те же два простых вопроса работают и для разработчиков, и для лидов — меняется не вопрос, а смысл ответа.
Почему я вообще верю в эти два вопроса?
Они про отношение к ответственности и к качеству — а это меняется гораздо медленнее, чем технологии.
Если после публикации этой статьи кто-то начнёт отвечать «правильно» — это отличный исход. Значит, эти вопросы уже начали работать.
Но выучить формулировку проще, чем рассказать реальную историю о том, как вы разбирались с инцидентом в ситуации, где формально «это не мы», но у пользователя не работает. Как доводили задачу до рабочего состояния? Как поддерживали систему спустя год после релиза?
Инженерную зрелость сложно сыграть — она проявляется в деталях. Именно это я и пытаюсь услышать на интервью.
И, честно говоря, эти вопросы полезно периодически задавать и самому себе.
Совет для соискателей
Если перевести эту мысль в практические шаги, то они довольно простые.
Научитесь писать тесты, если никогда этого не делали. Даже базовый опыт работы с unit-тестами уже сильно меняет мышление разработчика. Если такой опыт есть — не стесняйтесь явно указывать его в резюме.
Если вас просят прислать пример кода или выполнить тестовое задание — добавьте тесты. Покажите не только решение задачи, но и то, как вы проверяете его корректность. Пара юнит- или приёмочных тестов часто говорит о подходе разработчика больше, чем сам код.
Делайте акцент в резюме не на технологиях, а на решённых задачах. Не просто «работал с Java и Spring», а «оптимизировал систему расчёта тарифов, что сократило время обработки заказов в два раза» или «переписал модуль интеграции с платёжным провайдером и снизил количество ошибок».
Компании платят разработчикам не за код — они платят за решение своих проблем.
Поэтому в эпоху AI всё больше ценится не способность написать функцию, а способность взять ответственность за результат и довести систему до рабочего состояния. Пока AI остаётся инструментом, ответственность за результат всё равно лежит на инженере.
В условиях высокой конкуренции выигрывают те, кто показывает, какую бизнес-ценность они приносят, а не просто как хорошо умеют программировать.
Разумеется, у каждой команды свой процесс найма. Где-то важнее алгоритмы, где-то архитектура, где-то продуктовый опыт. Эти два вопроса просто оказались теми, которые лучше всего работают в моей практике. Если бы вам разрешили задать кандидату всего два вопроса — какие бы это были?
Комментарии (63)

andyblaster
25.03.2026 08:53Кто отвечает за задачу?
У кого есть административный ресурс. Комплименты Я-модели заканчиваются там, где ответственный, проактивный, неперекладывающий сотрудник упирается в невозможность осуществления необходимых изменений из-за линейности своей должности.
Команда отвечает за результат. А роль тимлида — сделать так, чтобы команда могла его добиться.
Понятно. Здравствуй, коллективная ответственность!

shai_hulud
25.03.2026 08:53А) не работать там где для решения своих должностных обязанностей (доставка работающего функционала) мешает "линейная структура"
Б) донести до "линейных" окружающих, что все таки бизнес это не пансионат для содержания менеджеров а комбайн по производству денег. Софт скиллы, все такое

andyblaster
25.03.2026 08:53Не линейная структура, а линейная должность в иерархической структуре. Где бы ни работал, как только начинается кризис, все скатывается в ответственность без полномочий. Ну собственно, да, потом уходишь и ищешь новое место.
На линейной должности есть полное право требовать зрелую экосистему менеджмента и выстроенную среду условий для выполнения чисто технической работы, не заморачиваясь на риски, проблемы, убытки и миссию бизнеса.

sg4tech Автор
25.03.2026 08:53"упирается в невозможность осуществления необходимых изменений из-за линейности своей должности."
Да, согласен, неприятная и сложная ситуация. На практике помогают идеи из моделей внедрения изменений: искать точки влияния, союзников и постепенно расширять зону ответственности.
Если вдруг нужна будет помощь - пишите в директ, попробую помочь.

Akon32
25.03.2026 08:53Команда отвечает за результат.
Здравствуй, коллективная ответственность!
Не совсем так. Тимлид отвечает за результат команды (выполнение всех задач), а разработчик отвечает за поставленные лично ему задачи. Всегда можно построить процесс так, чтобы у каждого его фрагмента был ответственный. Важно то, что роль тимлида включает ответственность "за всё" (в пределах команды) и возможность смены исполнителя задачи, а роль разработчика не имеет отвественности за всю команду.
Хотя да, в некоторых организациях бывает, что члены команды разработки несут коллективную ответственность за косяки ближайших коллег, менеджеров, других отделов, коммерческого и генерального директоров и т.д., а тимлид не имеет полномочий делать даже замечания команде, но это некая нездоровая организация процесса.

andreygn
25.03.2026 08:53Тоже глаз зацепился. Коллективная ответственность может легко стать безответственностью. Тоже коллективной. Это хорошо видно в крупных организациях. Первый случай у автора.
Но при этом схема отвечает разработчик, лид обеспечивает условия. Лид становится узким местом. Лид заболел/ушёл в отпуск/уволился - работа встала. Такое себе. Поэтому бы перефразировал. Коллективная ответственность. Но прежде - ответственность исполнителя.

Evgueni_Gavrilov
25.03.2026 08:53как бы вы оценили разработчика ядра Linux, который не пишет unit-тесты?

sg4tech Автор
25.03.2026 08:53Как очень крутого разработчика :)
В случае низкоуровневых разработчиков точно своей отдельный контекст и стоит придумывать другую систему вопросов.
Evgueni_Gavrilov
25.03.2026 08:53Хорошо, низкоуровневые – отдельный контекст. А разработчик распределённых систем, который верифицирует корректность через TLA+ и chaos engineering?

sg4tech Автор
25.03.2026 08:53А вот тут думаю вопросы хорошо подходят. Если в ответе будет про TLA+ и chaos engineering, то это хорошее начало обсуждения для понимания инженерной зрелости.

Evgueni_Gavrilov
25.03.2026 08:53но ваш вопрос в статье конкретно про unit-тесты, а не про практики верификации в целом.
если разработчику распределённых систем, практикующему TLA+ и chaos engineering, задать вопрос “пишете ли вы unit-тесты”, то он ответит “нет”, потому что TLA+ это принципиально иной инструмент совершенно иного уровня инженерии.
и получается, что проблема не в кандидате, а в вопросе?

sg4tech Автор
25.03.2026 08:53Я бы с удовольствием заменил вопрос на более общий, если есть удачный вариант - пожалуйста, поделитесь.

Evgueni_Gavrilov
25.03.2026 08:53вы предлагаете мне остаться в том же подходе – заменить одну редукцию на другую, но проблема не в том, что выбран неудачный инструмент, а в самом подходе: редуцировать оценку инженерной зрелости до одного вопроса или до использования одного инструмента.
unit-тесты – частный случай; TLA+ – частный случай; chaos engineering – частный случай.
а вот зрелость это не владение конкретным инструментом, а способность выбрать адекватный инструмент под контекст.

sg4tech Автор
25.03.2026 08:53Как отражал в статье, это начало разговора, а не полная замена.
Хочется на скрининге заранее понимать, кто более перспективный. Пока из вашего ответа не понял как тогда лучше систему выстраивать?
Понимаю, что текущие вопросы неидеальные, но точно заинтересован в поиске более эффективных подходов.
Evgueni_Gavrilov
25.03.2026 08:53обратите внимание на то, что вы сами сказали: “хочется на скрининге заранее понимать, кто более перспективный”.
вот это и есть ядро проблемы: вы продолжаете искать редукцию (один-два вопроса, которые за минуты дадут полноценную оценку) уже после того, как её ограниченность была обоснована, ещё и от меня просите более другую/правильную “серебряную пулю” в рамках этой же редукции.
именно поэтому вам и сложно понять, как выстраивать систему: потому что система – это не два вопроса.
инженерная зрелость многомерна, контексты различаются, и попытка свести оценку к быстрому фильтру неизбежно будет приводить к потере тех, кого вы сами выше назвали “очень крутыми”.

arturdumchev
25.03.2026 08:53Со всем, что вы писали, согласен, но в реальности просто нет времени досконально разбираться с каждым кандидатом. Могу даже поверить, что предложенные автором вопросы дают лучшую предсказательную силу, чем алгоритмические, архитектурные и интервью на знание ЯП.
Последний раз, когда я собеседовал разработчика, он очень плохо отвечал на вопросы — и по ЯП, и по архитектуре. И обратная связь от других интервьюеров была на троечку. Тем не менее, взяли его, потому что все остальные были еще хуже, а еще и ставку у нас могли забрать. В итоге разработчик разобрался в первую неделю с довольно большим проектом, никого не отвлекает лишними вопросами, пишет хороший код.
В идеале бы брать на тестовый период в пару месяцев и смотреть, как кандидат справляется, но мир далёк от идеала. Поэтому то, что предлагает автор статьи, имеет право на жизнь.
yadobr
Спасибо за статью, но мне кажется, нет каких-то простых вопросов, которые можно задать и узнать что за человек. На вопрос можно ответить правильно / неправильно. Что-то упустить, или наоборот - рассказать все достаточно полно. Но ведь тут как - пока не попробуешь с человеком поработать, не узнаешь, что за специалист перед тобой.
Кандидат может на 1-й вопрос ответить "Я!" и ошибиться (что для тимлида, конечно, не очень), но при этом, с большим энтузиазмом относиться к работе, брать на себя ответственность и предлагать решения. Для меня перечисленные качества важнее понимания принципа командной ответственности и подстраховки(их в конце концов легко объяснить).
Более того, если вы составили список "контрольных" вопросов и кандидат ответил не так. Это еще не значит, что он ответил неправильно. Возможно у него другой опыт, он побывал в других ситуациях. А возможно, и ваш собственных ответ, на ваш же вопрос неидеален.
sg4tech Автор
Да, согласен, в идеале лучше поработать с человеком и посмотреть в деле.
Но на этапе найма у нас всегда есть ограничение по времени, поэтому приходится проводить первоначальный "скрининг".
Для меня эти вопросы не про "правильный" ответ, а про то, как человек думает и как раскрывает ситуацию. Обычно на практике ответы довольно хорошо читаются между строк.
"Возможно у него другой опыт, он побывал в других ситуациях." - да, все так, именно поэтому такие вопросы использую не как "контрольную", а как способ понять модель мышления кандидата и чего от него ожидать в работе.
sofindreeva
Да, но как правило, мало волнуют ситуации, когда человек побывал в других ситуациях, подбор в команду осуществляется исходя из тех ситуаций, в которых оказывается команда, поэтому вопросы обычно подстраиваются именно под нужды команды, поэтому выберут того, кто на этапе собесов создаст о себе более удобное впечатление, из-за этого могут отсеяться действительно хорошие специалисты, но которым понадобилось бы время для адаптации