Внедрение через партнерство: мой опыт трансформации практик DevOps у кластера из 600+ разработчиков

Привет, Хабр! Меня зовут Ярослав Станишевский, я DevOps Cluster Lead в МТС Диджитал. На Saint TeamLead Conf 2024 я рассказал свою историю внедрения трансформационных изменений в кластере порядка 600 человек. Это сложная задача, которая требует не только проработки плана действий, но и выстраивания доверия с разными командами, погружения в их работу. Сегодня расскажу, как я по шагам формировал план изменений, шел по нему и как налаживал конструктивное взаимодействие с коллегами.

Внедрение через партнерство: мой опыт трансформации практик DevOps у кластера из 600+ разработчиков - 1

Начало трансформации: формируем подходы и составляем план

В конце 2021 года в МТС была принята новая стратегия и запущена технологическая трансформация экосистемы. Она подразумевала внедрение общих практик и процессов для DevOps и других направлений. Я пришел в МТС в конце сентября 2022 года, но стал не просто DevOps-инженером, а агентом изменений. Моей задачей было внедрять DevOps-практики у себя в кластере «Бизнес-платформы». Он включает в себя порядка 25 продуктов, из которых 10 объединены в единую платформу, а остальные 15 — самостоятельные.

Мне нужен был список задач по трансформации, и он получился таким:

  • изучить практики;

  • найти данные команд; 

  • провести изменения: 

    • познакомиться с командами;

    • узнать текущее состояние практик;

    • рассказать о новых практиках и изменениях в компании;

    • поставить задачи на изменения;

    • принять работы.

Первый этап. Изучение практик трансформации и формулирование их пользы для команд

Цели изменений прямо вытекали из технологической стратегии: нужно было снизить time-to-market, повысить качество готовых решений. Этими процессами занимается центр практик DevOps: методолог формулирует описание практик, которые уже обсуждаются и принимаются вместе с лидами кластеров. Head of DevOps принимает получившееся решение, и начинается каскадирование практик в продуктовые команды. В соответствии со стратегией на подобные задачи команды должны выделять 25% времени.

До моего прихода для их реализации уже были разработаны базовые практики VCS и CI, расширенная практика VCS. Таким образом, мне нужно было обеспечить:

  • переезд в централизованный GitLab: наше единое хранилище исходного кода и CICD-оркестратор. Внедрение практик разработки обеспечит большую безопасность: при любых сбоях у нас в любом случае остается возможность работать с кодом, мы всегда сможем его восстановить;

  • настройку CI в GitLab, сборки и деплоя хотя бы на один контур: базовая гигиена, с которой вполне комфортно начать;

  • внедрение общих правил разработки: использования master-веток, тегирования, merge request и так далее. До меня уже такие базовые практики частично внедрялись, но не везде, а там, где это было проще всего.

Второй этап. Старт изменений и сопротивление 

Очевидный вариант действий — движение по алгоритму внедрения новых процессов. Задача по трансформации бьется на такие этапы:

  • знакомство с командой;

  • фиксация договоренностей;

  • написание писем;

  • объяснение ценности;

  • работа с замечаниями.

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

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

Но что-то пошло не так, несмотря на удачное знакомство. Во время общения я не уделял достаточно времени людям: по сути просто приходил и говорил, что у нас трансформация и нужно быстро все внедрить. Такой подход вызвал много споров, замечаний, игнора, отказов. Например, одна из команд должна была уже давно переехать, но постоянно это откладывала: ссылалась на бизнес-задачи и другие причины. Но по факту они просто не хотели этого делать, ведь переезжать с TFS — достаточно больно. Еще одна команда сказала, что у них идет важное внедрение на прод, вывод нового приложения и им вообще не до трансформации. 

Работа с сопротивлением 

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

Изменение в моем подходе к коммуникациям

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

