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

Что имеем на старте

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

  • Отсутствие времени на нормальную аналитику (тут можно вставить шутку про «без нормального ТЗ получается ХЗ», но она становиться несмешной, когда дедлайн реально «завтра», а проект ещё не начат). Приходилось класть рельсы во время движения поезда.

  • Огромная сложность в синхронизации и поддержке мастер-данных во всех интегрируемых системах, вводимых в эксплуатацию вместо софта вендора.

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

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

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

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

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

Как синхронизируем доработки

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

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

Как выстраиваем релизный цикл

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

  1. Все доработки в production льются сначала на узкую группу пользователей. В случае успеха и положительной обратной связи — тиражируются на страну.

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

  3. Исправление найденных в production ошибок имеет приоритет над разработкой фич. Лучше успеть сделать меньше функциональности, чем застопорить работу крупнейшего ипотечного процесса в России.

Поддержка и исправление багов

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

Чтобы получать оперативную и объективную обратную связь о работе нашего программного обеспечения, мы создали чаты для общения с пользователями, отранжированные по степени критичности функциональности. Однако количество пользователей, задействованных в процессе, превышало 30 000+, поэтому потребовалось выстроить иерархию «ключевых пользователей», которые на своём уровне агрегировали проблемы и уже напрямую доносили их до разработчиков в чате. Почему это был чат? Потому что решение проблемы зачастую требовалось здесь и сейчас (особенность процесса), а не через час и не через день.

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

С какими сложностями мы столкнулись

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

  • Никто не знает весь процесс целиком, только по частям. К сожалению, реальность такова, что никто не знает, как работают крупные системы. Можно найти специалиста по конкретному кусочку бизнес-процесса, либо же может повезти познакомиться с аналитиком, который поверхностно знает процесс целиком (но опускаясь на самый низкий уровень, в частные случаи, можно поймать множество сюрпризов). В такой ситуации нужно набираться терпения и стараться получить информацию изо всех источников.

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

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

Какие положительные моменты мы смогли найти

Положительные моменты напрямую вытекают из недостатков процесса:

  • Совместное «горение в танке» сблизило команды. Появились новые горизонтальные связи, произошёл интенсивный обмен опытом, совместная работа над тяжёлым проектом углубила взаимопонимание.

  • Целеустремлённость руководства и выделение большого числа ресурсов и команд. Опытное руководство трезво оценило ситуацию и выделило все доступные ресурсы на выполнение задач. Были урегулированы все вопросы со старыми приоритетами команд, что позволило разработке не отвлекаться на другие задачи. Все переработки оплачивались в двойном размере.

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

  • Быстрая обратная связь. Благодаря целеустремлённости и возможности пилотировать новые процессы на очень маленьком количестве пользователей удавалось получить честную обратную связь в кратчайшие сроки, поправить неучтённые моменты и «раскатить» на большую долю пользователей более стабильный процесс.

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

Используемые лайфхаки

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

  • Разбиение большой команды на независимые миникоманды (фронтенд + бекенд или фулстек + бекенд) снижает усилия на погружение в контекст.

  • Инкапсуляция всех статусов, презентаций, планов и контрольных мероприятий в одну еженедельную встречу с минимальным отвлечением от производственного процесса «создаёт прозрачность» для руководства без дополнительного отвлечения.

  • Короткий релизный цикл.

  • Пилотирование всех доработок на малом числе пользователей в production (канареечные релизы).

  • Приоритет исправления багов над реализацией фич.

  • Чаты с ключевыми пользователями для быстрой обратной связи.

  • Прямая коммуникация разработчиков разных команд минуя бизнес-эксперта.

  • Гибкое изменение административных и HR-процедур для сохранения максимальной эффективности производственного процесса.

Выводы

Самый главный вывод — старайтесь не попасть в такой «смертельный» проект. Это был тяжелейший месяц в моей карьере. Возьмите отпуск, заболейте, уезжайте в командировку, но лучше откосите.

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

Надеюсь, мой опыт окажется полезным вам, если вы попадёте в такую же ситуацию.

