Вступление


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




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

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

В следующей главе я очень кратко расскажу про упоминаемые в статье методологии и модели жизненного цикла, для тех, кто слышит о них впервые. Более подробно про каждую из них можно прочитать в Википедии. Если вы уже знаете их, то можете смело переходить к главе 2: «Разбор блок-схемы».

1. Краткое описание



Модель жизненного цикла – общее описание того, как происходит процесс разработки.

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

Фреймворк процессов – грубо говоря, это методология, содержащая большое количество правил, но в которой необязательно использовать их все, а можно выбрать только то, что нужно и построить свой процесс разработки. Имеют в своём составе специальные приложения, позволяющие просматривать и редактировать правила. Примеры: RUP, EssUp.

Каскадная модель (или модель водопада, Waterfall) – характеризуется тем, что этапы разработки, такие как: анализ, проектирование, реализация, тестирование, идут друг за другом. Позволяет быстро создавать систему, без дополнительных накладных расходов на организацию процесса разработки. Однако она работает только тогда, когда требования стабильны и не меняются в ходе разработки, т.к. мы сразу описываем все требования, а потом сразу проектируем всю систему целиком.

V-Model — придумана в Германии и США, как способ улучшить каскадную модель для применения в государственных проектах. V-Model имеет специфику проектов для гос органов: фиксированные требования, стоимость и время. Отличие в том, что этап анализа и проектирования связан с этапом тестирования. Например, во время анализа требований одновременно изучаются подходы к тестированию, во время проектирования архитектуры системы разрабатываются высокоуровневые планы и сценарии тестирования, во время проектирования компонентов системы изучаются способы тестирования компонентов и их взаимодействия, создаются сценарии тестирования, пишутся утилиты, помогающие в тестировании, инструкции, скрипты и т.д. Всё это помогает лучше понять требования и спроектировать систему. Однако тут, также как и в каскадной модели, нежелательно, чтобы требования менялись во время разработки.

Спиральная модель (Spiral) – ориентирована на проекты, в которых имеются серьёзные риски. Разработка представляется в виде спирали. Каждый виток спирали – итерация. Виток спирали состоит из четырёх этапов: планирование, анализ рисков, разработка, оценивание заказчиком. В конце каждой итерации решается, стоит ли продолжать проект. Характерной чертой является то, что на этапе анализа рисков создаются прототипы, концепты, модели которые призваны разрешить риск на ранней стадии. Чем дальше движение по спирали, тем больше разработки продукта и меньше прототипов и концептов. Типичное применение такой модели – исследовательские проекты. Является очень дорогой моделью, и не оправдана в системах, где риски незначительны.

Итеративная модель – ориентирована на проекты, где требования могут меняться по ходу разработки. Проект состоит из итераций (от 1-2 до 6 недель). Каждая итерация может включать в себя этап анализа, проектирования, реализации, тестирования. Имеет большие накладные расходы на организацию процесса, чем каскадная модель, однако стоимость исправления ошибки в зависимости от длительности проекта не так высока. Следующие методологии реализуют итеративную модель: Scrum, XP, отчасти Kanban.

Методология Скрам (Scrum) – итерация называется спринтом. Команда состоит из 3 ролей: владелец продукта (представитель заказчика), скрам-мастер (следит за следованием процессу), остальные члены команды. Спринт начинается с митинга планирования, когда команда отбирает и распределяет задачи на итерацию, формируя бэклог спринта. Спринт заканчивается обзором спринта, где проводится демонстрация продукта и митингом ретроспективы спринта, на котором обсуждаются улучшения. Ежедневно проводятся 15-минутные скрам-встречи.

Методология экстремального программирования (XP) – состоит из 12 практик: парное программирование, разработка через тестирование, рефакторинг, простая архитектура, коллективное владение кодом, непрерывная интеграция, заказчик в команде, частые релизы, игра в планирование, 40-часовая рабочая неделя, стандарты кодирования, метафора системы. Обязательно использование всех 12 практик.

Методология Канбан (Kanban) – конвейер задач. Имеет всего 3 правила: визуализация процесса разработки с помощью канбан-доски, ограничение на количество задач на каждом этапе, постоянное измерение производительности команды и улучшения.

Методология RAD (Rapid Application Development) – ориентирована на быструю разработку приложения, итеративно, с максимально простой архитектурой, минимальными издержками на процесс, максимально используя готовые компоненты и мощные инструменты. Имеет ограничение на длительность проекта — 60-90 дней. Мне нравится аналогия с пирожками из полуфабрикатов. Так вот, RAD – когда нужно быстро слепить пирожок из готовых компонентов.

