В прошлом году в Тинькофф, как и во многих крупных компаниях, задумались о возможной нехватке мощностей. Раньше мы могли быстро утилизировать железо, но при этом регулярно его закупать и планировать такие закупки на год вперед. Из‑за санкций в 2022 году поставки стали менее предсказуемыми. Это не критично для инфраструктуры, но мы решили, что пришло время задуматься об оптимизации.

Это не история успешного успеха. В этой статье я как DevRel бэкенд‑направлений в Тинькофф расскажу, как мы придумали и провели месяц оптимизации и почему выбрали такой формат. С какими сложностями сталкивались, чем привлекали участников, как считали результаты, определяли победителей и какой неоднозначный результат получили на выходе. Думаю, пост будет интересен тимлидам, которые ищут нестандартные подходы к решению задач. В конце я поделюсь советами по организации таких мероприятий и выводами.

Год, который все изменил

В последние годы Тинькофф активно рос. Разработчики занимались бизнес‑задачами: доставкой новых приложений и масштабированием тех, что уже есть. Задачи по оптимизации и устранению техдолга отодвигались на второй план. Из‑за этого многие команды стали занимать много железа и использовали его далеко не оптимально.

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

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

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

В поисках подходящего формата

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

Конечно, мы рассматривали и идею хакатона — и ее тоже решили отложить. За условные сутки или выходные довольно сложно и совсем не весело успеть найти возможности для оптимизации. Тем более качественно реализовать их. Как выяснилось позже, это было правильное решение: время для проектов оптимизации — ключевой ресурс.

В итоге мы с командой решили, что мероприятие должно идти довольно долго. Чтобы у инженеров была возможность уделить ему много рабочих часов в комфортных условиях и вообще успеть что‑то зарелизить. А также создать сообщество, заинтересованное в разумном потреблении ресурсов. При этом у участников должна быть возможность посоревноваться с другими крутыми разработчиками в нашей группе компаний, получить новые знания и выиграть призы.

Так мы пришли к месяцу оптимизации.

Month of Performance

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

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

  • приложение или набор приложений должны занимать минимум 10 ядер;

  • для приложения должны собираться метрики потребления CPU и памяти.

И тут у нас сразу вылезает главный вопрос, который сильно повлиял на итоговый формат мероприятия. Как считать? Ведь проекты очень разные по содержанию и размеру. Для одного проекта высвободить 10 ядер — это приложить много усилий и вдвое улучшить показатели. А на другом проекте можно легко высвободить 20 ядер. Чтобы все было справедливо, мы решили поделить участников на две группы: крупные и небольшие проекты. И в каждой группе считать победителей по двум категориям: абсолютным и относительным цифрам, чтобы оценить и существенную оптимизацию, и существенный вклад. Итого получалось четыре команды‑победителя.

Как я уже сказала, наша команда хотела сделать тему оптимизации популярной, чтобы больше инженеров прониклись эффективным использованием ресурсов. Поэтому я стала организовывать внутренние митапы, где потенциальные участники могли познакомиться с инструментами оптимизации. Это оказалось полезно не только для мероприятия, но и в целом для профессионального развития. Такие митапы я организовала в сообществах JVM, Golang, Node.js,.NET и Python, и в сумме их посетили более 600 человек.

На участие в Month of Performance мы получили заявки от 30 команд. 26 из них одобрили — это 60 участников. На этом этапе я отправляла участникам стартовый мерч. Да, кто‑то мог зарегистрироваться, получить мерч и дальше ничего не делать (спойлер: некоторые так и поступили). Но мы осознанно шли на этот шаг, потому что хотели собрать базу по оптимизации ресурсов. К тому же мы не понимали, какое количество человек может заинтересовать эта задача, потому что раньше не устраивали таких мероприятий.

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

Так выглядел лидерборд
Так выглядел лидерборд

По итогу разработчики оптимизировали приложения от 20 до 90%, а это очень крутой результат. Из 26 одобренных команд до финала дошли восемь. Это вызвало у нашей организационной команды большой интерес. Казалось бы, люди собрались, заявили команду, описали, что будут оптимизировать и как снимать метрики, а до финала не дошли. Почему же так вышло?

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

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

Плюсы, минусы и уроки месяца оптимизации

Самым большим сюрпризом для нас стало количество команд, не дошедших до финала. Оказалось, мало привлечь участников, надо еще и поддерживать их мотивацию в процессе. Этому моменту я уделила отдельное внимание уже в следующем мероприятии — в Month of Reliability, который провела в декабре, — там до финала дошли 57 команд из 60.

В качестве причины многие участники указали нехватку времени, запланированные релизы и отпуска. Тут мы пришли к тому, что мероприятие надо сделать еще дольше и анонсировать не за несколько недель, а за один‑два месяца.

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

По итогам Month of Performance я организовала митап, где мы попросили финалистов рассказать, как и что они оптимизировали, чтобы коллеги могли познакомиться, обсудить кейсы друг друга и перенять лучшие практики.

UPD: Статья одной из команд-финалистов, как они оптимизировали микросервисы.

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