P.S. Мы смогли.

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


  1. wolfy_str
    00.00.0000 00:00
    +8

    Вполне решаемо. 9 женщин просто беремениют с лагом в 1 месяц и соответственно рожают раз в месяц. Но даже тут понятно, что 9 месяцев нужно подождать или же построить фундамент в переносном смысле. А уже потом получать одного ребёнка в месяц) Как то так.


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

      В реальном мире не получится родить раньше срока, но в IT мире при совершении подвигов можно такие чудеса творить :)


      1. ReadOnlySadUser
        00.00.0000 00:00
        +24

        По моему опыту, в IT можно родить пластиковую куклу, имитирующую ребёнка и продать её как настоящего) Пока клиент разбирается, можно уже родить нормального за положенные 9 месяцев.


        1. Portnov
          00.00.0000 00:00
          +1

          Пока клиент разбирается, можно...

          найти следующего... гм... клиента....


        1. joffer
          00.00.0000 00:00
          +3

          в смысе - "можно"?) такое ощущение, что это сейчас как раз обычная практика


          1. Didimus
            00.00.0000 00:00
            +1

            Вы работали с интеграторами?


        1. SeekerOfTruth Автор
          00.00.0000 00:00

          в нашем случае разработка велась собственных сервисов, не нацеленных на продажу вовне


      1. Exchan-ge
        00.00.0000 00:00
        +1

        В реальном мире не получится родить раньше срока,


        Нередкий случай — см. «недоношенный ребенок»


        1. RranAmaru
          00.00.0000 00:00
          +2

          MVP (minimum viable product) приобрело новый смысл :)


    1. Nansch
      00.00.0000 00:00

      Не, не так, все беременеют и рожают в срок. Но за период 9 мес средняя скорость будет - 1 р/мес.


    1. bbs12
      00.00.0000 00:00

      Девять женщин беременеют в гравитационном поле на орбите чёрной дыры. Или наблюдатель попадает в область дыры и оттуда смотрит наружу на беременеющих женщин.


  1. dimas846
    00.00.0000 00:00
    +2

    Напишите, что ребятам заплатили хорошие премии, а то я волнуюсь


    1. SeekerOfTruth Автор
      00.00.0000 00:00

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


      1. Didimus
        00.00.0000 00:00

        Возникает соблазн делать так постоянно.


  1. Exchan-ge
    00.00.0000 00:00
    +4

    Какие положительные моменты мы смогли найти


    Картинки у вас в статье замечательные :)


    1. alnite
      00.00.0000 00:00

      Да, доктор, откуда у вас такие картинки интересные :)


    1. SeekerOfTruth Автор
      00.00.0000 00:00

      спасибо)


    1. Didimus
      00.00.0000 00:00

      Так они древние, им лет 20 точно есть.


  1. sved
    00.00.0000 00:00

    Остались не раскрытыми пара вопросов:

    • Как вы вообще допустили вендор-лок? Кто этот вендор, от которого зависит ваш бизнес?

    • Что делали с теми, кто не хотел работать в выходные?


    1. SeekerOfTruth Автор
      00.00.0000 00:00

      На первый вопрос не могу ответить
      По второму вопросу - работа на выходных строго в добровольном порядке, у кого были планы либо важные события - не работали. Но благодаря высокому командному духу в выходной набиралась эффективная команда для доработок и внедрений


      1. Kanut
        00.00.0000 00:00

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

        А кто просто не хотел? :)


        1. SeekerOfTruth Автор
          00.00.0000 00:00

          Не хотел - не работал
          Нельзя человека заставить заниматься интеллектуальным трудом.

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


          1. Kanut
            00.00.0000 00:00

            Не хотел - не работал
            Нельзя человека заставить заниматься интеллектуальным трудом.

            То есть все айтишники(и не только айтишники), которые делают сверхурочную работу, делают это абсолютно добровольно и без всякого принуждения со стороны? Интересный тезис конечно. Но что-то не особо верится...

            Но приятно что помимо выгорания доход в эти месяцы был выше :)

            Денег то хотя бы хватило на то чтобы избавиться от последствий выгорания? :)


            1. SeekerOfTruth Автор
              00.00.0000 00:00

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


              1. Kanut
                00.00.0000 00:00

                Ну это же не вопрос веры. В моих командах так.

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

                Потому что этот проект не последний, и ради него портить отношения с сотрудником совершенно неправильно

                Зато выгорание похоже не проблема. Ну выгорит и выгорит. Незаменимых ведь нет.

                Но если есть желание проверить на практике - надо пройти собеседование в Домклик )

                Не, спасибо. Оно того не стоит.


                1. SeekerOfTruth Автор
                  00.00.0000 00:00

                  Не понял какую мысль Вы хотите донести. Но если есть вопросы - постараюсь ответить


                  1. Kanut
                    00.00.0000 00:00

                    Вопрос всё тот же: Что делали с теми, кто не хотел работать в выходные? :)


                    1. SeekerOfTruth Автор
                      00.00.0000 00:00

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

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


          1. Exchan-ge
            00.00.0000 00:00
            +2

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


            Я, когда работал сугубо айтишником (конец 90х-начало 2000х) — три года не было в отпуске, за что отдел кадров начал даже «наезжать» на меня :)
            По факту был единственным специалистом на крупную контору, поэтом и домой уходил в третьем часу (охрана нервничала, но уважала :)

            Слово «выгорание» тогда никто и не слышал, тем более — не принимал в расчет подобные жалобы.

            (кончилось тем, что в результате тотальной компьютеризации число компов в организации скачком выросло с 150 до 850, после чего я сам нашел себе замену :)


  1. tambourine
    00.00.0000 00:00

    с точки зрения организации работы, не рассматривали вопрос просто сместить рабочий цикл на 2 дня: рабочие дни - среда-воскресенье, понедельник-вторник - выходной? Тем более я так понял, что в таком режиме нужно было прожить месяц-полтора. По себе знаю, что 12 дней подряд - это максимум, нужно делать перерыв.


    1. SeekerOfTruth Автор
      00.00.0000 00:00

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


      1. tambourine
        00.00.0000 00:00

        ого, целый месяц шесть рабочих дней в неделю, невероятно!


  1. Lapchatyi
    00.00.0000 00:00
    +1

    Прочитал, вспомнил как это было). Добавил бы еще про разные часовые пояса, работу не просто 6 дней в неделю, а иногда и ночами были созвоны ;) и все это реально не "из-под палки", а на позитивном заряде всех участников процесса. Было круто!


    1. SeekerOfTruth Автор
      00.00.0000 00:00

      Хороший опыт, но лучше многократно не повторять)