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

От «водопада» до Agile

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

Эволюция управления проектами в сфере разработки софта происходила от сложного к простому. Сначала разработку программных продуктов пытались вести так же, как разработку какого-нибудь сложного инженерного продукта. Например, как строить самолет или ракету. То есть сначала вы его проектируете, потом производите, затем тестируете и только после этого выпускаете в жизнь. Как раз этот процесс и описывает модель водопада — Waterflow. Все процессы здесь строго последовательны и жестко регламентированы.

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

Все это вынудило разработчиков внедрять итерационные модели, которые позволяют менять требования к продукту прямо на этапе его разработки. Так родилась спиральная модель — Spiral model.

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

Все это привело к появлению в начале 2000-х таких методологий, как Scrum и XP. На тот момент методология XP (Extreme Programming) была достаточно революционна. Она предлагала набор эффективных практик и подходов, существенно повлиявших на развитие отрасли. Многие из них в наши дни стали стандартами разработки кода. В частности, именно в XP были заложены такие принципы, как:

  • Разработка через тестирование (test-driven development).
  • Игры в планирование (planning game).
  • Непрерывная интеграция (continuous integration).
  • Частые релизы (small releases).
  • Простота проектирование (simple design: dry, kiss, yagni).
  • Стандарты оформления кода (code style).
  • Парное программирование (pair programming).

Спустя некоторое время все это преобразовалось в манифест Agile, который объединил в себе все удачные практики XP и добавил к ним декларацию базовых ценностей:

  • частая поставка работающего программного обеспечения;
  • люди и взаимодействие важнее процессов и инструментов;
  • работающий продукт важнее исчерпывающей документации;
  • готовность к изменениям важнее следования первоначальному плану;
  • самый эффективный метод обмена информацией в команде — личная встреча;
  • работающее программное обеспечение — лучший измеритель прогресса.

Загвоздка в том, что внедрение гибких методологий разработки часто воспринималось бизнесом не как некая абстрактная концепция, а как панацея, которая позволит им решить все проблемы. В результате методологии XP и Agile внедрялись бизнесом как догмы. Бизнес не разбирался в том, что работает в каждом конкретном кейсе, а что нет. На разработку просто спускался Agile вместе с Agile-коучем, со словами «он вас всему научит».

В результате трансформация процессов разработки проходила с большим скрипом. Разработчики часто относились к такому внедрению Agile, как к повинности, и следовали ее принципам соответствующим образом — для галочки.

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

Актуальные на данный момент подходы к разработке

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

Современные подходы к разработке хороши тем, что они адаптируются под ваш продукт и процессы. Именно поэтому их называют гибкими методиками разработки. Но важно не воспринимать их как догму и использовать именно как гибкие подходы к разработке. Где-то хорошо работает Scrum, а где-то Kanban. Спринт может быть двухнедельным, а может быть и месячным. Где-то считают сторипоинты в «попугаях», а где-то в эталонных задачах. Нужно просто адаптировать их под конкретный продукт и процессы в компании, а не использовать бездумно.

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

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

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

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

За какими подходами менеджмента в сфере ИТ будущее?

Обычно новые подходы к разработке появляются как ответ на изменяющиеся условия среды. До недавних пор мир разработки жил по вполне устоявшимся правилам. Современные методики разработки отлично подходят под решение текущих задач и проблем отрасли.

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

Сейчас часто звучат вопросы, сможет ли ИИ заменить программистов? Я считаю, что да, и это произойдет гораздо раньше, чем мы все ожидаем.

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

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

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

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

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

Максим Сидоров, Android-лид в SberDevices