Существует ли методология PM, которая хорошо работает на крупных проектах?

Моя команда исторически насчитывала в среднем около 40 человек в течение нескольких лет, а часто и больше. У нас довольно сложный продукт, затрагивающий несколько проблемных областей. Мы переключились с водопада на схватку, и, оглядываясь назад, я должен сказать, что ни то, ни другое не сработало (хорошо). Как сказал мне один PM, наш проект был «всегда желтым или красным» (то есть в состоянии высокого риска или серьезно откладывался).

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

Мы перешли на Agile/Scrum (в очень простой форме). Из огня да в полымя: теперь у нас ужасные проблемы с получением логически непротиворечивого продукта. Это не странно, учитывая, что у нас есть 5 основных подкоманд (не все из них в одном географическом местоположении) и действует закон Конвея. Кроме того, повторный стресс в конце итерации в течение нескольких лет имеет тенденцию изматывать/истощать людей (хотя это мое субъективное ощущение, у меня нет достоверных данных, подтверждающих это). Также было ужасно удерживать людей достаточно долго в одном месте/подсистеме продукта, чтобы они могли стать экспертами и высокопродуктивными на своем месте: у меня создалось впечатление, что в этих постоянных изменениях мы развиваемся, становясь мастерами на все руки и мастерами своего дела. ничего такого. Оглядываясь назад, я не могу сказать, что схватка дала нам какие-то явные преимущества (у нас есть «схватка из скрамов»). конечно, и я не могу обнаружить, что это имело какое-либо значение). Конечно, отсутствие большого предварительного дизайна в моем POV является серьезным недостатком: работа рассинхронизируется, плохо разбита на разделы, и ее нужно будет переделывать или модифицировать позже.

Это похоже на классический тупик процесса CS, только перенесенный на уровень концепции/дизайна: разработчик/подгруппа A ждет, пока разработчик/подгруппа B завершит дизайн X, на который он/она рассчитывает, чтобы он мог завершить свой дизайн Y, в то время как разработчик/подгруппа B ждет, пока А сделать свой/их дизайн Y, чтобы они/он могли сделать X.

Scrum ничего не говорит об инфраструктурных задачах, кроме «втиснуть это в какую-нибудь пользовательскую историю» (и поэтому страдает инфраструктура). Дополнительные 3 небольшие группы по подтемам (внутренняя, внешняя, команда контент-провайдера, использующая продукты обеих предыдущих) для конкретной области все еще не могут даже договориться об общем представлении данных и формате. Отслеживание фактического состояния миллиона задач — это кошмар. В команде согласны с тем, что скрам не дал нам никаких преимуществ, но потребовал дополнительных затрат. Конечно, это не заставило нас уделять больше внимания тому, что на самом деле нужно клиентам/конечным пользователям.

Я не могу поверить, что говорю это, но у нас водопад работал (немного) лучше, чем скрам (или, если быть более точным: он был «не так плох, если только чуть менее плох»).

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

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

Единственное решение, которое я лично вижу, было бы таким:

  1. проведите большой предварительный анализ (сбор требований) и большой каскадный дизайн (принципы, предположения, бизнес-логика).
  2. рассматривать его как черновик, который нужно изменить, начальную отправную точку, которую нужно изменить на лету.
  3. разработайте этот «большой проект» итеративно, используя схватку или канбан.
  4. пусть аналитики и дизайнеры постоянно переоценивают общую картину — остается ли продукт согласованным, и синхронизируют дизайн и код.

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

Эта очень длинная справочная информация подводит меня к моему вопросу: существуют ли методологии управления проектами, которые хорошо работают на больших проектах?


Более подробная информация:

  1. Я понимаю, что карта не дорога. Конечно. Но я не могу представить, как добраться до Аляски из ЮАР без карты. :-) Как говорят в математике, методология для меня необходимое, а не достаточное условие.

  2. Проблемы:

    • Сроки: сжатые.
    • Бюджет: сильно недофинансирован.
    • Изменения области действия: константа.
    • Требования: часто меняется, много пробелов.
    • Структура команды: ситуация с вращающимися дверями, люди бездумно перемещаются.
    • Другие проблемы: много (действительно плохого) устаревшего кода, отсутствие оценки долгосрочной ситуации и затрат/выгод со стороны управления.
    • Да и еще: нет (приложения) SW архитектор.
  3. Я знаю, что люди раскритикуют мое видение как «требование автопилота / панацеи», но я склонен думать, что А. Уайтхолл был прав, когда сказал, что прогресс измеряется рядом вещей, которые мы можем делать, не задумываясь. Идеальная методология подойдет любой команде: просто имейте смелость следовать процедуре. Если «другие факторы» — неизвестные факторы — необходимы для успеха проекта, то какие?