Что мы с ребятами отметили для себя на ретро? В абсолютных цифрах количество освобожденных ресурсов для компании не очень большое. Но важно, что мы подняли вопрос оптимизации, что коллеги стали обращать на это внимание. Сотни людей посетили митапы по оптимизации, и 90% участников отметили, что нашли для себя что‑то полезное и интересное.

Мы уже анонсировали весну оптимизации. Да, целую весну. На основе предыдущего опыта и обратной связи решили сделать мероприятие более продолжительным. Еще мы пересматриваем формулы подсчета. Решили убрать из сравнения абсолютные числа и оставить для соревнования только относительные, чтобы у коллег из больших приложений не было преимущества за счет больших объемов. И еще в весну оптимизации мы расширим размер команд, чтобы фронтендеры тоже смогли участвовать.

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

Заключение

Задачи могут быть разными, как и формат мероприятия. Хочется поделиться советами, чтобы любой тимлид смог адаптировать мой опыт под себя.

Вот как может выглядеть план действий:

  1. Собрать рабочую группу из заинтересованных людей.

  2. Зафиксировать, какую проблему решаем, — это важно для обсуждения целей мероприятия. А главное — это поможет в принципе избежать организации мероприятия, если проблему проще решить другим способом.

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

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

  5. Придумать способ сбора заявок, их рассмотрение и подтверждение участия. Не обязательно что‑то сложное: мы, например, решили отказаться от красивых форм регистрации в интранете и организовали все в Confluence.

  6. Определить сроки — проведения мероприятия, рассмотрения заявок, определения победителей.

  7. Решить, как будем определять победителей. Если метрики, то какие и как будем собирать? Если судейство с помощью жюри, то по каким критериям?

  8. Продумать мотивацию. Это призы или внутренние баллы компании? А может, плюсы в ревью? Это только победителям или финалистам тоже? Или всем участникам?

  9. Выстроить общение с участниками и сбор обратной связи. Специальные формы и/или просто чат участников?

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

Если у вас есть интересный опыт проведения подобных мероприятий, делитесь в комментариях. Нашей команде и, думаю, другим читателям будет интересно этот опыт почерпнуть. И успешных вам мероприятий!

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


  1. Ava256
    00.00.0000 00:00

    Не пойму как менялся прогресс по задачам. Можете пояснить что на скрин-шоте.


    1. eld0727
      00.00.0000 00:00
      +1

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

      По некоторым командам хорошо видно в какой день они выкатили какую то оптимизацию, потому что значение резко менялось


  1. JohnSelfiedarum
    00.00.0000 00:00
    +2

    Классика оптимизации: в первый раз 90%, далее - 10%, ибо уже нечего оптимизировать...


    1. IrinaSaribekova Автор
      00.00.0000 00:00
      +1

      Посмотрим на Весне оптимизации) Хочется привлечь больше команд к мероприятию


  1. gandjustas
    00.00.0000 00:00
    +4

    Без технических деталей читать не интересно. Как Dev Rel могли бы это заранее понять.


    1. IrinaSaribekova Автор
      00.00.0000 00:00
      +2

      Да, этот текст скорее про орг часть, и как идея подхода к решению задачи


      1. Akr0n
        00.00.0000 00:00
        +2

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


        1. amarkevich
          00.00.0000 00:00

          ожидали увидеть "как"


          1. IrinaSaribekova Автор
            00.00.0000 00:00
            +1

            Дополнила текст ссылкой на статью одной из команд-финалистов на тему "как" https://habr.com/ru/post/681484/


  1. ozzyBLR
    00.00.0000 00:00
    +1

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

    В статье поднят важный вопрос: как совместить оптимизацию ресурсов с разработкой? Командом нужно было внести оптимизацию в планы, скорректировать бэклоги. Всё это означает ровно то, что раньше команды никак не закладывали обслуживание техдолга, по крайней мере на постоянной основе. Обратная связь по итогам активности - это круто. Но сколько команд стали стали реально закладывать работы по оптимизации в свои спринты? И появилась ли общая тенденция по компании к замедлению роста потребления ресурсов?

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

    Так с ходу я бы посмотрел в сторону другой концепции. Сначала поработать предметно с 3-4 проектами. Внедрить там "лучшие инженерные практики". А потом анонсировать такой вот "месячник оптимизации", провести стартовый митос со спикерами от этих команд. И дальше по мотивам ретроспективы заниматься внедрением хорошо зарекомендовавших себя подходов в максимальное число команд. Будь то какой-то внутренний гайд или ещё что-то.

    Энивей, продвигать оптимизацию в компании лучше, чем не продвигать. Будет интересно почитать про следующую активность!


    1. IrinaSaribekova Автор
      00.00.0000 00:00
      +1

      О, спасибо за такой интересный и содержательный комментарий!

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

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

      Стало ли это в командах системно, не знаю точно и не думаю, что стало. Но тем не менее некоторые тимлиды делились, что продолжают оптимизацию.

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

      И спасибо за идеи, тоже возьмём на обсудить)

      По поводу следующей активности - планируем рассказать про то как провели Месяц Надежности - это уже из уст инженера из нашей орг группы)