Наш мозг видит причинно-следственные связи там, где их нет, не замечает проблемы там, где они есть, пытается объяснить необъяснимое, увлекается деталями и иерархиями. Поэтому, когда вокруг «все сложно», приходится искать гибкие подходы — и тут на помощь приходит Agile. Изначально это методология разработки ПО, но применять ее можно в управлении любыми проектами. T&P публикуют отрывок из книги Юргена Аппело «Agile-менеджмент. Лидерство и управление командами» о том, почему все обычно идет не так, как мы запланировали, и что с этим делать.

Причинно-следственные связи

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

В мире науки детерминизм оказался чрезвычайно успешным, позволив ученым предсказывать огромное количество разнообразных событий и явлений. Например, используя механику Ньютона, ученые уверенно предсказывают возвращение кометы Галлея в Солнечную систему в 2061 году. Научный метод предсказания будущих событий на основе событий, им предшествовавших, а также законов природы оказался настолько успешным, что философ Иммануил Кант провозгласил всеобщий детерминизм в качестве необходимого условия любого научного знания.

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

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

Где можно учиться по теме #Agile

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

Сложность

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

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

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

К счастью, с того момента, когда Кант с энтузиазмом объявил причинность основой научного знания, наука не стояла на месте. Теория динамических систем, теория хаоса, теория сетей, теория игр и ряд других научных дисциплин добились значительного прогресса, объяснив, почему некоторые явления невозможно предсказывать и почему некоторые события невозможно планировать или рассчитать заранее — их можно только испытывать или наблюдать. Часто весь комплекс исследований в области сложных систем собирательно именуют теорией сложности. Если развитие науки начиная с XVII века проходило под знаком детерминизма, то сложность как предмет исследования возникла в XX веке; соответствующие исследования значительно ускорились с того момента, когда в конце XX века теория сложности выделилась в отдельную научную дисциплину. Физик-теоретик Стивен Хокинг утверждал, что XXI век будет веком сложности.

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

© Stas_V / iStock

© Stas_V / iStock

Наше линейное мышление

К сожалению, применяя теорию сложности к решению конкретных проблем, мы постоянно сталкиваемся с определенным неудобством: наш мозг предпочитает видеть простые причинно-следственные связи и игнорировать сложность. В своей статье «Рожденные верить: Как наш мозг создает богов» автор показывает, что человеческий мозг чрезмерно ориентирован на установление причинно-следственных связей, что заставляет нас видеть их даже там, где их нет. Как отмечается в статье, дети думают, что острые скалы созданы для того, чтобы о них могли чесаться животные, а реки — чтобы по ним можно было плавать на лодках. По всей видимости, устройство человеческого мозга заставляет нас повсюду усматривать целеполагание и причинно-следственные связи, даже если для этого нет никаких оснований. […]

Наш мозг жестко запрограммирован отдавать предпочтение «линейному мышлению» (представлению о предсказуемости следствий, если известны причины) перед «нелинейным» (гипотезой, что в реальности все обстоит гораздо сложнее). Мы привыкли считать, что события от начала и до конца разворачиваются линейно. В школе нас учат решать линейные уравнения, а более часто встречающиеся на практике нелинейные игнорируются просто потому, что справиться с ними гораздо труднее. Нам легче принять утверждение «это сделал он», чем утверждение «некоторые вещи просто случаются». Если в наличии проблема B, то мы предполагаем, что ее причиной стало событие A. Причиной финансового кризиса стали банкиры; в сокращении числа рабочих мест виноваты иммигранты; в плохой атмосфере в компании виноват менеджер; таяние полярных льдов вызвано выбросами CO2; проектной группе не удалось уложиться в отведенные сроки из-за того, что кто-то плохо работал. Линейное мышление воспринимает мир как пространство, наполненное легкообъяснимыми событиями, вызванными простыми причинами и имеющими простые следствия. Джеральд Вайнберг называет это ошибкой причинности.

Наша мыслительная зависимость от детерминизма заставляет людей искать способы контроля, которые позволили бы обеспечить наступление желательных событий и ненаступление нежелательных. В конце концов, если известно, что ситуация A имеет своим результатом событие B, а ситуация A' — событие C, при этом C лучше, чем B, то всего-навсего надо заставить A превратиться в A', и все будет хорошо. Так по крайней мере часто кажется.

Инженеры и другие люди с техническим складом ума особенно восприимчивы к идеям, базирующимся на идее управляемости. Именно инженеры создали научный менеджмент, основанный на отдаче распоряжений и контроле их исполнения, который всецело господствовал с начала XX века. И именно они придумали системы контроля, которые до сих пор существуют во многих организациях. Сейчас уже всем известно, что системы контроля эффективны, только если речь идет о повторяющихся операциях, не требующих особых размышлений. Но они не работают в ситуациях, когда необходим творческий подход при разработке новых продуктов! Поэтому было бы только справедливо, если бы инженеры и вытащили нас из того управленческого болота, в которое они нас в свое время затянули. […]

Редукционизм

Подход, в рамках которого систему разбирают на части, а затем изучают взаимодействие этих частей, чтобы понять, как работает целое, называется редукционизмом. Суть подхода в том, что «явления могут быть исчерпывающе объяснены в терминах других, более фундаментальных явлений». Мы можем разобрать самолет на детали и увидеть, как он функционирует, изучив каждый винтик; мы можем понять, как работает компьютерная программа, проанализировав ее код; в настоящее время ученые пытаются изучать болезни и врожденные дефекты, анализируя геном человека в надежде идентифицировать отдельные гены, ответственные за те или иные проблемы.

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

Идея целостности

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

«Знание компонентов, находящихся на нижних уровнях системы, вовсе не означает, что мы сможем воссоздать всю систему как единое целое»

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

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

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

© Artfoliophoto / iStock

© Artfoliophoto / iStock

Иерархический менеджмент

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

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

Инженер-программист Джоэл Сполски предложил закон дырявых абстракций в качестве объяснения, почему в системах компоненты, находящиеся на более высоких уровнях, могут проявлять себя неожиданным образом в результате воздействия на них событий, происходящих на более низких уровнях, хотя более высокие уровни, по идее, должны быть изолированы от такого воздействия. Более высокие программные уровни, которые подвергаются воздействию событий, происходящих на более низких программных уровнях, считаются дырявыми. Типичным свидетельством такого рода дырявых абстракций в программировании будут непонятные сообщения об ошибках, которые получают пользователи.

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

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

Гибкий менеджмент

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

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

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

Эмерджентность
Наличие у системы свойств, не выводимых из свойств отдельных элементов.

Несмотря на блестящие успехи с точки зрения окупаемости инвестиций Agile-проектов [Rico 2009], многие менеджеры по всему миру в своих компаниях препятствуют гибкому проектному менеджменту и гибким методологиям. Исследования и опросы свидетельствуют, что основными препятствиями на пути принятия гибких методов разработки ПО становятся традиционные методы управления изменениями, организационная культура, недостаток поддержки со стороны руководства, низкая подготовленность персонала, а также внешнее давление.

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

Моя позиция в этой книге состоит в том, что, когда необходимы подобные изменения, традиционный менеджмент будет проблемой, а не решением. Эту же точку зрения много лет назад высказывал Уильям Эдвардс Деминг. Именно поэтому нам нужна теория гибкого менеджмента: теория, которая хорошо сочеталась бы с гибкими методологиями разработки ПО. […]