2. Разбор блок-схемы




Стартапы характерны тем, что там, особенно в начальный период, всё строится на энтузиазме. Далеко не всегда люди работают по 8 часов в день. Если им навязать какую то методологию и поставить в определённые рамки, то либо весь энтузиазм угаснет, либо никто не будет соблюдать правила. Например, довольно глупо ожидать, что инициатор стартапа придёт утром вовремя на скрам-митинг, после бурной ночи кодинга. В дальнейшем, когда всё стабилизируется, можно перейти к использованию подходящей методологии.



Каждый проект имеет риски. Однако в данном случае имеются в виду риски настолько серьёзные, что заранее не известно, можно ли будет вообще реализовать систему. Если такие риски присутствуют, то, скорее всего, вы начнёте разработку с прототипов, концептов, моделей и т.п. чтобы выяснить принципиальную возможность задуманного. В таком случае для вас наиболее оптимальной моделью будет спиральная модель. Типичный пример применения этой модели – исследовательские проекты. Но только исследовательскими проектами применение этой модели не ограничивается.

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



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

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

Пример из практики: нам необходимо было реализовать мобильное приложение, которое делало бы абсолютно то же самое, что и такое же приложение для настольного компьютера. Таким образом, требования были известными и неизменными на всём протяжении проекта.



Следующий вопрос: сложные ли требования. Вопрос опять-таки не однозначный и зависит от проекта. Кода вы начинаете проект, иногда бывает полезным на этапе анализа и проектирования продумать, как вы будете тестировать. Это может помочь раньше выявить потенциальные проблемы и лучше реализовать архитектуру, проработать требования и т.п. Когда требования сложные, рекомендуется тщательно продумать все сценарии тестирования, и ещё на этапе анализа и проектирования разработать подходы к тестированию, тест-планы и тест-кейсы. В таком случае нам приходит на помощь модель V-Model, являющаяся разновидностью каскадной модели.

Применение V-Model там, где требования достаточно простые приведёт к тому, что система окажется дороже. Более того V-Model критикуют за то, что она порождает множество документации и бюрократии и служит в реальности не для того, чтобы создать качественный софт, удовлетворяющий заказчика, а для того, чтобы в конце проекта доказать, что система работает как и требовалось изначально, вместо того, чтобы действительно разработать то, что ему было нужно.



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

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

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



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

Под продуктивностью понимается наиболее быстрый процесс добавления функционала в приложение. Под инженерией подразумевается высокий уровень организации разработки, новаторские подходы и сложные приёмы, которые могут быть применены только опытной командой. Я говорю о таких практиках экстремального программирования как разработка через тестирование, непрерывная интеграция, парное программирование и т.п. Особенность экстремального программирования заключается в том, что обязательно нужно использовать все 12 практик, только тогда эффект от них становится максимальным. Если вы не будете использовать какую-то практику, она обязательно потянет за собой все остальные. Например, если вы откажетесь от юнит тестов, тогда вы не сможете делать частые рефакторинги, без рефакторингов вы не сможете обеспечить простую архитектуру (как мы знаем простую архитектуру разработать сложнее, чем сложную) и т.п.

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



Если же вам нужна максимальная продуктивность, то также есть варианты. Скрам ориентирован на постоянное усовершенствование процесса. Для этого у него есть митинг ретроспективы, которые проводятся в конце спринта. Также во время обзора спринта обсуждается, что было сделано хорошо, что плохо и что улучшить. Если у вас опытная команда, хорошо отлаженный процесс и вам в принципе не нужны совершенствования, то следование методологии Скрам будет отнимать у вас слишком много времени, которое вы могли бы потратить с большей пользой. Например, по Скраму, если спринт длится 1 месяц, то обзор спринта должен занимать 4 часа и ретроспектива спринта – 3 часа. Плюс к этому есть планирование спринта, длящееся 8 часов и ежедневные Скрам митинги по 15 минут.

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



