Привет. Вот уже полгода с хвостиком я Head of Backend в компании Scalable Solutions, руковожу разработкой бэкенда, который связывает в одно целое большое количество подсистем внутри трейдинговой платформы и обеспечивает коммуникацию между брокерами и миллионами пользователей. Хочу рассказать про свой путь в разработке и управлении разработкой – как дошел до глобального финтеха, чему учился (и до сих пор учусь), что меня мотивировало на разных этапах, какого стиля руководства придерживаюсь сейчас и почему. Надеюсь, кому-то будет интересно, а возможно, даже полезно.

В качестве вступления я решил выбрать эту картинку. Увидев ее впервые году так в 2012 или 2013 я сразу понял, что хочу стать правильным руководителем.

Из колхозной молодежи панковал (зачеркнуто) программировал один лишь я

Большую часть своей жизни я провел в небольшом селе на юге России. Впервые с программированием столкнулся на уроках физики: у нас были БКшки, на которых можно было писать на Basic простенькие программы и даже игры. Потом были трехмесячные курсы от службы занятости по Delphi, на которых я начал постигать удивительный мир разработки софта. Правда, после этих курсов я мог не очень много: клепать формочки и писать немного логики.

В селе достать какую-нибудь литературу было крайне тяжело – интернета не было, книг по разработке в библиотеке не водилось. В ближайших городах также особо достать ничего не получалось. Была у меня электронная библиотека (не помню, откуда я её вообще взял), там были книги/статьи по Линуксу и языку C. Так вот и изучал потихоньку. Линукс вообще меня очень влек к себе, и когда я наконец-то нашел диск с ним, я был просто счастлив – винда исчезла с моего домашнего компьютера бесследно.

Году так в 2007 я узнал, что такое Qt, и нашел отличный форум, посвященный этой библиотеке. Как любой уважающий себя разработчик, я начал писать свои супер-пупер текстовый редактор и файловый менеджер. Кстати, второй даже сейчас можно запустить, правда, качество кода там ужасное. Самое классное, что к написанию ФМ подключился один разработчик с форума. Он показал мне, что такое git, как разрабатывать совместно, и вообще, научил меня куче всяких премудростей. 

На заметку. Ищите наставника, это самый быстрый способ научиться.

В дальнейшем я был наставником для большого количества людей, возвращал свой долг, распространяя знания. 

Работать я начал специалистом службы автоматизации и технического обеспечения в Отделе соц. защиты. Звучит внушительно, но на деле обычный эникей – принеси-подай, сгоняй к бухгалтерам, у них опять винда не грузится. Но в свободное время на том же Delphi, а позднее на C++Builder (а еще позднее Qt), я упрощал жизнь себе и коллегам: автоматизировал рутину, формировал всякие выборки для отчетов. Тогда же написал первую многопользовательскую программу, которая брала данные из FoxPro’шных баз, сливала их в Postgres и предоставляла удобный интерфейс для выборок информации. 

Ко всему прочему, у меня была возможность наблюдать за управлением нашего отдела. Заведующая была примером хорошего руководителя.

А еще руководитель должен быть внимательным – подмечать все, что происходит, и реагировать, когда это необходимо. И самое главное, руководитель должен быть примером для своих подчиненных.

На хрен, брошу всё хозяйство и уеду в город я

В 2010 я закончил заочно институт и решил, что пора ехать в большой город, начинать работать по профессии. Откликнулся на несколько вакансий, выполнил тестовое задание и меня взяли. 

Я переехал в большой город и наконец-то получил доступ к книгам. Ох… Есть в Питере такое место – ДК им. Крупской – там находится книжная ярмарка, и есть несколько точек, где продается техническая литература. Я туда периодически наведывался и уходил каждый раз с двумя большими авоськами книг. Поездка в метро на работу/с работы давала как минимум 2 часа в день на чтение, и в Крупу я ездил раз в несколько месяцев за пополнением моей библиотеки. Читал я всё – от книг по языкам программирования и алгоритмам, до книг по менеджменту и подходам к разработке. Прочитал всего Дядюшку Боба, Кента Бека и еще кучу других авторов. Всё-таки книги – это одна из самых важных вещей для самообучения.