Я начинаю думать, что все это бесполезно. Я сделал несколько грубых расчетов в качестве примера: Представьте: n функций, m классов (при условии объектно-ориентированного программирования), k характеристик программного обеспечения (надежность, производительность в различных контекстах, безопасность, стоимость реализации, количество дефектов, время, необходимое для завершения разработки, тестирования). стоимость, время тестирования и т. д.), o люди. Потенциальная сложность: каждую функцию можно разделить на p классов (p меньше m, при этом сумма всех p для всех функций == m), она влияет не более чем на k характеристик и может потребовать работы или вмешательства любого подмножества из o людей.

Таким образом, сложность в наихудшем случае (количество комбинаций) равна n*m*k*o. с 20 функциями, 500 классами, 10 аспектами и 40 людьми, что составляет 4 000 000 (4 млн). Предполагая щедрое время выпуска в 18 месяцев, это 222222 (222 тысячи) комбинаций в месяц. Предположим, мы разрезаем 500 (или «m») классов на 50 управляемых коллекций, причем каждую коллекцию можно модифицировать/рефакторить внутри, не затрагивая другую коллекцию. Это по-прежнему более 22 тысяч комбинаций в месяц.

Человек не может отследить столько потенциальных влияний функций/классов/лиц на k (характеристики программного обеспечения) и выбрать наилучшие комбинации (запланировать заранее). Какой-то научно-фантастический инструмент с искусственным интеллектом должен был бы это сделать. В противном случае мы просто бросаем «радуйся жизни»: может быть, это сработает достаточно хорошо в достаточном количестве случаев, чтобы проект не задерживался. А может и не будет.

Справочная информация, чтобы дать вам лучшее представление о рассматриваемой системе. Это должно быть своего рода «анонимным» по причине конфиденциальности.


Поток данных

К счастью, это довольно просто: агенты <-> сервер, причем сервер состоит из следующих основных подсистем:

  • связь с агентом
  • инвентарь
  • агрегация данных
  • генерация отчета

(конечно, есть много вспомогательных подсистем, от консоли конфигурации сервера до веб-интерфейса и REST API, но я не включаю их здесь)


Выполнение

Технологии: C, Java, SQL. Среды варьируются от сотен до десятков тысяч агентов (самая большая среда: около 100 тыс. агентов).

Размер кода: несколько тысяч файлов Java, организованных примерно в 500 пакетов. Всего на данный момент около 900 KLOC (не считая агента). Так что он не такой уж большой, но сложный в том смысле, что включает множество проблемных областей.

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

Есть методы, которые делают огромный проект более управляемым, а именно: разбить проект на части и отложить остальные для постепенной доработки. «Большой» — это восприятие. Если вы хотите изменить свое восприятие, уменьшите его. Наша история показывает, что мы успешно завершили невозможные проекты, например, почти все, что сделало НАСА, и есть еще.
Всякий раз, когда я слышу о «больших проектах», я вспоминаю TMMM , где Брукс обсуждал свои проекты OS/2 с более чем 5000 человек. Это заставляет меня чувствовать себя таким... любителем.
«Большой» семантически не эквивалентен «сложному». Scrum предназначен для эффективной работы в сложных возникающих системах, но правильное внедрение любой системы управления проектами — это скорее искусство, чем наука.
@David Espina, Code Gnome: Вот где язык как бы ломается: основная проблема с нашим проектом не в том, что он либо большой в KLOC/FP, либо «сложный». Архитектура потока данных проста. Проблема в том, что проект больше похож на «чашу со скрепками», чем на набор независимых функций — вы не можете коснуться какой-либо функции или проблемы, не повлияв на большинство других аспектов, подсистем и проблем.
@DE: если вы можете аккуратно разбить свою систему на множество очень независимых подсистем, вы сможете выполнять даже чрезвычайно сложные проекты. При всем уважении к Brooks и OS/2, операционная система как таковая и есть такая система: разложить на управление процессами, менеджер виртуальной файловой системы (Linux), драйверы файловой системы, менеджер виртуальной памяти, сетевой стек, брандмауэр и т.д. большинство из них не затрагивают другую подсистему. Это самая роскошная ситуация, которую я могу придумать с внутренними зависимостями ("миска со скрепками").
Операционная система OS/2 как раз такая система . Да, выпущен в апреле 1987 года . Их записи были сделаны на бумаге. У них не было даже блокнота. Одна из их самых больших проблем состояла в том, чтобы постоянно обновлять груды и груды бумаги с «документацией».
У меня есть некоторые доказательства того, что декомпозиция/разделение системы может решать проблемы зависимостей аккуратным, хотя и неинтуитивным способом: моя компания купила другой продукт, который исторически справлялся со сложностью гораздо лучше. Они сделали это путем чрезвычайно строгого контроля над сервером сбора данных: всякий раз, когда вы добавляете что-то от агента, который запускает ваши собственные задачи, вы должны следовать формату и правилам сбора данных. А затем перетащите все данные, которые вам нужны, на отдельные серверы аналитики/управления (использование, управление исправлениями, безопасность, конфигурация и т. д.). Это работало невероятно хорошо для них.
@Tiago Cardoso: я это понимаю. Должно быть, это было очень тяжело, но, думаю, по причинам, отличным от наших. В другом месте - когда Билл Гейтс умолял и шантажировал программистов создать единый элемент управления форматированным текстом для повторного использования пользовательского интерфейса Windows, ему не нужно было беспокоиться о проблемах с файловой системой. В нашем проекте адски другое: если что-то трогаешь, почти все остальные кричат ​​"нет!" потому что это каким-то образом влияет на суть того, что они делают (например, из-за этого агрегация данных занимает больше времени до такой степени, что это становится неприемлемым).
Он напоминает мне старый проект, с которым я работал, @mrkafk ... это был проект обслуживания инструмента VBA с более чем сотнями тысяч (на самом деле!) кода (спагетти). К счастью, сейчас он выведен из эксплуатации.