Если совершенствования не нужны и всё, что нужно, это сконцентрироваться на выполнении задач, то хорошо подойдёт RAD или Kanban. RAD имеет много общего с agile методологиями, но в нём есть существенное ограничение на длительность проекта. Желательно не более 60-90 дней. Канбан похож на некий беспрерывный конвейер, который может длиться бесконечно. Он хорошо работает на проектах поддержки, но плохо там, где требуется разработать сложную архитектуру, т.к. ориентирован на быстрое добавление фич в приложение. Под фичами имеется в виду кусок функциональности, который виден пользователю и непосредственно решает какую-либо его задачу. Например, логирование, оптимизация и масштабируемость пользователю не видны, это не фичи в терминологии Канбан. А вот новая страница, отчёт, дополнительные фильтры в поиске— это то, что видно пользователю и является фичей.

Источники:

1. Dr. Winston, W. Royce. Managing development of large software systems. 1970. http://www.cs.umd.edu/class/spring2003/cmsc838p/Process/waterfall.pdf
2. W Boehm, A spiral model of software development and enhancement. 1986. http://csse.usc.edu//TECHRPTS/1988/usccse88-500/usccse88-500.pdf
3. W Boehm. Spiral Development: Experience, Principles, and Refinements. 2000. http://www.sei.cmu.edu/reports/00sr008.pdf
4. С. Белоусова, И. Бессонова, Руджеро Гиляревский. Введение в программные системы и их разработку. НИУ ВШЭ. http://www.intuit.ru/studies/courses/3632/874/info
5. К. Швабер, Д. Сазерленд.Скрам Гайд. Исчерпывающее руководство по Скраму: Правила игры.
http://scrumguides.org/docs/scrumguide/v1/Scrum-Guide-RUS.pdf#zoom=100
6. Rational Unified Process. Best Practices for Software. Development Teams. http://www.ibm.com/developerworks/rational/library/content/03July/1000/1251/1251_bestpractices_TP026B.pdf
Introduction to OpenUP. http://epf.eclipse.org/wikis/openup/
7. Х. Книберг, М. Скарин. Scrum и Kanban: Выжимаем максимум. InfoQ. 2010
8. К. Ауэр, Р. Миллер. Экстремальное программирование. Постановка процессов. – СПб.: Питер: 2004
9. Экстремальное программирование – реальность и мифы. skipy.ru/philosophy/xp.html
10. M. Stephens, D. Rosenberg. Extreme Programming Refactored: The Case Against XP. APress, USA, 2003
11. James Christie. The seductive and dangerous V Model.
http://www.clarotesting.com/page11.htm
12. Adel Alshamrani. A Comparison Between Three SDLC Models Waterfall Model, Spiral Model, and Incremental/Iterative Model. http://www.academia.edu/10793943/A_Comparison_Between_Three_SDLC_Models_Waterfall_Model_Spiral_Model_and_Incremental_Iterative_Model

