Close

Как укротить бесконтрольное разрастание набора ПО

Три признака бесконтрольного разрастания набора ПО и что с этим можно сделать

Фотография Эндрю Бояги
Эндрю Бояги

Старший евангелист


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

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

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

Рисунок: кубик

Отчего ПО разрастается?


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

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

Значок: хранилище кода
Связанные материалы

Сравнение микросервисной и монолитной архитектур

Значок: три кольца
СМ. РЕШЕНИЕ

Управление компонентами с помощью Compass

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

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

Инциденты вызваны изменениями вышестоящих систем


Одним из первых признаков разрастания ПО может служить тот факт, что инциденты, исходя из обзора последствий инцидентов (post incident review, PIR), все чаще случаются из-за изменений в вышестоящих системах. Растущее число микросервисов и увеличение объема изменений могут вносить сложности в устоявшийся порядок сотрудничества и координации изменений между разработчиками. Даже если в одном модернизированном приложении изменения начинают происходить чуть чаще, например не ежемесячно, а еженедельно, то общее число релизов за месяц может вырасти в сотню раз. Поэтому неудивительно, что разработчики вынуждены перестраивать формат сотрудничества. Вероятность инцидентов в пользовательской среде тем выше, если устоявшийся порядок совместной работы не масштабируется под стремительно меняющуюся среду разработки.

Однако если найти способ, как ненавязчиво оповещать разработчиков об изменениях в выше‑ и нижестоящих системах, то можно взять под контроль последствия разрастания ПО. В Atlassian мы используем Compass — портал для разработчиков, который позволяет командам ориентироваться в распределенных архитектурах. С его помощью можно отправлять другим командам встроенные в приложения уведомления об изменениях, если последние могут привести к поломкам в выше‑ или нижестоящих службах. Команды тех служб, которые зависимы от исходного приложения, могут подтверждать получение уведомления. Таким образом они сообщают инициатору о том, что ознакомились с изменением. Так появляется возможность координировать свои действия, если ожидается, что изменение может оказаться проблематичным, а также снижается вероятность неожиданных негативных последствий уже в пользовательской среде. Поскольку в динамичных средах разработки инциденты рано или поздно случаются, координация участников команд во время инцидента крайне важна для быстрого восстановления работы служб.

Анализ инцидентов, произошедших по причине изменений в вышестоящей системе, выявляет следующую типичную закономерность. Время восстановления работы служб зависит от того, насколько быстро удастся локализовать то самое проблемное изменение, а также найти соответствующую команду или контактное лицо. Логично предположить, что, если со временем ускорить локализацию проблемных изменений, то удастся сократить и среднее время восстановления работы службы (mean time to restore, MTTR). Это сделать гораздо труднее в слабосвязанной архитектуре, где службы образуют сложную иерархию зависимостей, и причина проблемы может крыться где угодно. Лица, реагирующие на инцидент, обычно прочесывают логи и историю изменений, чтобы локализовать изменение, вызвавшее проблему. В динамичной среде разработки это похоже на раскопку муравейника в поисках ужалившего муравья.

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

Разрастание программного обеспечения

Изменения в вышестоящих системах представлены в ленте событий Compass. Таким образом время на приоритизацию инцидента минимизируется.

Производительность команды высока, но ничего не делается


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

Представим такую ситуацию. Бригада «А» и бригада «Б» еженедельно закрывают в Jira одинаковое количество задач одинаковой сложности. Бригада «А» тратит 90 % усилий на разработку и поставку нового функционала пользователям, в то время как бригада «Б» тратит 30 % усилий на новый функционал и 70 % на координацию с многочисленными вышестоящими службами, от которых она зависит. Производительность обеих бригад одинакова, но именно бригада «А» будет считаться более эффективной. Разрастание ПО усиливает необходимость в координации между командами. Нахождение разумных подходов к тому, каким образом вовлекать автономные команды в сотрудничество, — ключ к раскрытию преимуществ слабосвязанной архитектуры.

