Был давеча на круглом столе по обсуждению разных методологий разработки ПО. Говорили много и красиво о самих методологиях, о том, что некоторые методологии несут всякие выгоды компании и т.д. При этом во время обсуждения поймал себя на мысли, что во время обсуждения методологий ни разу не поднимался вопрос о критериях применимости конкретной методологии или практик к тому или иному проекту.
В данном посте, хотел бы собственно поговорить о применимости той или иной методологии к тому или иному проекту. Проще говоря, когда на проекте выстраивать процессы по RUP/CMMI, а когда использовать Agile практики?
В свое время участь в Высшей школе экономике, на курсе по управлению проектами я услышал очень интересный тезис, что стиль управления проекта надо выбирать исходя не только из внутренних требований и своих потребностей, но и из потребностей и требований заказчика.
Давайте рассмотрим какие существуют проекты разработки ПО с точки зрения бизнеса заказчика:
- Заказная разработка системы с нуля
- Создание дополнительного функционала для уже существующей системы/платформы
- Продуктовая разработка (создаем коробочный продукт)
При этом надо еще учитывать, что заказчик может быть как внешний, так и внутренний.
То есть, разработка системы может происходить как для внешнего заказчика, так и для внутреннего, то же относится и доработкам функционала к существующим системам.
Теперь коснемся каждого случая в отдельности:
Сначала отойдем от разработки и поговорим о внедрении автоматизированных систем, нам это понадобиться для того что бы понять логику заказчика.
Предположим что заказчик хочет создать систему бухгалтерского учета с нуля, при этом переход на новую систему с точки зрения заказчика должен произойти довольно быстро, что бы не было провалов производительности и никакие финансовые данные не были потеряны. Согласно теории Курта Левина (это выдающийся американский теоретик психологии и менеджмента первой половины 20 века )
Так вот, сначало при проведении изменений, надо разморозить текущую ситуацию в компании, провести изменения и снова заморозить. При внедрении какой либо автоматизированной системы, эту схему можно отобразить так: размораживание – проведение пилотного проекта, проведение ознакомительных встреч, создание группы приверженцев (пропагандистов нового стиля работы) среди персонала заказчика, внедрение изменений – исправление ошибок опытной эксплуатации, проведение тотального обучения всех сотрудников, миграция данных; замораживание – перевод проекта в промышленную эксплуатацию.
Казалось бы причем здесь разработка самого ПО? А вот причем, дело в том, что заказчик хочет получить систему сразу, и принимать ее он будет тоже сразу, а не частями (иметься в виду – не функциональные таком виде, что бы системно и быстро начать ее эксплуатировать и низить потери производительности исполнитей при переходе на новый инструмент работы.
Понятно, что в жизни так идеально не бывает, но подобная логика заказчика изначально присутствует практически всегда.
Как же ведется проект при подоьной схеме? Обычно он разбивается на две части, вначале идет мини-проект по сбору бизнес-требований (его кстати может выполнить и сторонний исполнитель, который пишет бизнес-требования, а потом они выносятся на тендер). Далее происходит оценка объема работ, трудозатрат и выкатывается ком. предложение. Если обе стороны договорятся о сотрудничестве (подписывают контракт), наступает полный сбор требований и создание архитектуры, на этом этапе происходит коррекция требований, после чего начинается работа. В большинстве своем такие проекты идут по fix price схеме.
В этой схеме для исполнителя работ особо важно на этапе сбора требований и создания архитектуры максимально их проработать и подписать у заказчика, что бы на сдаче приемке отбиться от озарений в части хотелок и пожеланий заказчика.
Подобная схема работы довольно не гибка и со стороны исполнителя требует жестких методов ведения проекта, с созданием всего комплекса управленческой и технической документации, ведения матрицы трассируемости, управления рисками и все это для того, что бы не выскочить за рамки бюджета, который «прибит гвоздями к проекту».
К чему я клоню, а к тому что для проектов создания подобного ПО очень кстати подходят практики CMMI, их вооплощение в жизнь на проекте, минимизирует риски превращения проекта из коммерческого в "политический".
Теперь поговорим о другом типе проектов.
Предположим вышеописанная система внедрена, заказчик доволен, мы как исполнитель остались в фаворе, и тут в прекрасный день, приходит заказчик и хочет прикрутить к своей системе пару функциональных модулей. Тут ситуация с точки зрения заказчика координально меняется, ему надо получить модуль довольно быстро, что бы минимизировать внутренние издержки при использовании на одном фронте и ручного и автоматизированного труда.
Здесь как раз пригодиться Agile. Разработка модуля во первых осуществляется уже не «большой командой для большой системы», во вторых быстрая демонстрация первичного функционала, его опробование на прототипной системе и получение фитбека от реальных пользователей для изменений в следующей итерации выгодна как заказчику, так и исполнителю, к тому же обычно на это стадии можно договориться об оплате работ по схемe time-and-material.
Продолжая рассматривать виды проектов, плавно подойдем к продуктовой разработке.
Agile не плохо ложиться на подобный тип проектов, когда создаться коробочный продукт и заказчиком выступает инвестор финансирующий проект. Зачастую для нового продукта требования несколько размыты и их жесткая фиксация не всегда нужна. К тому же инвестор хочет получить скорее хоть какой нибудь результат, что бы понять – не водят ли его разработчики за нос, выкачивая из него деньги. К тому же высокоитеративная разработка в продуктовы проектах позволяет более точно оценить, когда надо остановится и начать готовить продукт для выхода на рынок.
В заключении хочется отметить, что в проектах с внутренним заказчиком, (при разработке и модернизации системы), применение всяких гибких методологий скорее всего будет иметь более плодотворные результаты, так как прямой зависимости от денег заказчика, разработчики не имеют и задержки проекта не так критичны для бюджетов, как если бы проект был внешним.

Comments
>> когда на проекте выстраивать процессы по RUP/CMMI, а когда использовать Agile практики
Почему CMMI противопоставляется Agile? Ни то ни другое не содержит практик, противоречащих друг другу.
Почему RUP идет в обнимку с CMMI? Это тоже вещи разной природы.
>> Давайте рассмотрим какие существуют проекты разработки ПО
На том же круглом столе Сергей Архипенков говорил, что есть 4П: Проект, Продукт, Персонал и Процесс. Ограничив число вариаций проектов 3-мя видами мы забыли о типах продукта (сайт, консольное приложение, игрушка, софт для АЭС и сердечного клапана). А еще и о людях (очень умные, умные и пингвины).
>> заказчик хочет получить систему сразу, и принимать ее он будет тоже сразу, а не частями
Это факт. Но промежуточная "приемка" не сделает продукт хуже. Наоборот, очень много неприятностей вылезут на поверхность на много раньше. Просто в каком-то конкретном случае не было достаточно заинтересованного человека ;)
>> В этой схеме для исполнителя работ особо важно на этапе сбора требований и создания архитектуры максимально их проработать и подписать у заказчика, что бы на сдаче приемке отбиться от озарений в части хотелок и пожеланий заказчика.
Wellcome back, Waterfall! :) Представь, приехал ты туристом в Японию, приходишь в ресторан (ну худо-бедно в их иероглифах разбираешься) заказываешь что-то практически наугад и тебе приносят тарелку, с шевелящимися черными гадами :) Даже не предупредив о том, что ты "угадал" и выбрал экзотическое, даже по японским меркам блюдо. И теперь тебя заставляют это съесть! Насильно! Иначе...
А иногда официант увидит иностранца и спросит "а вы уверены"? Ты скажешь "да". Официант все равно проявит человечность, сходит на кухню, принесет одного шевелящегося гада и спросит "Вы точно уверены, что сможете съесть это?". Ты опять проявляешь уверенность. И тут официант говорит: "а вы понимаете, что по старинным обычаям, мы просто обязаны будем все то, что вы не съедите засунуть вам в задницу? Вы абсолютно уверены, что хотите сделать именно этот заказ?"
Ну и напоследок:
>> Продолжая рассматривать виды проектов, плавно подойдем к продуктовой разработке.
>> Agile не плохо ложиться на подобный тип проектов
Не поверишь, но и продукты бывают разные! Agile в разработке коробок - не самое лучшее решение, потому как команда большая, часто распределенная, очень тяжело найти ОДНОГО человека, который смог бы играть роль владельца продукта. По большому счету цикл релизов очень большой (зачастую год с релизом в back-to-school-time) и итеративность не всегда сможет раскрыть весь свой потенциал, из-за сложностей в сборе фидбека с конечных пользователей.
Я конечно далеко не гуру в Agile и могу ошибаться, но у меня сложилось впечатление, что в чистом Agile пропагандируют максимальное упрощение управления требованиями, не понятна роль в Agile use-cases, отсутствует упомянание трассируемости требований и т.д.
>>Ограничив число вариаций проектов 3-мя видами мы забыли о типах продукта (сайт, консольное приложение, игрушка, софт для АЭС и сердечного клапана). А еще и о людях (очень умные, умные и пингвины).
Здесь ты прав, и тем самым мы еще более расширяеем список критериев для выбора методологии ведения проекта!
>>Это факт. Но промежуточная "приемка" не сделает продукт хуже.
и
>>Wellcome back, Waterfall! :)
Здесь ты меня наверное недопонял, надо демонстрировать заказчику систему в процессе создания например на прототипе, и получая фитбек корректировать разработку или формировать CR. В CMMI упомянаются прототипы как рабочий продукт и рекомендуют практики утверждения требований через показ прототипа.
Дело в другом, при подходе a'ля CMMI подразумеваеться сдача-приемка в конце, когда и происходит проплата за работу, и проект обычно там фикс-прайс, посему задержка может привести к убытку.
При гибкой разработке типа Agile когда заказику сдается функционал по итерациям, оплата или почасовая или привязана к определенной итерации (редко кто идет на такой вариант). Поэтому здесь исполнитель менее привязан к деньгам и при форс-мажоре менее страдает. Только вот заказчик предпочитает больше фикс-прайс, чем почасовуху, так как сам завязан на своих внутренних бюджетах.
Покажи Процессную область -> Цель -> Практику, натолкнувшую тебя на этот вывод?
Welcome на SECR - там один американский товарисч с моей подаи должен прибыть, который попытается доказать, что Agile и CMMI вполне уживаются вместе. Видео с анонсом тут: http://agilecmmi.com/.
Вотерфол сейчас в чистом виде редко где применяется, конечно в проекте использующем CMMI могут быть итерационные состовляющие,а под термином вотрефол я подразумеваю подход, когда существуют проектные фазы: сбор требований-архитектурный дизайн-разработка-тестирование-UAT, при этом вполне возможно на определенном этапе откатиться назад.
Еще раз повторю, смысл моего поста не в противопоставлении какой либо методологии (типа "методология X методологии Z"), а попытка выявить критерии для выбора конкретной методологии или может быть симбиоз методологий под конкретный проект, что бы этот проект был безубыточный.
Лично меня не устраивает ответ на вопрос "а какую методологию нам выбрать" - " а вы попробуйте на маленьком проекте и поймете". Время разбрасываться деньгами ушло в конце сентября 2008 года.
А вот это верно. То, что сработает на маленьком проекте, может запнуться о большой.
Но в моем посте немного о другом, а именно поднят вопрос о критериях выбора той или иной методологии или тех или иных инструмнтов и практик что бы создать смешанную, но при этом не ошибиться и не сделать проект убыточным.
Забыл самый главный критерий - людей. Процесс и методологию нужно выбирать прежде всего на основании опыта (текущего или будущего) тех ребят, которые будут с нами работать.
"кадры решают все" и здесь я с тобой полностью согласен, но я исхожу из постулата, что команда у нас среднестатистическая, то есть средненькая :) Компаниям "звездам", при выборе многое упрощается.
Если же "горе-горемыки", то там надо не методологию выбирать на проект, а перерстраивать саму систему управления компанией и переубеждать руководство в методах ведения бизнеса, ибо накике Agile и CMMI не помогут сделать компанию более эффективной, так как "разруха не в клозетах, а в головах".
Для каждой методологии показываются области, где они оптимальны.
Взято из книги Alistair Cockburn "Agile Software Development"
AUP - Agile Unified Process. Тот же RUP только бесплатный. Теперь он называется OpenUP
Категорически не согласен. Вполне нормально живут люди, когда CMMI используется как некий методологический "зонтик", а отталкиваясь от него дальше этот "зонтик" реализовывают самыми разными средствами, в т.ч. и "агильными".
Почему же? Я же это видел в жизни и оценивал, как оценщик (хотя если говорить откровенно, то там была комбинация различных методов "семейства" agile). :) Но это, увы, не в России... И с точки зрения maturity level это был уровень 2. А вот с точки зрения другого представления модели для некоторых областей уровень был и повыше 2-го.
Ну и это... Мы в России... А индийцы - в Индии, и китайцы - в Китае. Забыл уже, кто из них лидирует по числу оценок в этом году.
P.S. Вы только не подумайте, что я против CMMI или против Вас лично что-то имею. Меня, скорее, "практики" достали. И эксплуатируемые ими пылкие юноши.
Дело в том, что там много небольших софтверных компаний (мне лично удалось поработать и с компаниями в 9-20 человек, и с компаниями 40-50 человек). Правительство некоторых областей Испании материально помогало (может и дальше помогает) этим компаниям улучшить свою привлекательность на европейском и американском рынках, в т.ч. и путем поддержки внедрения каких-либо "улучшающих" методологий и сертификаций относительно них. Выбор вариантов методологий широк. Лидируют в выборах :) ISO и CMMI.
В этом году по числу оцениваний лидирует, скорей всего Китай (США должны быть где-то "рядом").
Что не означает, что сама идея(идеи) - ерунда.
Единожды вкусив скрама уже трудно от него отказаться.Хотя и тут может быть подвох. Иногда надо переворачивать все с ног на голову, внедрять другой процесс.
Что же касательно вопроса самого поста - не все так однозначно, ИМХО.
RUP конечно хорошо, если знать как это все настраивать и до какой степени с этим играться. Agile тоже хорошо - но тут надо подбирать людей, причем если в RUP за счет процесса еще можно нивелировать кое-какие риски на определенном отрезке времени, то в Agile все вылезет сразу(есть гут), но может заблокировать все нафиг (не есть гут).
Насчет внедрения больших систем - размораживать действительно правильно,а вот внедрить все сразу и скопом - вряд ли получиться. Мне примеры подобного внедрежа неизвестны. А как только начинается волокита и косяки с внедрением начинаются проблемы "последней мили".
Поэтому мне кажеться что надо размораживать народ пачками и на постоянной основе.