Ответы (4)

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

Основываясь на моем опыте работы над проектами биозащиты для правительства США, по мере того, как сложность проекта возрастает, возрастает и ваша потребность в предварительном планировании и тщательном надзоре за проектом. Независимо от того, используете ли вы водопад, agile или что-то еще:

  • Не торопитесь при первоначальном планировании. Убедитесь, что вы привлекаете необходимые заинтересованные стороны. Проведите открытый и честный разговор о возможностях и предположениях. Придумайте реалистичный график, бюджет и объем работ.
  • Потратьте время, чтобы пересматривать план через регулярные промежутки времени. Когда ключевая веха достигнута, не просто вычеркивайте ее из списка. Усадите команду, отпразднуйте успех и проанализируйте предстоящую работу. Узнайте, как изменились базовые предположения и возникли ли какие-либо проблемы, которые могут повлиять на первоначальный план.
  • Создайте надежную систему контроля изменений. Если кто-то хочет нормального изменения, ему просто нужно следовать утвержденному процессу. Не допускайте внезапных изменений в команде. Это приведет к расползанию масштаба и сделает ваш план недействительным.
  • Создание надлежащих структур управления. Вы, как PM, должны работать со спонсором/чемпионом проекта, чтобы выполнить проект. Вы оба должны отчитываться перед проектным комитетом/советом, который представляет интересы поставщиков, клиентов и бизнеса. Убедившись, что все они имеют право голоса, это поможет привести проект к положительному завершению.
  • Своевременно и эффективно сообщайте о прогрессе. Настройте регулярные отчеты с ключевыми заинтересованными сторонами, чтобы вы могли отмечать проблемы и заранее управлять ожиданиями. Они могут быть написаны через телеконы или что-то еще, что является наиболее подходящим.
@Doug B: У меня возникает соблазн пометить ваш ответ как «принятый», но я хочу подождать (возможно, напрасно) в надежде, что придет еще лучший ответ. Глядя на мой проект, я должен сказать, что когда мы перешли на Agile/Scrum, стало намного хуже во всех перечисленных вами отделах. В прошлом BDUF обеспечивал некоторую согласованность, контроль изменений и планирование. Сейчас у нас их почти нет. Так что, разделив их между собой, я думаю, вы уловили большую часть основных причин наших проблем. Это похоже на проблему ответственности, к которой методология имеет лишь косвенное отношение.
@Doug B: Чем больше я об этом думаю, тем больше мне нравится твой взгляд на проблему. Оглядываясь назад, я думаю, что наиболее разрушительными для нас были неудачи в «Не торопитесь при первоначальном планировании» и «Создание надежной системы управления изменениями». Кроме того, у меня сложилось впечатление, что когда у вас есть скрам-команды, работающие над подсистемами, а не над бизнес-функциями от начала до конца, демонстрации почти бесполезны для внешних заинтересованных сторон. Они даже не пытаются понять это, потому что это не приносит им прямой пользы. Таким образом, «сообщение о прогрессе» должно осуществляться в другой форме.
@mrkafk Демонстрации могут быть взяты из функций интеграции Scrum-of-Scrums, а не из отдельных подпроектов, если это лучше подходит для вашей среды.

Спрашивать, существует ли методология , которая хорошо работает для большого проекта, звучит все равно, что спрашивать, может ли маршрут на карте привести кого-то из Южной Америки на Аляску.