Мне посчастливилось встретить примеры как плохих, так и хороших руководителей. Огромным сюрпризом было для меня, когда после нескольких месяцев работы я встретился в коридоре с Генеральным (которого я видел только мельком пару раз), и он сказал мне «Здравствуй, Костя. Как твои дела?». Было очень удивительно и приятно, что Генеральный знает по имени меня, простого разработчика.

Примером плохого руководителя был мой непосредственный начальник. Вот несколько вещей, которые я усвоил благодаря ему:

  1. Необходимо обязательно следить за тем, что делает твой подчиненный. Даже если это заказная утилита от другого отдела, руководитель должен оценить проделанную работу и дать обратную связь.

  2. Необходимо регулярно проводить 1-1 встречи, так как сотрудник, у которого нет обратной связи от руководителя, может решить, что он не особо и нужен.

  3. Необходимо быть рядом со своей командой, а не сидеть отгородившись в отдельном кабинете.

К сожалению, через пару лет я понял, что учиться мне разработке в компании не у кого, и решил уйти. Но меня оставили еще на год повышением з/п и тем, что дали в руководство отдел. Тут я впервые узнал, что такое собеседования и управление разработчиками. Их было 3 под моим началом. Сейчас, оглядываясь, я понимаю, что занимался микроменеджментом, не давая своим работникам особой свободы. Несмотря на всё, это был хороший опыт.

В следующей компании мне повезло встретиться с разработчиками, которые были и умнее, и опытнее меня. А еще они знали много вещей за пределами моей области знаний, что помогло мне расширить эту область. Я узнал, что такое python, как разрабатывается web. Но так же я в очередной раз увидел, что такое плохой руководитель, и познал, какой отвратительный код могут писать твои коллеги, и как с этим можно бороться или мириться. Я впервые увидел функцию на 2К строк, в которой была куча макросов, каждый из которых разворачивался еще на N сотен строк. 

Проработал я там ровно год и свалил. Причем нас тогда несколько человек ушло – надоело заниматься чем-то непонятным.

Однажды мне предложили работу в стартапе, с переездом на юг, и после совещания с супругой мы переехали. Стартап на деле оказался галерой со всеми вытекающими: я был мастером на все руки – бэк, фронт, архитектура, ci/cd, управление джунами и куча всего остального. У меня получилось выстроить более-менее хорошую архитектуру (которая сохранилась там и по сей день) и обучить несколько джунов, но года через 3 я понял, что пора уходить.

Ушел я в зарубежную компанию, и это был очень интересный опыт. Во-первых, мне пришлось в короткие сроки выучить английский язык, так как вся коммуникация велась на нем. У меня за плечами был только школьный базис, причем ужасного качества (учился я все-таки в сельской школе). Помогли месячные онлайн-курсы и приложение Anki, как способ пополнения словарного запаса. А так же фильмы и книги в оригинале. Во-вторых, был переход на Go, который я до этого только пару раз использовал в качестве хобби. К счастью, если ты знаешь C++, то другие языки выучить проблемы большой не составляет, а тем более такой простой язык как Go.

С течением времени я понял, что хочу развиваться в менеджмент. Меня привлекало управление и архитектура, а не написание кода. К сожалению, все мои попытки расширить свою зону ответственности не встречали одобрения начальства, и я решил уйти, хоть это было и очень тяжелым решением – мне работа в компании нравилась.

Чему я научился в этой компании:

  1. Если под твоим началом работают сильные специалисты, ты не можешь просто так навязывать свое решение, ты должен его обосновать. Наш руководитель это классно делал, и мы в большинстве случаев принимали его решение. Пару раз мы его переубеждали, и он соглашался с нашим мнением, из чего можно вывести следующий пункт.

  2. Ты должен уметь признавать свои ошибки.