Разделение на свой/чужой можно преодолеть, узнав людей. Доверие — ключ ко всему, поэтому так важно его завоевать. Пришел к команде незнакомый руководитель и рассказывает про изменения, которые надо вводить. Но почему кто-то будет это делать, если вам не доверяют? Чтобы что-то получилось, нужно стать своим для людей, больше с ними общаться. Постарайтесь узнать коллег, поговорить с ними, рассказать о себе, выслушать. Общение поможет найти точки соприкосновения, общие боли. Покажите, что вы нормальный и адекватный человек, что с вами можно разговаривать и, главное, продолжать работать.

Хорошее расположение и симпатия завоевываются разговором. Важно вовремя пошутить или просто поговорить. Так мы повышаем доверие и налаживаем контакт с людьми. 

Авторитет будет выше, если вас представит кто-то из руководства. Оптимальным вариантом будет, если о вас расскажет кто-то другой, причем чем более влиятельный в коллективе, тем лучше. Мы договорились с руководителем кластера, чтобы на одном из общих собраний он рассказал обо мне и моих задачах.

Обязательства и последовательность помогают в работе. Важно говорить с людьми честно и искренне, поддерживать с общими задачами. У каждого есть своя боль. В идеале предлагаемые трансформационные изменения должны ее устранять. 

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

Примеры успешных команд мотивируют других меняться. У продуктов могут быть разные уровни зрелости — успешные команды могут поделиться своим опытом отладки процессов, показать, как это может работать и какие результаты принесет. Это хорошо срабатывает. Когда одни делятся своим опытом и наработками, другие начинают равняться на них, и уровень зрелости вырастает у всех. 

Изменения в принципах взаимодействия с командой

Тут тоже не обошлось без тонкостей.

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

Структурирование практик улучшает их восприятие. Наши практики изначально были изложены достаточно сложно. Не всегда понятное описание, информация распределена по Confluence, Jira и другим источникам. DevOps-практики достаточно сложные, поэтому стоит собрать все в одном месте — в FAQ и ценностях.

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

Результаты встреч в мемо воспринимаются лучше протокола. На некоторых созвонах из-за нехватки времени начинались проблемы. Конечно, хочется использовать механизм протокола: вы собрались, о чем-то договорились и записали итоги. Но у людей может сложиться впечатление, что вы хотите перенести ответственность. Подобный эффект возникает при сухом написании протоколов в стиле «решили сделать вот это, в такой срок, ответственный — имя». На самом деле это крайняя мера, к которой не стоит прибегать. 

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

Хорошо действует прямое общение с исполнителями. Сначала я встречался с СТО, с руководителями команд, и они ставили задачи нашим DevOps-инженерам. Но я стал сам приходить к исполнителям. Так оказалось гораздо проще — поговорить, рассказать, какие есть проблемы и что нужно сделать. Большинство соглашалось. Так переход к общению с исполнителями в моем случае показал хороший результат.

Третий этап. Фиксация изменений

Выстроив отношения с командой, мне удалось запустить процессы. После внедрения их нужно было финализировать. Для этого понадобилось:

провести итоговые встречи и выстроить взаимоотношения. На финише выровнял сроки, объяснил важность наших задач, изменил флоу там, где нужно. Все это заняло один спринт, за который подсветил проблемы, закоммитился на эскалации. В случае команды, мигрировавшей с TFS, мы договорились разбить задачу на компоненты и постепенно в течение нескольких кварталов переехать. В итоге мы успели даже быстрее, опередив сроки;

пройти эскалации, разрешить конфликты, предложить помощь. С другой командой, отказавшей в переезде из-за грядущего вывода в прод, мы договорились, что какое-то время будем коммитить изменения в TFS и GitLab. Нашел в помощь DevOps-инженера, договорился, что он напишет pipeline, и команда полностью переедет в GitLab;

→ принять работы, убрать блокеры и стать в итоге помощником, а не врагом. Спустя время увидел, что изменений у проблемной команды опять нет. Пару раз закоммитили и перестали. Связался с разработчиком, поговорил один на один, объяснил всю важность. Оказалось, слетело тегирование. Обсудил с инженером причину, доработали решение и быстро починили продукт;