Есть ли (методика или карта)? Да. Будет ли он делать это (работать или путешествовать) сам по себе? Определенно нет.

Методика – это ориентир. Но, как и карта, это всего лишь подсказки, как чего-то или куда-то достичь, а не сама судьба.

Вы упомянули Waterfall x Agile. ЗДЕСЬ есть очень хорошее обсуждение этой темы , и я считаю, что ответ Павла потрясающий (как обычно!). В вашем случае, как для большого проекта, кажется, что более формальная методология подойдет лучше (например, водопад), но нет строгого правила, говорящего об этом.

Итог: проблема не в карте . Проблема не в методологии . Сказав это, основной вопрос здесь:

Какова проблема вашего проекта номер один? Или почему ваши проекты всегда между янтарным и красным?

  • Сроки?
  • Расходы?
  • Сфера применения меняется?
  • Непонятные требования?
  • Структура команды?
  • Любая другая проблема?

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

Классическая задача X/Y

В комментариях ОП подробно рассказал о среде своего проекта. Он сказал:

[T] основная проблема с нашим проектом не в том, что он большой в KLOC / FP или «сложный» ... Проблема в том, что проект больше похож на «чашу со скрепками», чем на набор независимых функций - вы не можете коснуться какой-либо функции или проблемы, не повлияв на большинство других аспектов, подсистем и проблем.

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

Итак, это проблема X/Y, потому что:

  1. X: Основная проблема либо архитектурная, либо концептуальная — возможно, и то, и другое. Возможно, работа не была достаточно декомпозирована, или подпроекты не были спроектированы так, чтобы быть достаточно автономными. В любом случае проблема заключается в запутанности задач.
  2. Y: ОП определил, что основная проблема будет решена с помощью другой методологии, и поэтому спрашивает: «Существуют ли какие-либо методологии управления проектами, которые хорошо работают в крупных проектах?»

Решите вместо X

Основываясь на моем понимании первопричины, я бы рекомендовал рефакторинг плана проекта, а не перепроектирование процесса управления проектом. Конкретно:

  1. Проведите обзор архитектурных предположений проекта. Посмотрите, можно ли реорганизовать архитектуру, чтобы сделать ее более слабо связанной.
  2. Пересмотрите структуру декомпозиции работ и посмотрите, можно ли достаточно декомпозировать задачи, чтобы избежать зависимости между вехами.
  3. Рассмотрите возможность рефакторинга плана проекта на подпроекты, которые менее взаимозависимы. Это нетривиально, если проект уже был разработан как «чаша со скрепками», но, безусловно, стоит хотя бы мысленного эксперимента, чтобы увидеть, можно ли это сделать.
  4. Пригласите свою техническую группу для обсуждения способов уменьшения технических или технологических зависимостей.

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

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

Я так и подозревал, и вы совершенно правы в проблеме X/Y. (то есть: у нас есть эта проблема, помимо ответственности, подотчетности и организационной структуры, а также отсутствия внутрикомандных проблем с управлением требованиями). Я уже сталкивался с последствиями серьезной проблемы и разделения работы в моей предыдущей скрам-команде, поэтому я сразу понял это. Но есть так много проблем, которые нужно решить одновременно, что я даже не смог сформулировать их все в одном посте.
+1 за рассмотрение межзадачных зависимостей как риска проекта .

Водопад успешно используется в самых крупных проектах в мире, например, 500 человек в течение 6 лет при стоимости 21 миллиард долларов. В основном это инфраструктурные проекты (мосты, туннели и железные дороги), аэрокосмические и оборонные проекты (самолеты и системы вооружения) и энергетические проекты (трубопроводы, буровые установки).

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

Вам нужно взглянуть на организацию, руководство и проектную среду. Это не вопрос методологии.

спасибо, хорошие подсказки - но это не касается вопроса "как", с которым у меня возникли проблемы: организация - как? то есть, как моделировать структуры? Руководство: недостаточно активно, я думаю. Мне еще предстоит припомнить ни одного визита владельца подсистемы (эквивалент «владельца продукта» в базовом скраме, я думаю) ни на одном из скрам-совещаний в двух командах, в которых я участвовал. Окружающая среда проекта: на самом деле довольно хорошая, люди по-прежнему настроены оптимистично, дружелюбны и готовы помочь друг другу. Кажется, мы просто не можем собрать наше выступление в экономное «целое».
«Как» — это не то, на что можно ответить на таком сайте. Это не рецепт, контрольный список или быстрое решение. Это процесс, который начинается с более глубокого понимания организации. Вам нужен уполномоченный агент перемен или катализатор.