

Старая японская поговорка гласит: «Из-за незабитого гвоздя потеряли подкову, из-за потерянной подковы лишились коня, из-за лишенного коня не доставили донесение, из-за не доставленного донесения проиграли войну». Как это относится к IT и веб-разработке? Давайте разбираться.
Разработчик пишет код, менеджер - управляет проектом. Казалось бы, схема проста и не имеет подводных камней. Однако, их взаимодействие может напрямую повлиять на развитие и успешный деплой всего приложения.
Разработчик, как уже было сказано, пишет код. Код - это набор инструкций для машины. Хороша та программа, которая своими инструкциями предусматривает почти все возможные сценарии и должным образом на них реагирует. Программист должен создавать четкие последовательности действий, что формирует особую форму мышления, в которой все заранее предопределено.
В другом углу ринга находится менеджер, который постоянно должен общаться с людьми с различными мнениями, знаниями, мотивами, которые могут врать, тянуть время, нести чушь и верить в эзотерику. Мы с командой ни в коем случае не хотим обидеть наших клиентов, это приведено лишь с одной целью - показать, что все люди разные. А значит, что и мир в рабочих моментах для менеджера - хаотичен и полон сюрпризов.
Вырисовывается явный конфликт мировоззрений детерминированного мира программиста и вероятностного мира менеджера. В идеальных условиях дискомфорт от этого диссонанса делится пополам, но в реальности часто всё бывает далеко не так.
Вот простой пример: менеджер поговорил с клиентом, который захотел сделать сервис по подбору котят, и решил, что для этого нужно добавить в одном из разделов таблицу. И вот он говорит разработчику:
При чем здесь детерминированность и вероятность? Притом, что стороны диалог то вели, но не поняли друг друга. Во-первых, огромная пропасть в исходных данных. Так пара десятков или тысяч котят? Поскольку менеджер живет в вероятностном мире, он допускает, что клиент захочет добавить больше 1000 котят, либо сделает это постепенно со временем. А что же услышал программист? Лимит котят равен 1000. Но ведь когда он будет писать код, программист не сможет поддерживать определённый кейс только чуть-чуть. Он будет поддерживать этот кейс либо полностью, либо никак. Значит, разработчик будет проектировать приложение сразу под 1000 котят, отсюда и сроки.
При этом, стоит немного поменять диалог, и эта проблема исчезнет сама собой:
Есть одна волшебная фраза, которую должен озвучить программист: “А это реально нужно? Без этой маленькой фичи разработка будет быстрой, а с ней - минимум в N раз дольше”. Она очень часто может сэкономить и время и деньги, но чаще всего не звучит.
Получается, что программисты плохие? Нет.
Как уже было написано выше, стороны должны поровну делить дискомфорт. Хороший менеджер должен сам узнать, из чего состоит эстимейт (это оценка времени или усилий, необходимых для выполнения задачи), что доставляет больше всего дискомфорта, и в каждой конкретной ситуации давать именно те исходные данные, которые оптимальны для задачи. А программист должен ему в этом помогать, подсказывая, что можно выбросить, экономя ресурсы, а где дешево и сердито сделать с запасом. В приведенном примере прослеживается очевидная вещь: в большинстве проблем виновата коммуникация.