→ проработать исключения, перестать «мести всех под одну гребенку» и начать подходить к проблемам индивидуально. Например, одной команде надо было переводить деплои, но было неудобно работать — из Jenkins деплоить на промышленные контуры, а из GitLab деплоить на Dev и устраивать сборки. Договорился, что перенесем сроки, но сразу осуществим деплой до прома. Согласовали, выполнили;

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

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

Результаты для компании

За полтора года работы по трансформации мне удалось добиться:

  • отладки и запуска корпоративных процессов. Мы сформировали в кластере общие практики и наладили каскадирование задач по технологической стратегии;

  • вовлечения команд в процессы изменений. Некоторые продукты начали приходить в начале квартала и спрашивать, что мы будем делать и куда двигаемся дальше. Сейчас кластер вырос — уже более 40 команд, и налаживается линейное масштабирование;

  • старта перехода от Push к Pull-модели. В целом в компании мы двигаемся от Push- (постоянно пушить изменения) к Pull-модели. Выстраиваем техзрелость, которую считаем важной, чтобы команды были замотивированы самостоятельно развиваться. 

Что я вынес для себя

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

Изменился мой подход к работе.

Начал запрашивать помощь 

Почти все команды жаловались на нехватку ресурсов: «Много бизнес-задач, бэклог всегда заполнен, на трансформацию просто не остается времени и сил». В этом случае важно посмотреть, чем заняты инженеры, что вообще происходит, какие они задачи решают и действительно ли в дефиците ресурсов дело. 

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

Еще важна внутренняя помощь. Здесь можно договориться с другими командами. В моем случае в кластере это было сделать легче — найти команды, желательно более зрелые, у которых есть дополнительные ресурсы, и попросить их оказать внутреннюю помощь. Договориться о конкретных задачах, сроках, уведомить руководство, проговорить с ними, что и когда нужно. В результате зрелая команда подключается и достаточно оперативно помогает другой с их внутренними проблемами и задачами. 

Например, у нас был переезд из Jenkins в GitLab, у команды было более 30 сервисов и один DevOps. Просто не хватало рук все перевести: оперативные и стратегические задачи отнимали все время. Осознав это, нашел внутреннюю помощь, договорился с ребятами, они подключились и достаточно быстро и хорошо все сделали. 

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

Был кейс, когда в продукте использовались main-ветка и Trunk-Based Development, что шло вразрез с требованиями компании. Обсудили с центром практик и поняли, что master-ветка — важна. Зоопарк с названиями основных веток усложнит автоматизацию процессов по мониторингу метрик разработки в компании. Поэтому тут отказал в исключении. Написал большое письмо о том, что у нас другая культура, стал описывать нашу и западную культуру, почему у нас нормально использовать master-ветку. Отправил письмо, через какое-то время звонит техлид и смеется, мол, «центр практик не разрешил исключение». Мы вновь обсудили и договорились, что они просто в ближайшее время переименуют master-ветку. А вот по поводу Trunk-Based Development договорились с центром практик сделать исключение, так как это более зрелый подход и он будет примером прогрессивной модели. 

Заменил упрямство упорством

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

Понял и принял неизбежность эскалаций

Максимально пытался избегать конфликтов, но с некоторыми командами мне все же пришлось к этому прийти. Лучшее решение — просто отойти в сторону и собрать их вместе. Организуете встречу, даете повестку, отвечаете на уточняющие вопросы, но не вступаете в спор. Команды совместно решают спорный момент, а от вас нужна фиксация договоренностей и работа по итогам. Перевод эскалации — это нормально. Некоторые задачи на своем уровне решить просто невозможно.


На этом у меня все. Масштабные трансформации — это всегда сложный процесс, при котором неизбежно возникает сопротивление. Это может быть тяжелый этап, когда нужно выстроить доверительные отношения с коллегами, понять их потребности и причины тех или иных отказов и в итоге достигнуть поставленных целей.

Автор: fortunately

Источник

Оставить комментарий