Нам всё нипочём, через левое плечо плюнем и пойдём через туман

В июне 2021 года я перешел в Scalable Solutions на должность разработчика, но сразу оговорил с Head’ом, что я хочу развиваться в сторону TeamLead’а. Собственно, этим развитием я и стал заниматься сразу же, как пришел – брал на себя дополнительные задачи, делал ревью всех МРов, которые мне попадались, участвовал во всех обсуждениях и аккумулировал всю доступную информацию, до которой мог дотянуться. Почти сразу же Head позвал меня на участие в технических интервью. Поначалу я брал на себя часть вопросов по БД, но уже через несколько собесов я сам стал их проводить, а Head только слушал и принимал финальное решение. К слову о собеседованиях, они у нас довольно сложные (до финала доходит 3-7% кандидатов), так как в команду мы набираем только senior специалистов.

Помимо собеседований, я стал брать на себя менеджерские задачи, чтобы разгрузить от них Head’а. Я делал декомпозицию и эстимейт поступающих задач, а также делился своим мнением по поводу их реализации. Подписался на все каналы в Слаке, которые были доступны, и впитывал в себя всю поступающую информацию. В общем, старался как мог.

TeamLead’ом я так и не стал.

В декабре наш Head покинул компанию, и мне предложили занять эту должность. Я согласился. Я понимал, что будет тяжело, но не знал тогда, что настолько. Толком не зная всей системы и структуры компании, я получил в управление целый отдел с 10 senior разработчиками. А еще получил несколько продуктовых задач, которые необходимо было сдать в течение месяца.

Я боялся, что команда меня не примет, но, к моей огромной радости, мне сразу же после назначения написали несколько коллег и сказали, что помогут мне со всем этим справиться. Большое им спасибо, мы справились и сдали проекты в срок.

Прошло уже 7 месяцев, как я принял эту должность. Не сказал бы, что у меня все получается, но я работаю над этим. Я взял в команду еще несколько человек, провел реорганизацию – разбил команду на несколько и назначил в каждой тимлида. Теперь учусь делегировать работу тимлидам, а сам только контролировать процесс и заниматься верхнеуровневыми задачами. Под моим началом уже около 20 человек и мы все еще набираем разработчиков.

Когда меня спрашивают, что меня мотивирует, у меня сразу возникает только один ответ – моя команда. Я рад работать в команде с высококлассными специалистами. Мне есть, у кого учиться, и есть, кому передать мой опыт.

Вот краткий перечень того, с какими сложностями и челленджами я столкнулся в Scalable и на должности Head’а:

  1. Стиль кода. Мой подход всегда был очень жестким, когда дело касалось стиля кода (привет, С++). Я считал, что все должны писать одинаковый код, дабы его было легче поддерживать. Даже минимальные отклонения не допускались, всё выносилось в style-guide и проверялось на ревью. Тут же я пришел в команду, где, во-первых, не было style-guide, во-вторых, был легаси, а в-третьих, было много профессионалов, которые писали как кто привык. Даже Go с его простотой позволяет писать код по-разному. Пришлось мне привыкнуть. Конечно, при помощи дипломатии я сгладил некоторые моменты, которые сильно бесили, но в остальном я теперь сдержанно отношусь к чужому коду и призываю своих коллег делать так же.

  2. Легаси архитектура. Сколько фэйспалмы не бей, а приходится разбираться в том, что досталось по наследству, и стараться это не сломать. К счастью, предыдущий Head проделал большую работу с переводом сервисов на gRPC и приведением их к общему виду, но все равно еще есть места, где приходится работать аккуратно, чтобы минимизировать риск поломать какой-либо из сервисов.

  3. Конфликты. Если раньше я мог спокойно взять попкорн и смотреть на конфликты моих коллег, то теперь мне приходится их разруливать, чтобы никто не был обижен, и это не сказалось на работоспособности всей команды. К счастью, конфликты достаточно редки.

  4. Я теперь не пишу код. Вообще. Я думал, это будет тяжело, но, как оказалось, мои задачи так же интересны, если не более. Иногда все-таки я расчехляю IDE и что-то делаю, если задача срочная, а все заняты. Но это бывает редко.

  5. Приходится очень часто переключать контекст. Разработчику легко – получил задачу и работаешь над ней. Тут же приходится работать над несколькими задачами одновременно, при чем тебя могут интерапнуть в любой момент, и ты должен быстро переключить контекст, чтобы ответить.

  6. Раньше я читал все письма и сообщения, как только они приходили. Сейчас их стало так много, что разгребать их получается только ночью или на следующее утро. Поначалу это было тяжело, иконка с количеством непрочитанных сообщений сводила с ума. Потом привык.