Менеджеры, в основном, любят и умеют хорошо говорить, что и не удивительно, ведь это их основная работа. Программисты тоже любят и умеют говорить, по правде говоря, с машинами. Поэтому диалоги между ними часто напоминают попытку глухого объяснить немому, как выговаривать твердый знак. Повторим момент, что дискомфорт от взаимодействия стороны должны делить поровну. Поэтому и программистам, и менеджерам нужно понимать и принимать особенности друг друга, чтобы этот самый дискомфорт минимизировать.
А теперь, жестокая правда для программистов. Менеджерам чаще всего абсолютно без разницы, как именно будет реализована та или иная фича в техническом плане. Главный вопрос, который мучает менеджера, состоит в возможности реализации этой самой фичи, скорости разработки, качества и цены, которой сказать клиенту. Менеджеры очень часто не имеют интереса или компетенции разбираться в наших технических штуках, а ещё чаще при попытке разобраться, от непривычки и большого потока информации, которую ещё нужно переварить, у менеджера могут попросту “задымиться” мозги.
Разработчик понимает, на каком этапе его фича или весь проект, только когда смотрит в код. А как же узнать об этом менеджеру, учитывая, что он так не может? Самый простой и логичный ответ - спросить у разработчика. При этом, менеджер отвечает за проект перед пользователем, клиентом, начальством, а иногда даже и Родиной. И очень сложно за что-то отвечать, не понимая, что вообще сейчас происходит. Отсюда эти вечные вопросы:
Обычно эти вопросы задаются не с целью давления, как кажется разработчикам, просто менеджеры искренне не знают. Их действительно можно и нужно понять разработчикам, ведь по сути менеджеру нужно рассказать клиенту, что сейчас делается, показать, что было обещано сделать и уже сделано, либо объяснить, почему не успели. Но, по личному опыту и опыту коллег, который будет приведен позже, иногда для разработчика это выглядит как прессинг и проверка на устойчивость/компетентность/адекватность (нужное подчеркнуть).
Как тогда защитить себя от стресса разработчику? Самое первое - перестать воспринимать такие вопросы как личные оскорбления и сомнения в своих навыках и просто отвечать, как есть. Положил продакшн, потоп, пожар, кошка рожает, банально нет сил делать или же всё-таки сделал по срокам как обещал - об этом всём нужно говорить как есть. А лучше вообще не дожидаться, когда менеджер забьёт тревогу, и написать первым, чтобы можно было вовремя решить вопрос.
Есть ещё одна особенность взаимодействия разработчика и менеджера. Это жизнь в разном времени: Менеджер в будущем, а разработчик - в настоящем. Обычно в эту цепочку можно добавить ещё и тестировщика, который живет в прошлом.
Чтобы менеджер успешно управлял проектом, ему нужно составить план, распределить задачи в команде, сделать так, чтобы эта самая команда не осталась без задач на случай, если менеджер уйдет на больничный, в запой или вовсе выгорит. Поэтому, пока разработчики делают один модуль, менеджер уже описывает следующий. Так возникают ситуации, когда каждый пытается перетянуть другого в свой таймлапс:
Естественно, никому из участников процесса не нравится, когда их вырывают из своей зоны комфорта. Есть универсальный и простой совет для такой ситуации: “Раз этого не избежать, значит это нужно организовать”.
Представьте, вы пытаетесь уснуть, и в тот момент, когда уже почти уснули, кто-то постоянно вас дергает и спрашивает: “Ты спишь?”. И так по несколько раз за день, причем каждую ночь. Разработчикам об этом известно не понаслышке, они то же самое чувствуют, когда только войдут в состояние потока, а их выдергивают фразой: “Ты занят?”. Для качественной и продуктивной работы главный враг разработчика - внешний раздражитель. Обычно, состояние потока длится как минимум около 2-3 часов. Начинается с разбора, что уже было сделано, вспоминания проекта, настройки на работу. В самом разгаре продуктивность, концентрация и мотивация находятся на своём пике, что позволяет успешно щелкать задачи как семечки. Заканчивается оно завершением собственного плана, удовлетворенностью от себя и работы, хорошим настроением и приближением проекта к деплою. Что будет, если в этот момент потревожить программиста? Потеря потока и времени, а в дальнейшем входить в поток заново. Отсюда и раздражение программиста, и недовольство менеджера перфомансом последнего.
Всё это звучит красиво, однако, есть небольшая проблема. А как тогда коммуницировать, если всегда есть шанс сбить программиста с потока? 21 век - век социальных сетей. Договоритесь с командой об удобном всем канале связи и пишите туда. Как только адресат освободится немного - глянет.
Конфликт между разработчиком и менеджером необратим, потому что все мы люди, и конфликт - природа человека. Наша задача - научиться понимать друг друга, искать компромиссы, поддерживать и дружить. В первую очередь потому, что команда всегда в одной лодке, и если потонет один - потонут все. Здесь и кроется секрет японской поговорки, приведенной в начале. Коммуникация - это не монолит, она подобна конструктору, который выстраивает вся команда по кирпичику. Чтобы не переходить за грань и не превращать статью в книгу, многие темы и приёмы не были обозначены. Но некоторые моменты нужно отдельно подчеркнуть.
Нравится программистам или нет, но менеджер напрямую влияет на работу первых, на зарплату и даже на увольнение. Знать, что ценят в разработчиках и как строить с ними продуктивные взаимоотношения - прямой путь к быстрому росту, блестящей карьере и зарплате выше рыночной.
А зачем же тогда менеджеру “дружить” с программистами?
Менеджер сам ничего не производит. Все успехи менеджера - это успехи его команды и результат её непосредственной работы. Потому, когда в команде есть взаимопонимание и царит дружественная атмосфера - дело пойдёт в разы быстрее. А вообще, все мы хорошие ребята, так что давайте жить дружно!
Перед написанием статьи был собран анонимный фидбек от наших сотрудников. На его основе и написана эта статья. Стиль текста был изменён. Если вы узнали себя или кого-то из коллег, не нужно обижаться на слова, а просто посмотрите со стороны на мнение собратьев:
На случай, если кто то не хочет читать полностью, ниже приведена более компактная форма со счетчиком микротем. Для менеджеров существует такая же выноска.
Фидбек от разработчиков:
Положительные черты:
Отрицательные черты:
Рекомендации:
Микротемы:
Небольшой вывод: Менеджеру тяжело. Нужно это понять. Он постоянно в коммуникациях. Тут орет один клиент, второй не хочет платить, третий спамит правками и аудио. А еще нужно общаться с командой, ставить и проверять задачи, планировать, работать с кучей документов, делать внутренние задачи. Очень часто мы сталкиваемся с негативом. Поэтому разрабы - это наши люди, общение с ними не должно все ухудшать, а быть наоборот островком уверенности и адекватности)
Положительные черты:
Отрицательные черты:
Рекомендации:
Микротемы:
Список вдохновений: