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

Что такое Agile. Это методика разработки, в которой, согласно основополагающему документу «The Agile Manifesto», приоритеты имеют:

  • индивидуумы и взаимодействия над процессами и инструментами;
  • работающее ПО над подробной документацией;
  • совместная работа с заказчиками над согласованием условий контрактов;
  • реагирование на изменения над следованием плану.

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

Что такое DevOps. Как и в случае с Agile, существует множество способов реализации DevOps. Однако все они имеют два важных общих момента: тесное взаимодействие между группами разработки ПО (development) и эксплуатации (operation), а также автоматизация процессов развертывания ПО.

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

Методология vs развертывание. Agile — методика разработки ПО. После того, как ПО создано и выпущено, команда разработчиков формально за него больше не отвечает, приступая к другой работе.

С другое стороны, методика DevOps направлена на то, чтобы взять готовое ПО и развернуть его как можно более безопасным и надежным способом. При этом DevOps не зависит от ПО, разработанного с помощью методики Agile. Поэтому при использовании DevOps вполне можно применять водопадную модель разработки (waterfall development).

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

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

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

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

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

DevOps, по определению, подразумевает совместную работу нескольких команд. Одни могут работать по модели scrum, другие — по kanban, третьи — по waterfall, но все они должны собраться вместе в момент выпуска релиза для обсуждения с командой по эксплуатации особенностей развертывания. Здесь важно понять, что методика DevOps не зависит ни от одной методики разработки.

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

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

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

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

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

Автоматизация. DevOps в сильной степени зависит от автоматизации развертывания, необходимой чтобы этот процесс проходил надежно и без проблем. Соответствующие инструменты являются частью DevOps.

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

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