В быстрорастущей, динамичной среде разработки возможность самостоятельно находить информацию очень важна для эффективности команд и их удовлетворенности. Решить эту задачу можно путем создания единого каталога программных компонентов с децентрализованным управлением. В таком каталоге каждая команда отвечает за создание и поддержание в актуальном состоянии служб, которые она разрабатывает. В традиционно сложившихся средах разработки, как правило, имеется централизованный каталог, которым управляет специальная команда. Однако такое положение дел не поспевает за скоростью изменений в распределенной среде, и командам приходится создавать «шпионские заметки» в Wiki о контактных лицах и о том, каким образом привлечь их к взаимодействию. Мы в Atlassian поняли, что децентрализованный подход позволяет сократить количество потраченных впустую и неучтенных усилий среди команд, дает возможность самостоятельно находить информацию и создает среду, где разработчиков привлекают по запросу. Контроль за разрастанием ПО благодаря возможности самостоятельно находить информацию о выше‑ и нижестоящих зависимостях — отличный способ улучшить коллективную эффективность и получить сопутствующие выгоды, такие как субъективная удовлетворенность и вовлеченность команд.

Снимок экрана: пользовательская служба Compass.

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

Процедура управления изменениями ставит препоны


Другой признак разрастания ПО заключается в том, что управленческие функции, такие как управление изменениями и обеспечение кибербезопасности, все больше становятся препоной при релизе изменений в пользовательскую среду. Эти функции играют крайне важную роль в следовании стандартам организации и удовлетворении запланированных показателей до того, как изменения будут развернуты в пользовательской среде. Однако их эффективность снижается при разрастании ПО. В среде разработки, подверженной разрастанию ПО, функции управления перестают быть удобными по мере того, как растет частота и количество изменений. Из‑за этого заполняется бэклог изменений и запросов, которые ждут проверки, что задерживает развертывание релизов. Согласно опросу, опубликованному в отчете State of DevOps за 2022 год, 56 % респондентов высказались о том, что, по их ощущениям, процессы обеспечения безопасности ПО в их организации замедляют разработку.

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

В среде разработки, которая подвержена разрастанию ПО, крайне важно обеспечить высокую оперативность наряду со следованием стандартам организации в нужном масштабе. Частично или полностью автоматизированные карты оценки — отличный способ сообщать организационные стандарты и предоставлять ненавязчивую возможность проверки соответствия нормативным требованиям внутри среды разработки. Мы в Atlassian используем Compass, чтобы задать стандарты качества и ожидания внутри организации. Карты оценки позволяют добиться прозрачности в плане соответствия нормативным требованиям для каждого программного продукта. Команды и руководители разработки могут добавлять в карты оценки стандарты, актуальные для данного продукта. Все это дает более полное представление об организационных ожиданиях к качеству и о статусе соответствия, которые доступны для просмотра всем сотрудникам. Происходит значительный сдвиг, поскольку управление изменениями, а также проверки на соответствие нормативным требованиям, которые проводились в конце цикла поставки, заменяются на обозначение ожиданий на раннем этапе. Это позволяет командам отвечать ожиданиям уже в процессе разработки. Управленческие команды могут задавать ожидания прямо внутри динамической среды, а команды разработки — изучать их и стремиться соответствовать требованиям в период цикла поставки. Разрастание ПО оказывает негативное влияние как на команды, отвечающие за релиз, так и на команды, занимающиеся управлением, в то время как карты оценки позволяют управлять этим вредным процессом.

изображение: безопасность данных

Карты оценки Compass помогают оценить работоспособность программных компонентов по ряду определенных критериев.

Заключение


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

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

Подробнее о Compass

Andrew Boyagi
Andrew Boyagi

Эндрю — старший евангелист команды Agile и DevOps в Atlassian. Он имеет обширный опыт поставки и эксплуатации программного обеспечения в корпоративных организациях и, основываясь на реальной практике, дает действенные рекомендации о том, как максимально эффективно реализовать преимущества Agile и DevOps в командах и компаниях. Кроме того, он создал и усовершенствовал функцию разработки платформы в Австралийском банке Содружества, одном из крупнейших финансовых учреждений Австралии, которая обслуживает 7000 инженеров. Эндрю стремится раскрыть потенциал команд разработчиков программного обеспечения и считает, что ключом к успешной работе в современных технологических средах является разработка платформ.

Вне работы Эндрю поставил перед собой цель прокатиться по каждой из 10 лучших мотоциклетных трасс в мире. Он живет в Сиднее (Австралия) со своей женой и двумя детьми.


Поделитесь этой статьей
Следующая тема

Рекомендуемые статьи

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

Рисунок: DevOps

Сообщество Compass

рисунок: преодоление препятствий

Обучающее руководство: создание компонента

Рисунок: карта

Начните работу с Compass бесплатно

Подпишитесь на информационную рассылку по DevOps

Thank you for signing up