Комментарии (14)


  1. Greesha
    28.12.2015 22:17
    +1

    Методологию, как и Родину, не выбирают.

    В любой компании уже есть сложившиеся процессы. Эти процессы формируются годами. Создаётся организационная структура, допиливаются рабочие инструменты. Если вы пришли работать в компанию, вы не можете просто взять и выбрать методологию. Выбора между waterfall и XP в пределах одной компании просто не существует.

    Если в компании используется RUP, значит, она сидит на инструментах Rational, на которых вообще всё является RUP'ом.

    RAD сегодня существует только в книгах.

    И даже если вы включили God mode (сами создаёте компанию и формируете с нуля команду для собственного нового продукта), вы не сможете просто так взять и выбрать методологию.


    1. artur_g
      29.12.2015 13:45

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


  1. 9zloy
    31.12.2015 12:48
    +1

    Смешная диаграмма. Надеюсь, ей никто не воспользуется в жизни.


    1. artur_g
      31.12.2015 14:12

      C чем именно несогласны?


      1. S_A
        02.01.2016 04:43

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

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

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

        • Низкий риск и низкая прибыль (например, это заказные проекты, услуга по сути) — нужен самый экономичный процесс, и я склонен полагать что это что-то околоводопадное — как минимум потому, что каждая задача делается один-два раза
        • Низкий риск и высокая прибыль (случай монополии) — нужен метод, который позволит эту самую монополию не растерять. То есть быстро и качественно, и это (не поверите), канбан. Канбан обеспечивает качество возвратом задач.
        • Высокий риск и высокая прибыль (конкурентный рынок, инициативные проекты и стартапы) — подходит гибкий метод, который постоянно выдает максимум результатов. Скрум короче.
        • Высокий риск и низкая прибыль (начало работы с гос. организациями или другими крупными компаниями на конкурентном рынке) — тут лучше вообще перейти в другую нишу — поставок «комплектующих» для тех, кто работает на этом рынке. Если всё же работать на таком рынке, то нужен свой продукт, разрабатывать который можно спирально или по RUP (помесь водопада и гибких методов, водопадненькие итерации).


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

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


        1. artur_g
          02.01.2016 11:49

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

          Низкий риск и низкая прибыль… это что-то околоводопадное

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

          Низкий риск и высокая прибыль… и это (не поверите), канбан

          Это вообще ерунда, которую комментировать даже не хочется. Почитайте тут в комментариях про разницу между Скрамом и Канбаном.

          Высокий риск и высокая прибыль ...— подходит гибкий метод,

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

          Высокий риск и низкая прибыль

          Тут опять-таки всё зависит от ситуации.

          Ваш критерий экономической эффективности (про риски и прибыль) можно учитывать при выборе методологии в составе других критериев, среди которых есть и более важные. Вы же ставите его во главу угла. Ниже наиболее важные на мой взгляд:
          • Тип ПО (life-critical, mission critical, встраиваемое по, и т.п.)
          • Меняются ли требования
          • Сложность технического решения
          • Известны ли технологии
          • Длителность проекта
          • Размер и состав команды
          • Требования к качеству
          • Производительность, надёжность и отказоустойчивость


          1. S_A
            02.01.2016 12:20

            Нет, не угадали. Я 10+ лет в коммерческой разработке ПО, программистом, аналитиком, PM'ом и зам. диром в разное время в разных городах в компаниях разного размера. Экономическое образование правда тоже есть, но вы так говорите, как-будто это что-то плохое :) Покажите диаграмму директору компании где работаете, и скажите что экономическая эффективность проекта — это не самое важное.

            Все перечисленные «наиболее важные вещи» — влияют на экономическую эффективность в итоге. На самом деле есть даже показатель экономической эффективности для проектов, который учитывает риски, NPV.

            Всё комментировать не буду, так как в целом только что ответил. Отвечу только на неконструктив про разницу между скрамом и канбаном :) В канбане, как и на гембе у Тойоты, всегда допустимо «остановить конвейер». Казалось бы зачем? Затем чтобы дефекты не передавать на следующий этап. Управление качеством встроено в процесс, в отличие от скрама.

            Вы так вот сходу залезли в святая святых — методы организации разработки. Для многих их собственные методы и инструменты — священная корова, которую рожали в муках, как для авторов, так и для практиков этих методов. Так вот запросто вопрос не разрулить. Поищите тут на Хабре (Мегамозге теперь уже нынче), эти темы не раз и не два поднимались, консенсус и близко не найден.


            1. artur_g
              02.01.2016 12:35

              Как же вы ловко передёрнули про мои слова, что якобы экономическая эффективность не самое важное:) Продолжаю настаивать, что экономическая эффективность, в том виде, в котором вы рассказали про риски и прибыль, не самый главный критерий при выборе методологии.
              Простой пример: вы хотите купить цветы своему любимому человеку, в одном киоске красивые и свежие, но 5000, а в другом поломанные и вялые, но 100р. Вы решаете купить за 100. Попробуйте теперь рассказать при вручении подарка об экономической эффективности:)

              Все перечисленные «наиболее важные вещи» — влияют на экономическую эффективность в итоге

              Вот тут пошла чистая философия. И не поспоришь и к теме не понятно как относится.

              Про Канбан не совсем понял, что вы этим хотели сказать и как это относится к моему комментарию? Вы в этом видите главное различие или не согласны с тем, что Канбан не подходит для разработки ПО с нуля.


              1. S_A
                06.01.2016 03:29

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

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

                По моим наблюдениям, скрам, канбан и водопад — самые у нас в стране распространенные практики в инициативной и в заказной разработке, еще есть мода на критическую цепь, но это все равно водопад. Примерная логика экономического анализа может быть следующей. Смотрим риск, который можно определять по нижней границе как [ответственность поставщика за некачественный продукт * вероятность такого дефекта + затраты на весь проект включая разработку и обеспечение качества * вероятность отсутствия продаж], это будет максимум потерь для проекта, причем это сравнимый критерий. Теперь возьмем уже упомянутые скрам, канбан и водопад. В рамках одного проекта, гибкие методы своими техниками и практиками снижают вероятность дефекта с ответственностью, однако эти же техники и практики чаще всего обходятся не в копейки. И вот такими рассмотрениями можно уже оперировать при выборе, точнее в моей практике генеральные в подобном виде и запрашивают аналитику, прежде чем принять решение что-то менять в организации труда: что потратим и что приобретем. Просто деньги — это универсальные попугаи, которыми можно (и нужно) ранжировать альтернативы.


  1. pletinsky
    01.01.2016 02:36

    «Методология экстремального программирования (XP) – состоит из 12 практик» — да ладно. Она не только из практик состоит. Там много чего еще есть. Вальюсы и свое представление о жизненном цикле ПО. Практики — это практики.

    «Стартапы характерны тем, что там, особенно в начальный период, всё строится на энтузиазме.» — ерунда. Стартап стартапу рознь. Да и с чего вы взяли, что методология и правила обязательно вредны для энтузиазма. Не замечал такого.

    «Если же нам формализованный подход не нужен, тогда мы будем использовать, так называемые, гибкие методологии.» — крайне спорное утверждение. RUP не такой уж и формализованный. Гибкость (следование аджайл манифесту) не обязательно означает меньшую формализованность. Возможность меняться тоже требует формализации. Именно этим и занимается например Скрам. Нельзя так вольно раскидываться терминами.

    «Скорость или качество? На самом деле здесь подразумевается немного более сложная формулировка: продуктивность или инженерия?» — тоже какое то мутное утверждение. Скорость — это нисколько не продуктивность, а качество ни в каком месте не инженерия (по крайней мере не только она). Вы точно Кента Бека читали? Речь о том, готовы ли вы вкладывать деньги в механизмы, которые нивелируют экспоненциальный рост стоимости внесения новых изменений. Пресловуто «качество» — это ровно про это. Это чистой воды бизнес вопрос. И именно его нужно задавать.
    В моей практике всем известные парные программирования и tdd не только не тормозили разработку, а чаще ускоряли её. Говоря о затратах на «будущее проекта» в рамах XP мы имеем ввиду расходы в целом, включая найм подходящей команды, подготовку инфраструктуры и прочее.

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

    V-Model, RAD не применял — комментировать не могу. Интересно было почитать про них в статье. Но про Скрам, Канбан и Экспи — я бы не рекомендовал следовать этой схеме. Видение авторов очень своеобразно и спорно.


    1. artur_g
      01.01.2016 13:20

      Очень хорошо что вы написали такой развёрнутый комментарий. Теперь по пунктам:

      Она не только из практик состоит. Там много чего еще есть

      Изначально XP был придуман и развит сообществом как методология состоящая в основном из 12 практик. Почитайте Фаулера и других людей, которые двигали эту методологию в начале нулевых. Другое дело что всё меняется, совершенствуется, появляются свои вариации и подходы, которые улучшают методологию. Несомненно в XP есть много чего ещё. Я ведь написал в статье, что расскажу про упоминаемые методологии очень кратко, а 12 практик это базис на котором основывется методология. Кому интересно могут почитать об XP более подробно.

      ерунда. Стартап стартапу рознь.

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

      RUP не такой уж и формализованный.

      Я не работал с RUP и я читал статьи сотрудников IBM о том как сделать RUP гибким и я в курсе, что его можно адаптировать под что угодно. В реальности же вы будете работать в RUP по аджайлу только тогда, когда инфраструктура вашей компании тесно интегрирована с продуктами IBM. В ином случае никто не будет применять RUP там, где нужен гибкий подход. RUP, как и другие Unified Process, создавался как раз как формализованный подход в первую очередь. Я, например, участвовал в проектах где применялся адаптированный EssUP в качестве гибкой методологии и могу сказать, что такой подход работает. Но опять-таки никто не будет покупать EssUP и тратить время и усилия по адаптации в свой проект, если это не навязано компанией, проще взять Скрам. Вообще все эти UPы, как мне кажется, существуют только в больших корпорациях, как раз там где все процессы расписаны и применяется формализованный подход во всём.

      тоже какое то мутное утверждение. Скорость — это нисколько не продуктивность, а качество ни в каком месте не инженерия (по крайней мере не только она). Вы точно Кента Бека читали?

      Вот здесь я считаю, вы высказали распространённое заблуждение относительно XP. То, что вы использовали парное программирование и tdd не означает, что вы работали по XP. XP — это когда вы используете все 12 практик. Об этом и пишет Кент Бек. В реальности XP — методология крайне сложная во внедрении и успехов с ней можно добиться только накопив достаточный опыт. Конечно же нельзя утверждать, что скорость — продуктивность, и качество — инженерия, я это и не пытаюсь этого делать. Другое дело что вы не добьётесь высокой скорости разработки не повысив продуктивность работы, и не добьётесь высокого качества, если не будете использоват передовые и сложные технологии (например, парное программирование и tdd как вы описали). Смысл в том, что бизнесу не всегда нужно качество, а зачастую гораздо важнее разработать хоть что-то работающее, а допилить можно и после релиза. В этом случае, я уверен, Скрам подойдёт гораздо лучше XP, особенно если у вас неопытная команда. Конечно же, вы можете быть более продуктивными с XP, но ведь мы помним, статья обращает внимание на моменты, а не навязывает единственно верный подход

      И усовершенствования процесса — вообще не фишка скрама.

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


      1. pletinsky
        01.01.2016 14:07

        Стартапы как нельзя лучше демонстрируют это… и моя статья написана для того, чтобы обратить внимание на основные моменты.

        Я понимаю, но просто в целом вопрос «стартап?» — это ведь не тот вопрос который стоит задавать, чтобы понять нужно ли в принципе использовать какую то методологию. И про энтузиазм тоже не тот. Есть другие — правильные вопросы. Самый очевидный — это размер и состав проектной команды.

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

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

        Вот здесь я считаю, вы высказали распространённое заблуждение относительно XP. То, что вы использовали парное программирование и tdd не означает, что вы работали по XP.

        Вы сейчас домыслами занимаетесь. Взяли кусок фразы и попытались загнать свое представление обо мне в какой то свой шаблон. Шаблонное мышление не всегда полезно, тем более для такой статьи.
        Я привел в пример распространненый мем о том, что ряд xp практик уменьшают «скорость» разработки. Упомянул самые известные в этом смысле. Вот и все. Это не означает, что у меня не было проектов, где бы xp использовался полностью.

        Речь шла о том, что нужно четко понимать что такое «скорость» и «качество». Ну попробуйте заказчику задать вопрос, который у вас тут написан: «что для вас важнее — скорость или качество». Знаете какой будет ответ чаще всего? «И то и другое одинакого важно». А если вы еще попытаетесь рассказать, что «качество» — это какая то там инженерия, то он пальцем у виска покрутит. Скажет — нафик мне ваша инженерия, мне нужно бизнес решение моей задачи.

        С другой стороны вопрос «хотите ли вы сейчас вкладывать деньги в то, чтобы через год стоимость внесения изменений не стала высока, а через 3 года проект не пришлось из-за этого выкидывать» — это вопрос на который можно дать ответ.

        Столько уже копий сломано по поводу Скрама, каждый считает, что понимает его лучше.

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


        1. artur_g
          01.01.2016 17:06

          Есть другие — правильные вопросы.

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

          В сфере IT в больших корпорациях все может сильно разниться от команды в команде.

          Всё именно так в организации в которой я работаю.

          Скорее это зависит от размера конкретного проекта.

          Вот с этим соглашусь, всё-таки размер проекта более решающую роль играет чем размер компании.

          «гибкость» и «форализованность» — это не антонимы. И незачем их противопоставлять.

          А я их и не противопоставляю. Также как не противопоставляю скорость и качество. Вопрос в том куда смещать акценты.

          «нужен ли вам формализованный подход». Ответ на него всегда «да»

          тут всё-таки имеется в виду степень формализма. Условно говоря в Скраме не так много процессов расписано по сравнению с RUP и поэтому я позволяю себе называть его не формализованным подходом.

          Ну попробуйте заказчику задать вопрос, который у вас тут написан

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

          Ну неверно утверждать, что основа Скрама — это непрерывное улучшение Срама.

          В чём отличие Скрама и Канбана? Канбан в первую очередь конвейер по добавлению фич. Если необходимо много времени тратить на архитектуру, инфраструктуру то он уже начинает плохо работать. Поэтому он так хорошо прижился в проектах поддержки, и не так хорошо в проектах продуктовой разработки. Скрам же позволят создавать сложные приложения с нуля. Постоянные улучшения это конечно же не главное, но это одна из «фишек» Скрама. Действительно, она существенная, но всё-таки не главная в сравнении Скрама и Канбана. Я подумаю над тем как пересмотреть данный элемент блок схемы!


  1. pletinsky
    01.01.2016 14:06

    (удалил комментарий и перенес в правильную ветку)