Модуль: Behavioral · Уровень: Senior
TL;DR#
- Senior не «избегает конфликтов» — он переводит их из эмоциональной плоскости в плоскость данных, рисков и trade-off’ов.
- Технические споры решаются критериями, а не громкостью голоса: SLA, стоимость, сроки, поддерживаемость, обратимость решения.
- Disagree and commit — ключевой навык: ты можешь быть против, но после принятия решения исполняешь его как своё и не саботируешь.
- С легаси работаешь инкрементально и с измеримой ценностью, а не «давайте всё перепишем».
- Со стейкхолдерами говоришь на их языке (деньги, риски, сроки, клиент), а не на языке стектрейсов.
- Пушбэк на нереалистичные сроки — это не «нет», а «вот варианты scope/quality/time, выбирайте».
Теория / Подход#
Природа конфликта на senior-уровне#
Интервьюер проверяет не «бесконфликтность» (это red flag — значит человек либо избегает ответственности, либо врёт), а зрелость: умеешь ли ты не доводить разногласие до личного, отделять позицию человека от проблемы, и доводить ситуацию до решения, с которым команда может жить.
Базовая модель ответа на любой конфликтный вопрос — STAR + урок:
- Situation — короткий контекст (1-2 предложения).
- Task — в чём была твоя зона ответственности.
- Action — что конкретно ты сделал (не «мы»).
- Result — измеримый итог.
- Урок — что бы сделал иначе / что вынес.
Важно: на senior+ интервьюер слушает прежде всего Action и проверяет, не свалил ли ты вину на других.
Разногласия по техническим решениям#
Принцип: спор должен иметь критерий разрешения. Если два инженера спорят «gRPC vs REST» без критериев — это religious war. Senior сразу спрашивает: «По какому признаку мы поймём, кто прав? Latency? Команда уже знает технологию? Стоимость поддержки?»
Алгоритм:
- Зафиксировать, что цель у всех общая (надёжный сервис, а не «моя правота»).
- Выписать варианты и trade-off’ы письменно (мини-RFC / Decision Doc / ADR).
- Привести данные: бенчмарк, прототип, цифры из прода.
- Если данные не решают — выбрать обратимое решение (two-way door) и заложить точку пересмотра.
- Эскалировать к решающему лицу (tech lead / архитектор), если deadlock.
Пример формулировки:
«Мы с коллегой разошлись: он за то, чтобы вынести логику в отдельный микросервис, я считал, что это преждевременно. Вместо спора я предложил критерии: текущая нагрузка, частота релизов этого модуля, размер команды. По цифрам выходило, что выделять рано — связность данных высокая, отдельный деплой даст больше боли, чем пользы. Я набросал короткий decision doc с обоими вариантами и метриками, мы прошлись по нему с тимлидом. Решили оставить монолит, но выделить чёткий пакет-границу, чтобы вынести потом дёшево. Через полгода границы как раз пригодились, когда нагрузка выросла.»
Disagree and commit#
Это не «прогнуться». Это: я честно высказал аргументы, решение приняли против меня, и теперь я исполняю его добросовестно и не хожу по углам с «я же говорил». Саботаж принятого решения — главный признак не-senior.
Где проходит красная линия: если решение этическое или критично по безопасности/данным — там не commit, а письменная фиксация несогласия и эскалация. Senior отличает «мне не нравится подход» (commit) от «это приведёт к утечке персональных данных» (escalate).
Пример формулировки:
«Я был против выбранной очереди — считал, что для нашего профиля нагрузки Kafka избыточна. Но команда и тимлид взвесили и решили иначе, аргументы были разумные. Я записал свои опасения в ADR, чтобы при ретро было видно контекст, и дальше вкладывался в решение полностью — написал обвязку, документацию, обучил двоих. В итоге опасения частично подтвердились по стоимости эксплуатации, но мы это спокойно обсудили на ретро без “я же говорил”.»
Работа с легаси#
Антипаттерн — «давайте всё перепишем». Senior знает, что Big Bang rewrite почти всегда проигрывает (теряется знание, зашитое в багфиксах, бизнес встаёт на полгода). Подход:
- Понять, почему код такой — обычно за «уродством» стоят реальные требования и хотфиксы.
- Покрыть тестами / characterization tests перед изменением.
- Strangler Fig — постепенно перенаправлять трафик на новый код, оставляя старый рабочим.
- Привязать рефакторинг к бизнес-ценности — рефакторить то, что часто меняется или часто ломается, а не то, что эстетически не нравится.
- Boy Scout Rule: оставляй модуль чуть чище, чем нашёл, в рамках текущей задачи.
Пример формулировки:
«Достался сервис без тестов, который все боялись трогать. Я не стал предлагать переписать — вместо этого добавил characterization-тесты на ключевые сценарии, чтобы зафиксировать текущее поведение, потом по Strangler перенёс самый горящий кусок (расчёт цены, который чаще всего ломался) за новый интерфейс. Рефакторинг я обосновал не “код плохой”, а тем, что этот модуль давал 40% инцидентов. После этого инциденты по нему упали, и команда перестала бояться релизов.»
Общение со стейкхолдерами#
Главное правило: переводи технику в их валюту. Продакт думает фичами и сроками, бизнес — деньгами и рисками, поддержка — количеством тикетов. «У нас техдолг» им не говорит ничего; «из-за этого участка кода каждый релиз занимает на 2 дня дольше и даёт N инцидентов» — говорит.
Приёмы:
- Начинай с вывода/рекомендации, потом обоснование (пирамида Минто).
- Давай варианты с trade-off’ами, а не один ультиматум.
- Не прячь плохие новости — приноси их рано и с планом.
- Управляй ожиданиями: лучше обещать консервативно и перевыполнить.
Пример формулировки:
«Продакт хотел фичу к дате запуска маркетинга. Я не сказал просто “не успеем”. Я показал: есть полный вариант на 3 недели и есть MVP на 1 неделю без редактирования и с ручной модерацией. Объяснил, что MVP покрывает 80% сценариев запуска, а остальное докатим следом. Он выбрал MVP, маркетинг не сдвинулся, и мы не выгорели.»
Пушбэк на нереалистичные сроки#
Senior никогда не говорит просто «нет» и не молча геройствует, выгорая. Он делает дедлайн разговором о trade-off’ах через треугольник scope / time / quality (resources обычно не масштабируется мгновенно — закон Брукса).
Алгоритм:
- Уточнить, откуда дата и что за ней стоит (жёсткое внешнее обязательство или «хотелось бы»).
- Дать честную оценку с разбивкой и допущениями.
- Предложить варианты: урезать scope, сдвинуть дату, осознанно срезать quality (с явной фиксацией техдолга), фазировать поставку.
- Подсветить риски молчаливого согласия (что сломается, какой долг накопится).
- Зафиксировать решение письменно.
Пример формулировки:
«Мне дали 2 недели на то, что честно тянет на 5. Я не стал кивать. Разбил задачу, показал, где основная неопределённость — интеграция со сторонним API без песочницы. Предложил три варианта: выкатить к дате только happy-path и без retry-логики, сдвинуть на неделю ради устойчивости, либо параллельно подключить второго человека на интеграцию. Менеджер выбрал фазирование. Главное — я зафиксировал, что happy-path-версия требует доработки в следующем спринте, чтобы это не забылось как “уже сделано”.»
Антипаттерны#
- «У меня не было конфликтов» — звучит как избегание ответственности или неумение в рефлексию.
- Обвинение других — «команда тупила», «менеджер не понимал». Интервьюер сразу ставит минус.
- Геройство в ущерб себе и команде — молча согласиться на нереальный срок и выгореть.
- Религиозные войны без критериев — спор ради правоты, а не результата.
- Big Bang rewrite легаси без тестов и без бизнес-обоснования.
- «Я же говорил» после disagree and commit — саботаж принятого решения.
- Техножаргон со стейкхолдерами — «у нас гонка горутин», когда надо «сервис иногда отдаёт неверные данные под нагрузкой».
- Конфликт переходит на личность — «он всегда так делает» вместо «это решение даёт такие риски».
- Эскалация как первый шаг вместо попытки решить на своём уровне (или наоборот — эскалация слишком поздно, когда уже горит).
Вопросы на собеседовании#
В: Расскажи о техническом разногласии с коллегой. Как разрешили? О: STAR. Подчеркни: общая цель, перевод спора в критерии, данные/прототип, письменная фиксация, и итог — включая что отношения с коллегой не пострадали. Главное — покажи, что был готов оказаться неправым.
В: Был случай, когда ты был категорически против решения, но его всё равно приняли. Что делал? О: Это прямой вопрос про disagree and commit. Покажи: аргументировал, проиграл, зафиксировал несогласие, дальше вложился полностью без саботажа. Бонус — отметь, где красная линия (безопасность/этика), за которой не commit, а эскалация.
В: Как ты подходишь к большому куску легаси, который надо менять? О: Сначала понять почему он такой, покрыть тестами, инкрементально (Strangler), привязать к бизнес-боли. Явно скажи, что Big Bang rewrite — почти всегда плохая идея и почему.
В: Продакт настаивает на сроке, который нереален. Твои действия? О: Не «нет», а варианты через scope/time/quality. Честная оценка с допущениями, подсветка рисков молчаливого согласия, письменная фиксация выбранного варианта и накопленного долга.
В: Как объяснишь не-техническому стейкхолдеру, зачем нужен месяц на техдолг? О: Переведи в их валюту: скорость релизов, число инцидентов, риск для конкретного клиента/выручки. Дай варианты (всё/частично/ничего) с последствиями каждого. Не моральное «надо», а цифры и риск.
В: Опиши конфликт, который ты разрешил плохо. Что бы сделал иначе? О: Не уходи в «у меня всё всегда хорошо». Возьми реальный кейс, где, например, эскалировал слишком поздно или продавил своё решение силой авторитета. Покажи рефлексию и конкретное изменение в поведении.
В: Член твоей команды постоянно не согласен и тормозит решения. Как поступишь? О: Сначала 1:1 — понять, это техническая позиция или что-то личное/процессное. Дать пространство высказаться, ввести критерии и таймбокс на решение, при deadlock — эскалация с зафиксированными вариантами. Цель — разблокировать команду, не «победить» человека.
В: Тебе дали задачу, которая, по-твоему, вообще не нужна бизнесу. Что делаешь? О: Не молча делать и не молча отказываться. Уточнить цель и метрику успеха задачи у заказчика — часто всплывает контекст, которого не видел. Если после этого всё ещё считаешь её бесполезной — аргументировать с альтернативой, но быть готовым к disagree and commit.
На что копают на senior+#
- «Я» vs «мы»: senior берёт ответственность за конкретные действия, а не прячется за командой. Но и не приписывает себе всё.
- Перевод на язык бизнеса: умеешь ли ты говорить со стейкхолдерами не стектрейсами, а рисками/деньгами/сроками.
- Обратимость решений: понимаешь ли разницу между one-way и two-way door — для обратимых решений быстро коммититься, для необратимых требовать данных.
- Управление вверх (managing up): пушбэк на сроки и на менеджмент — без агрессии, через варианты и фиксацию.
- Эмоциональная зрелость: отделяешь позицию от человека, не носишь обиды, чинишь отношения после конфликта.
- Системность: после конфликта меняешь процесс (ADR, критерии, ретро), чтобы такое не повторялось, а не только тушишь конкретный пожар.
- Где красная линия: понимаешь, когда disagree-and-commit неуместен (безопасность, данные, этика, legal) и надо эскалировать письменно.