DevOps vs Agile: в чем разница?
Этот материал – адаптация DevOps-команды «Онланты»
разбора зарубежных коллег. В этой статье мы разберемся, в чем особенности DevOps и Agile и чем они отличаются друг от друга. Поехали!
На раннем этапе разработка программного обеспечения в полной мере не попадала под конкретную модель управления. Далее появился метод Waterfall, идея которого заключалась в том, что разработка ПО определяется временем, необходимым для написания приложения.
Раньше на создание, тестирование и развертку ПО часто уходило много времени из-за отсутствия сдержек и противовесов в производственном процессе. Результатом стало низкое качество ПО с множеством ошибок, а также несоблюдение сроков из-за затянувшихся, долгих планов разработки ПО.
«Водопадные» проекты строятся по модели, называемой треугольником управления проектом. Каждая сторона треугольника представляет собой компонент тройственной ограниченности: объем работы, время и стоимость. Согласно этой модели, стоимость зависит от объема работы и времени, и эти три фактора связаны определенным и предсказуемым образом. Если мы хотим сократить время, мы должны увеличить стоимость. Если необходимо увеличить объем, следует увеличить стоимость или количество часов.
Переход от Waterfall к Agile
Waterfall пришел из сферы производства и машиностроения, где важен линейный процесс. Перед постройкой крыши необходимо возвести стены. Похожим образом проблемы разработки ПО рассматривались как то, что можно решить с помощью планирования. Весь процесс разработки четко определялся дорожной картой, которая приводила к окончательной поставке продукта.
В итоге метод Waterfall признали неэффективным при разработке ПО, поскольку зачастую невозможно было определить ценность вплоть до конца проектного цикла, и в большинстве случаев проекты заканчивались неудачей. При этом заказчик не мог увидеть работающее ПО до конца проекта.
При Agile используется другой подход: не планируется весь проект, не указываются точные даты и отсутствует строгое соответствие с планом. Agile предлагает и основывается на неопределенности. Методология предполагает реагирование на изменения, а не их игнорирование. Изменения рассматриваются как способ удовлетворения потребностей клиента.
Ценности Agile
Agile регулируется манифестом, в котором определяются
12 принципов:
- Главным приоритетом является удовлетворение потребностей клиента;
- Приветствуются изменения требований даже на поздних этапах разработки;
- Частый выпуск работающего ПО;
- Разработчики и представители бизнеса должны работать вместе;
- Над проектами должны работать мотивированные сотрудники;
- Живое общение является наиболее эффективным способом передачи информации;
- Основным показателем успеха является работающее ПО;
- Agile-процессы способствуют устойчивому развитию;
- Важно уделять внимание техническому совершенству и качественному дизайну;
- Простота — естественная необходимость;
- Лучшие архитектурные решения, требования и идеи дизайна появляются у самоорганизующихся команд;
- Периодически обдумывайте способы улучшения эффективности и стиля работы.
Существуют также четыре основных ценности Agile:
- Люди и взаимодействия вместо процессов и инструментов;
- Работающее ПО вместо исчерпывающей документации;
- Сотрудничество с заказчиками вместо обсуждений условий контракта;
- Реагирование на изменения вместо следования плану.
Этот подход сильно отличается от строгого плана метода Waterfall. В Agile заказчик является членом команды разработчиков. В «водопадном» подходе он участвует только в начале, когда определяет требования, и в конце, когда рассматривает конечный продукт. Заказчик помогает команде составить критерии приемки и участвует во всем процессе. При этом Agile требует изменений и постоянных улучшений от членов всей организации. Команда разработчиков работает с другими командами, включая менеджеров проекта и тестировщиков. Кто, что и когда делает – это зависит от назначенной роли и обсуждается всей командой.
Разработка ПО по Agile
Разработка ПО по Agile требует адаптивного планирования, поэтапной разработки и доставки конечного продукта. К Agile относятся разные методологии, среды и практики разработки ПО, в том числе:
- Scrum
- Kanban (визуальный рабочий процесс)
- XP (экстремальное программирование)
- Lean
- DevOps
- FDD (разработка с упором на функциональность)
- TDD (разработка с упором на тестируемость)
- Crystal
- DSDM (Метод разработки динамических систем)
- ASD (Адаптивная разработка ПО)
Эти методологии используются отдельно или совместно при разработке и развертывании ПО. Наиболее распространенными являются Scrum и Kanban (или их комбинация — Scrumban) и DevOps.
Scrum — это среда, в которой команда, состоящая в основном из Scrum-мастера, менеджера продукта и разработчиков, работает как самостоятельно, так и в совместном (перекрестном) режиме для увеличения скорости получения готового продукта и повышения ценности бизнеса клиента. Основное внимание уделяется более быстрым итерациям с меньшими улучшениями.
Kanban — это среда Agile, которая иногда называется системой управления рабочими процессами. За счет своей гибкости она помогает командам визуализировать свою работу и усилить эффективность. Kanban обычно представляется в виде цифровой или физической доски. По мере продвижения работа команды перемещается по шкале, например, от этапа «не начата» к этапу «в процессе», «тестирование» и «завершена». Благодаря Kanban каждый член команды видит состояние всей работы в любое время.
Ценности DevOps
DevOps — это культура, образ мышления, способ разработки ПО или ИТ-инфраструктуры, а также способ создания и развертки ПО и приложений. Операции и разработка не разделяются. Они работают одновременно, не препятствуя друг другу.
DevOps основывается на двух других областях: Lean и Agile. DevOps — это не название и не роль в компании, а обязательство, которое организация или команда берет на себя в отношении постоянного выпуска, развертывания и интеграции продукта. По словам Джина Ким, автора проектов The Phoenix и The Unicorn Project, существует три «пути», которые определяют принципы DevOps:
- Первый путь: Принципы потока
- Второй путь: Принципы обратной связи
- Третий путь: Принципы постоянного обучения
Разработка ПО по DevOps
DevOps не развивается сам по себе. В своей истинной форме методология представляет общую культуру и мышление в отношении разработки ПО и внедрения ИТ.
DevOps — это автоматизация, облачные решения, микросервисы. В интервью о книге «Ускоряйся! Создание и масштабирование высокотехнологичных организаций» авторы Николь Форсгрен, Джез Хамбл и Джин Ким рассказали, что из себя представляет DevOps:
- Эффективность поставки ПО имеет значение. Она оказывает существенное влияние на прибыль, долю рынка, качество, удовлетворенность клиентов, достижение цели и задач организации;
- Компании с высокой эффективностью достигают высокой скорости разработки, стабильности, качества без необходимости чем-то жертвовать;
- Можно улучшить эффективность путем реализации принципов DevOps и практики Lean и Agile;
- Реализация данных практик и возможностей также влияет на культуру организации. Она влияет как на эффективность ПО, так и на производительность организации;
- Необходимо много работать, чтобы понять, как улучшить эффективность.
DevOps vs Agile
Несмотря на сходства, DevOps и Agile представляют собой разные методологии. Некоторые утверждают, что DevOps лучше, чем Agile. Во избежание путаницы важно понять суть каждой их них.
Сходства
- Очевидно, и то, и другое — это методологии разработки ПО.
- Agile существует уже более 20 лет, методология DevOps появилась сравнительно недавно.
- Оба подхода направлены на быструю разработку ПО. Их принципы основаны на том, как быстро разрабатывать ПО без причинения беспокойств заказчику и нарушения операций.
Различия
- Различия заключаются в том, что происходит после разработки.
- Разработка, тестирование и развертка ПО осуществляются как в DevOps, так и в Agile. Тем не менее, согласно Agile процесс останавливается после этих трех этапов. DevOps включает в себя постоянно осуществляющиеся операции. Поэтому мониторинг и разработка ПО продолжаются и после получения заказчиком готового продукта.
- В Agile за разработку, тестирование и развертку ПО отвечают разные люди. В DevOps человек, исполняющий роль инженера DevOps отвечает за все. Разработка — это операции, а операции — это разработка.
- DevOps больше ассоциируется со снижением затрат, а Agile с бережливой разработкой и снижением издержек. При этом для Agile актуальными остаются такие идеи, как MVP (минимально жизнеспособный продукт) и учет по проекту.
- Agile включает эмпирические методы (адаптацию, прозрачность и проверку), а не приблизительные прогнозы.
Agile и DevOps различаются между собой, однако их сходства заставляют людей думать, будто это одно и то же. Из-за таких суждений Agile и DevOps не рассматривают всерьез.
Командам и организациям очень важно понимать, что из себя представляют DevOps и Agile. Важно также понимать, как они помогают командам работать быстрее и эффективнее, обеспечивать качество продукта и повышать удовлетворенность клиентов.
Agile и DevOps ни в коем случае не соперники друг другу (по крайней мере поводов пока нет). Они скорее союзники, чем враги в революции «гибких» методологий. Agile и DevOps могут работать эксклюзивно и инклюзивно, что позволяет им существовать в одном пространстве.