Несколько моментов, которых я придерживаюсь как руководитель:

  1. Моя самая главная задача – облегчить работу команды. Я должен сделать все возможное, чтобы каждый член команды мог заниматься своей работой.

  2. Мне необходимо делать так, чтобы каждый разработчик считал себя частью всей команды.

  3. Текучка недопустима – я должен делать всё, чтобы у разработчика и мысли не было искать другую работу. Отобрать паспорт или приковать к рабочему месту я не могу, приходится искать другие пути.

  4. Нельзя держать сотрудника на однотипных задачах, необходимо разнообразие.

  5. Необходимо проводить регулярные 1-1 встречи, чтобы видеть состояние работника и понять вовремя, как ему можно помочь.

  6. Если есть конфликтный вопрос, часто обе стороны по-своему правы, и нельзя склонить чашу весов на чью-либо сторону. Руководитель должен поставить точку, выбрав один из вариантов или предложив свой.

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

Ну и куда же без книг, конечно

Вот небольшой список, который я могу порекомендовать коллегам по цеху. 

  • С. Макконнелл – «Совершенный код».

  • А. Александреску – «Стандарты программирования на C++».

  • Г. Саттер – все книги.

  • Кент Бек – все книги.

  • Р. Мартин (ака Дядюшка Боб) – все книги.

  • Ф. Брукс – «Мифический человеко-месяц».

  • М. Фаулер – «Рефакторинг: улучшение проекта существующего кода», «Шаблоны корпоративных приложений», «UML. Основы. Краткое руководство по унифицированноме языку моделирования».

  • Дж. Ханк Рейнвотер – «Как пасти котов».

  • Г. Кеннеди – «Договориться можно обо всем».

  • Э. Хант, Д. Томас – «Программист-прагматик. Путь от подмастерья к мастеру».

  • С. Кови – «7 навыков высокоэффективных людей».

  • Т. ДеМарко – «Deadline. Роман об управлении проектами».


Еще по теме:

Тестирование финтех бэкенда: как мы дошли до 20 тыс. тест-кейсов

Как устроен криптотрейдинг, с какими рисками нужно считаться, и в чем был прав Марк Твен

Комментарии (3)


  1. ABHuman
    08.07.2022 15:26
    +1

    Интересно почему на картинке только две линии событий, а нет третьей, где уже за рулём грузовика инженер, который перевозит эту глыбу, без начальника и коллег/рабов?


    1. orange_from_scalable Автор
      08.07.2022 18:23

      Это тот инженер, который должен был везти песок с третьей базы на четвертую, но все перепутал?


  1. Hivemaster
    09.07.2022 10:07

    Тупость этой картинки может спорить только с её популярностью. Во втором случае не руководитель, а главный тягловый, не умеющий делегировать, потерявший обзор как ландшафта, по которому нужно передвинуть блок, так и команды. С позиции на конце каната такой руководитель и яму на пути не увидит, и ослабевшего работника, который вот-вот упадёт под блок. Кроме того, только пролетарии (в плохом смысле этого слова) думают, что задача руководителя только командовать. Пока руководитель сам таскает блоки, он не ищет способы облегчить перетаскивание блоков или зарабатывать на каждом блоке больше, не занимается учётом, не занимается развитием команды и т.д. и т.п.