Способность задавать вопросы отличает нас от всех остальных форм жизни. Никакой другой биологический вид не задает вопросов о смысле своего существования, сложности Вселенной или сложности самого себя.
Многие эксперты в области гибких методологий согласны, что команда разработчиков представляет собой сложную адаптивную систему, поскольку состоит из множества частей, взаимодействующих друг с другом и отделенных внешней границей, и способна изменяться и учиться на собственном опыте [Highsmith 1999: 8], [Schwaber 2002: 90], [Larman 2004: 34], [Anderson 2004: 1], [Augustine 2005: 24]. Кто я такой, чтобы утверждать обратное?
Журнал «Эмерджентность: Теория сложности в применении к организациям» однажды провел обширное исследование книг по менеджменту, в которых упоминается теория сложных систем. Среди рецензентов были специалисты в самых различных областях, включая физику и математику. Все они сошлись во мнении о полезности теории сложности при управлении организациями и для менеджмента в целом:
Было зафиксировано общее согласие [рецензентов], что использование идей теории сложности имеет значительные перспективы для менеджмента как дисциплины и при практическом управлении организациями.
Как вы увидите позже, дебаты среди экспертов касаются в основном того, какая именно научная терминология должна применяться и в каком именно контексте.
Как и предыдущая, данная глава содержит не более чем вводный обзор по данной теме. Только на этот раз нашим предметом будет теория сложности. Или скорее теории — во множественном числе, — поскольку, как у вас будет возможность убедиться, система знаний о таких системах за последние сто лет разрослась и сейчас представлена значительным числом различных теорий.
Всегда полезно представлять себе контекст и историю вопроса. Когда вы в следующий раз окажетесь на вечеринке, то сможете блеснуть, объяснив, например, разницу между общей теорией систем и теорией динамических систем, а также дав понять, что рецепт восхитительного лимонного торта, которым угощает хозяйка, не сложный (complex), а лишь запутанный (complicated).
Необходимое предупреждение: данный обзор по необходимости неполон, излишне упрощен и временами субъективен. Но я уверен, что именно по этим причинам он будет абсолютно понятен.
В главе 13 «Как управлять ростом организационных структур» обсуждаются организационные колодцы, то есть разделение сотрудников, выполняющих разную работу, и то, почему это часто оказывает негативное воздействие на результаты деятельности всей компании. Интересно, что подобная ситуация много лет существовала и в науке.
Большинство университетов и исследовательских институтов организованы именно в виде таких колодцев. Физики работают бок о бок с другими физиками, биологи — с биологами, а математики — с математиками. Это привело к фрагментации науки и распространению туннельного зрения среди ученых и исследователей. Различные научные дисциплины настолько изолированы друг от друга, что ученые обычно не знают, над чем работают их коллеги [Waldrop 1992: 61].
Организационные колодцы в науке — это проблема, поскольку многие явления из разных научных областей часто похожи друг на друга. Например, некоторое время назад экономисты не могли понять природу такого явления, как «локальное равновесие», в то время как физикам уже была известна природа его физического аналога [Waldrop 1992: 139]. Фазовые переходы в физике подозрительно напоминают случаи периодически нарушаемого равновесия в эволюционной биологии. Биологи заметили, что математики могут помочь им в анализе экологии видов [Gleick 1987: 59]. А некоторые «открытия» математиков, как выясняется, были за годы до того сделаны метеорологами [Gleick 1987: 31].
В течение многих десятилетий ученые из различных областей пытались понять сложные явления, которые не могли объяснить. Но когда наметились более тесные междисциплинарные связи между различными областями и возникло общее представление о том, что изучаемые разными науками системы — сложные, внезапно многое стало гораздо понятнее. Я где-то читал, что самые значительные прорывы в науке совершались именно тогда, когда ученым приходилось работать в областях, с которыми они прежде не были знакомы. А все потому, что они привносили туда знания и опыт (включая опыт трудностей и неудач) из тех областей, в которых были специалистами!
Как и гибкие методики разработки ПО, теория сложности подразумевает междисциплинарный подход к решению проблем. Мышление в категориях сложных систем — это противоядие от излишней специализации в науке. Оно предполагает существование общих закономерностей в поведении систем, исследуемых различными научными дисциплинами, и продвигает подход к решению проблем, базирующийся на концепциях из различных наук. Однако теория сложности далеко не первая попытка синтеза различных предметных областей. Давайте бросим беглый взгляд на историю вопроса.
В конце 1940-х годов усилиями группы ученых и исследователей, возглавляемых Людвигом фон Берталанфи, была создана область науки, получившая название общая теория систем (иногда ее называют просто теория систем). В своих исследованиях эти ученые исходили из представления, что большинство явлений во Вселенной можно рассматривать как сеть взаимодействий между элементами определенной системы. При этом независимо от того, будут ли данные системы биологическими, химическими или социальными по своей природе, их поведению присущи общие закономерности, исследование которых может пролить свет на поведение систем в целом. Основной целью теории систем, таким образом, было создать общий междисциплинарный понятийный аппарат и язык, при помощи которых можно было бы описывать сходные явления во всех областях науки.
Одним из достижений теории систем, развитие которой продолжалось вплоть до 1970-х годов, был перенос фокуса с элементов системы как таковых на организацию этих элементов. Тем самым было признано, что взаимоотношения между элементами системы — динамические, а не статические. Ученые идентифицировали и изучили такие явления, как аутопоэзис (самопостроение или способы, которыми системы конструируют сами себя), идентичность (каким образом системы можно опознать), гомеостаз (способность систем поддерживать свою стабильность) и проницаемость (то, как системы взаимодействуют с окружающей их средой) [Mitchell 2009: 297].
Именно общей теории систем мы обязаны пониманием, что группы разработчиков представляют собой системы, которым свойственна способность к самопостроению, а также к созданию и поддержанию собственной идентичности. Таким группам необходимо взаимодействовать с внешней средой, а взаимодействия между членами группы столь же важны, сколь и характеристики отдельных членов группы (или даже важнее).
К сожалению, объединение этих первоначально разрозненных концепций не было доведено до конца (что не должно удивлять тех разработчиков ПО, которые пытались соединить различные практики или технологии). И тем не менее наследие общей теории систем весьма значительно. Почти все законы этой теории применимы и к сложным системам [Richardson 2004a: 75], и в целом эта теория продвинулась дальше, чем попытки унифицирования в области разработки программных продуктов.
Примерно в то же время, когда концепции общей теории систем разрабатывались группами биологов, психологов, экономистов и других исследователей, столь же разношерстная группа нейрофизиологов, психиатров, антропологов и инженеров создала новую область исследований, которая получила название кибернетика. Наиболее известной фигурой, представлявшей данное направление, был математик Норберт Винер.
Кибернетика изучает сложные управляемые системы, имеющие цели и взаимодействующие с окружающей средой через механизмы обратной связи. Задача кибернетики — изучение процессов, происходящих в управляемых системах. Эти процессы состоят из многократных итераций какого-либо действия (которое вызывает изменения во внешней среде), получения информации о состоянии среды (данные о реакции внешней среды на совершенное действие), оценки (сравнение текущего состояния с целевым) и возврата на этой основе к совершению нового действия. Для кибернетики этот циклический процесс фундаментален.
Из кибернетики мы позаимствовали представление, что команда разработчиков представляет, по сути, ориентированную на определенную цель систему, саморегулирующуюся посредством различных циклов обратной связи. Мы поняли, что в саморегулирующейся системе, которой является команда разработчиков, наиболее важными факторами будут информация, коммуникация и целеполагание (в отличие, скажем, от силы и энергии). Кибернетика также помогла осознать решающую роль обратной связи в эволюции поведения сложных систем [Mitchell 2009: 296].
Многие путают общую теорию систем и кибернетику. Это неудивительно, поскольку они очень сильно повлияли друг на друга. Обе они имеют не вполне прозрачные названия, обе ставили себе целью создание единой научной теории, описывающей поведение систем. И ни той, ни другой не удалось реализовать первоначальные цели. И тем не менее кибернетика и общая теория систем продвинули данную область знания вперед, заложив фундамент, на котором были созданы позднейшие теории.
Если рассматривать общую теорию систем и кибернетику как ноги некоего человека, символизирующего собой всю массу знаний о поведении систем, то одной из его рук, бесспорно, будет теория динамических систем.
Возникнув из прикладной математики в 1960-х годах, теория динамических систем говорит о том, что системам свойственно много состояний и одни из них устойчивы, а другие нестабильны. Если отдельные компоненты системы не меняются со временем или же, подвергнувшись тем или иным возмущениям, всегда возвращаются к исходным значениям, мы говорим, что такие устойчивые состояния выступают в роли аттракторов.
Актуальность теории динамических систем для разработки программных продуктов состоит в том, что она помогает объяснить, почему некоторые проекты устойчивы, а другие нет. И почему иногда невозможно изменить организацию, имеющую устойчивую тенденцию возвращаться к своему исходному состоянию.
Теория динамических систем сыграла ключевую роль в возникновении последующих теорий, предложив математические инструменты для работы с трудноизмеряемыми понятиями общей теории систем и кибернетики. (Приятно осознавать, что хотя бы некоторые компоненты теории сложности не результат гениальных озарений, а базируются на надежном математическом фундаменте.)
Мы уже упоминали, что теорию динамических систем можно представить себе в виде руки некоего человека, символизирующего все наши знания о системах. В этом случае теория игр, вне всякого сомнения, представляет собой вторую руку. Многие системы часто конкурируют друг с другом за одни и те же ресурсы — или пытаются съесть друг друга на обед. Как вытекает из теории игр, в таких случаях системы могут создавать конкурирующие стратегии.
Будучи одним из направлений прикладной математики, теория игр ставит себе задачей описание поведения систем в ситуациях, требующих стратегического подхода. В этих ситуациях успех одной системы отчасти зависит от тех моделей поведения, которые выбрали другие системы. Теория игр получила свое развитие в 1930-х годах, а в начале 1970-х нашла применение в биологии и эволюционной теории. Тогда стало понятно, что она вполне годится для анализа стратегий, к которым живые организмы прибегают во время охоты, спасаясь от хищников, при защите своей территории и во время брачных игр.
Теория игр оказалась полезным инструментом во многих областях, включая экономику, философию, антропологию и политологию. И конечно, в сфере разработки программного обеспечения, где она не только позволяет программистам создавать компьютерные игры, электронные аукционы и одноранговые сети, но также объясняет поведение людей в командах и поведение команд в организациях.
Сейчас трудно представить себе человека, который не был бы знаком с эволюционной теорией. Она получила известность с момента выхода в свет в 1859 году «Происхождения видов» Дарвина, одной из самых знаменитых книг в истории. Практически все биологи согласны с базовыми утверждениями теории эволюции: постепенное генетическое изменение видов и выживание наиболее приспособленных организмов в результате естественного отбора.
Конечно, согласие относительно базовых постулатов не мешает бесконечным спорам биологов по поводу деталей процесса. Важность случайного генетического дрейфа (изменение вида без определенных причин), периодически нарушаемого равновесия (внезапные изменения вместо постепенных), эгоистичных генов (отбор на уровне генов, а не на уровне особей или популяций) и горизонтального переноса генов (передача генов другому организму) — все эти гипотезы многократно и страстно биологами обсуждались, принимались или опровергались [Mitchell 2009: 81–87]. (Но стоит только в качестве альтернативы предъявить биологам теорию разумного замысла, как они моментально объединяются в своем отрицании этой ненаучной ерунды.)
Эволюционная теория внесла значительный вклад в изучение всех видов систем, будь то биологические, цифровые, экономические или социальные. Утверждается, что команды, проекты и продукты эволюционируют в процессе приспособления к изменяющейся среде. И хотя «эволюционное управление разработкой» систем программного обеспечения — это далеко не та эволюция, о которой писал Дарвин, эволюционное мышление помогло разобраться с ростом, выживанием и адаптацией систем во времени. Поэтому я считаю, что эволюционная теория представляет собой интеллектуальную основу нашего знания о системах.
Хотя несколько открытий в рамках теории хаоса были сделаны ранее, настоящий прорыв был совершен в 1970–1980-х годах, а основной вклад был внесен такими людьми, как Эдвард Лоренц и Бенуа Мандельброт.
Теория хаоса учит, что даже самые небольшие изменения в начальных параметрах динамической системы могут впоследствии вызвать серьезные последствия. Это означает, что поведение многих систем в конечном итоге непредсказуемо, а небольшие затруднения могут трансформироваться в огромные проблемы, с чем легко согласится любая группа разработчиков программного обеспечения. Такая непредсказуемость означает далекоидущие последствия с точки зрения предварительной оценки, планирования и контроля системы — это отлично знают ученые-климатологи и специалисты по организации дорожного движения и значительно хуже понимают менеджеры проектов и линейные менеджеры.
Еще одним из открытий теории хаоса стали фракталы и масштабная инвариантность, то есть свойство графиков, отражающих поведение систем, выглядеть одинаково независимо от применяемого масштаба.
Некоторые считают теорию хаоса непосредственной предшественницей теории сложности, поскольку обе они признают неопределенность и изменчивость в качестве основных свойств исследуемых систем. По моему мнению, теория хаоса — это основа наших знаний о сложных системах.
Как нет единого определения сложности, так нет и единой теории, которая объясняла бы поведение всех сложных систем разом [Lewin 1999: x]. Ученые давно пытаются обнаружить фундаментальные законы, которые были бы применимы к любым системам при любых обстоятельствах, но пока что эти попытки не увенчались успехом.
Представляется разумным задать вопрос: что же такое эта «теория сложности»? И хотя есть множество ее определений, существует точка зрения, что единого описания данная теория не имеет.
Каждая система имеет свои специфические особенности, поэтому выводы, сделанные из прошлых результатов, не дают гарантии будущих успехов. Так что, судя по всему, все, что у нас сейчас есть, — это набор различных теорий, которые иногда дополняют друг друга, иногда перекрывают, а иногда и противоречат друг другу.
Более того, существует достаточное количество более локальных исследований, каждое из которых внесло свой вклад в развитие знаний о сложных системах. Их можно сравнить с глазами, ушами и пальцами нашего человека, олицетворяющего всю сумму известных на данный момент знаний о поведении сложных систем. Например, исследования диссипативных систем дали нам представление о спонтанном формировании структур и о том, каким образом может протекать самоорганизация систем внутри границ. Изучение клеточных автоматов продемонстрировало, что сложное поведение системы может быть результатом простых правил. Исследования в области искусственной жизни показали, как осуществляется обработка информации в агент-ориентированных системах. Благодаря изучению самообучающихся систем мы поняли, каким образом генетические алгоритмы обеспечивают способность живых систем к адаптивному обучению. А в результате анализа социально-сетевых структур мы теперь понимаем, как распространяется информация среди людей.
Несмотря на то, что некоторые части тела нашего человека выглядят непропорционально и что сам он уродливее, чем зомби в балетной пачке, он тем не менее весьма живой — как и сумма знаний, которую олицетворяет (рис. 3.1). И когда эти знания применяются к сложным системам, мы называем их теорией сложности. Но что конкретно мы имеем в виду, когда говорим, что система, с которой мы имеем дело, сложная?
В дискуссиях по поводу простоты и сложности отметились многие эксперты. Но их участие не привело к прояснению вопроса, поскольку зачастую присутствовала значительная терминологическая путаница. Ниже приводится моя попытка внести ясность в этот вопрос. Так что же такое простота?
Простота обычно определяется количеством усилий, которое необходимо, чтобы понять или объяснить какое-либо явление. Явление, которое легко понять или объяснить, будет простым, в отличие от тех явлений, что запутанны.
Если мы хотим обсудить, что такое простота, полезно уточнить содержательную разницу между сложными и запутанными понятиями или явлениями. Непонимание этой разницы может привести к тому, что вы выберете неправильный подход к решению той или иной проблемы.
Я считаю, что разница между этими двумя терминами должна объясняться в двух измерениях, показанных на рис. 3.2. Первое измерение относится к структуре проблемы и тому, насколько хорошо мы ее понимаем:
Второе измерение касается поведения системы и того, насколько легко мы можем его предсказывать:
Мои трусы устроены очень просто. Нетрудно понять, как они работают. Напротив, устройство моих часов весьма непросто: если бы я разобрал их, то мне понадобилось бы много времени, чтобы разобраться в их конструкции и том, как взаимодействуют отдельные части. И все же ни мои часы, ни мои трусы не обещают никаких сюрпризов (по крайней мере для меня). Это упорядоченные, предсказуемые системы.
Команда разработчиков из трех человек также будет простой системой. Чтобы достаточно хорошо узнать каждого члена команды, потребуется лишь несколько совещаний, совместных походов в кафе во время обеденного перерыва и пара кружек пива. Возьмем в качестве другого объекта город. Очевидно, что город устроен не просто, а запутанно. Таксистам требуются годы, чтобы изучить все его улицы, проезды, отели и рестораны. При этом как команды, так и города будут сложными системами. Как бы хорошо вы их ни знали, сюрпризы неизбежны. Они предсказуемы лишь в ограниченной степени, и невозможно знать наверняка, что случится завтра.
Двойной маятник (два маятника, соединенные вместе) также представляет собой простую систему. Легко понять, как он устроен, и изготовить его тоже несложно. И тем не менее при определенных условиях такой маятник совершает непредсказуемые хаотические движения вследствие значительной зависимости этой системы от начальных условий. Хаотически ведут себя и фондовые рынки. Они по определению непредсказуемы, в противном случае все знали бы, как на них зарабатывать, и всю систему постиг бы коллапс. Однако в отличие от двойного маятника фондовые рынки устроены крайне запутанно. Множество компаний, ценные бумаги которых обращаются на фондовом рынке, разнообразие используемых финансовых инструментов и транзакций, совершаемых на фондовых рынках, делают их абсолютно непостижимыми для простых людей вроде меня.
Чем эта модель отличается от других? Известна модель Cynefin (читается как Кеневин) (рис. 3.3a), предложенная Дэвидом Сноуденом — специалистом в области управления знаниями. Эта модель предлагает типологизировать ситуации как относящиеся к одной из четырех областей: простые, запутанные, сложные и хаотические (имеется также промежуточная категория — беспорядочные) и применяется при принятии решений и выработке политик в разных областях [Snowden 2010b]. Похожая модель была создана и профессором менеджмента Ральфом Стейси. Его модель называется матрицей согласованности и определенности (рис. 3.3b). Матрица разделена на четыре области (область простых систем, запутанных, сложных и область анархии или хаоса), размещенных вдоль двух осей: степени согласованности и степени неопределенности [Stacey 2000b]. Глава 16 в этой книге называется «Все модели неверны, но некоторые из них полезны», и это утверждение соответствует действительности. Все три приведенные здесь модели неверны, но каждая из них может быть полезна. Разница между моей моделью и двумя другими состоит в том, что в моей между запутанными и сложными системами нет четкой границы. В ней также идентифицированы шесть типов систем, а не четыре, при этом запутанные и сложные пересекаются. Если эта модель покажется вам полезной, используйте ее при оценке систем различных типов. Если нет, возьмите любую из двух оставшихся. Они тоже неплохие. |
Термин «запутанный» относится к устройству системы, которое может быть вполне неочевидным, если только вы не специалист в соответствующей области, в то время как термины «сложный» и «хаотический» описывают поведение систем, которое может быть в разной степени непредсказуемым. Системы, имеющие неочевидное устройство, необязательно будут сложными в этом смысле (представим себе два автомобиля в гараже). А сложная система необязательно имеет неочевидное устройство — например, два человека в спальне. (Их поведение может оказаться вполне непредсказуемым.)
К сожалению, на дилетантском уровне часто путают линеаризацию и упрощение. И тут-то возникают проблемы.
А как насчет сложности программного обеспечения? Многие придерживаются той точки зрения, что программное обеспечение должно быть настолько простым, насколько это возможно. А когда оно недостаточно простое, начинаются разговоры о том, что необходимо «снизить его уровень сложности». Тут легко запутаться, ведь такое использование терминологии не соответствует принятому в научном обиходе определению сложности: не проводится различие между тем, как организован данный программный продукт, и его поведением. Тем не менее если быть честным, то я вынужден буду признать, что термины «сложный» и «запутанный» существовали задолго до того, как ученые начали наполнять их разным содержанием. Поэтому в некотором смысле правота на стороне дилетантов, а не специалистов. И тем не менее, если для того, чтобы разобраться в хитросплетениях программного продукта, необходимо вызывать эксперта, я предпочитаю называть такой продукт запутанным. А если поведение программного продукта невозможно полностью предсказать (как это бывает в системах искусственного интеллекта, нейронных сетях или многопользовательских играх), то такое программное обеспечение лучше называть сложным. Простое и хорошо структурированное ПО может демонстрировать очень сложное поведение, в то время как неочевидным образом структурированное и довольно запутанно организованное ПО порой выдает упорядоченные и полностью предсказуемые результаты. |
Предлагаемая мною модель основана на противопоставлении структуры и поведения. Как мне представляется, она может упростить обсуждение вопросов, связанных с простотой, и снять ряд недоразумений.
Все следует упрощать до тех пор, пока это возможно, но не более того.
Альберт Эйнштейн
Своим высказыванием Эйнштейн хотел сказать, что структура системы должна быть представлена в понятном виде. В терминах моей модели это предполагает вертикальный сдвиг сверху вниз (упрощение). Тем не менее оговорка «но не более того», по всей видимости, отсылает нас к поведению этой системы. Эйнштейн пытается предупредить нас, что следует избегать чрезмерного упрощения, поскольку это изменит сам характер данной системы (что в моей системе координат соответствует линеаризации, а не упрощению).
Простота — это миф, время которого прошло, если оно вообще когда-либо существовало [Norman 2007].
В своей интереснейшей статье «Простота сильно переоценена» Дон Норман обсуждает вопрос, насколько ценно с точки зрения пользователя добавление функциональных возможностей в тот или иной продукт по сравнению с их ограниченным количеством. Обилие функциональных возможностей подразумевает иное или более сложное поведение продукта, а зачастую и его иную структуру. В моей диаграмме этому соответствует движение по обеим осям — горизонтальной и вертикальной. (Например, когда Google добавил в почтовый сервис Gmail отдельный почтовый ящик для приоритетных сообщений, поведение Gmail усложнилось. Стал более запутанным и пользовательский интерфейс, хотя для меня он остался вполне понятным.)
К сожалению, Дон Норман использует термин «упрощение» как для обозначения линеаризации поведения (движение вдоль горизонтальной оси в моей модели), так и для обозначения упрощения структуры (движение по вертикальной оси). Тем самым он сделал свой тезис достаточно запутанным, и именно поэтому многие в нем не разобрались. Может быть, для иллюстрации своей мысли ему стоило бы воспользоваться рисунками:
Цель визуального мышления состоит в том, чтобы сделать сложные вещи понятными посредством визуализации, а не в том, чтобы упростить их.
В своем бестселлере «Визуальное мышление» Дэн Роэм предлагает использовать рисунки для представления идей в более понятном виде. Очевидно, что он говорит о сдвиге по вертикальной оси от запутанного к простому. Но даже в его предупреждении «не упрощать» присутствует терминологическая путаница. На самом деле Дэн имеет в виду, что при представлении в виде рисунков не должна утрачиваться сложность поведения системы, поскольку это помешает тем, кто пользуется данными рисунками, разобраться в существе вопроса.
Следовательно, если вам хочется упрощать, то, ради бога, упрощайте все, что трудно для понимания. Но при этом следует избегать линеаризации («упрощения») поведения системы, потому что это вводит в заблуждение.
Ни одна из представленных моделей не отражает способность многих систем самостоятельно перемещаться в интересной области, которая располагается между упорядоченностью и хаосом.
Когда я был маленьким мальчиком, сидел в ванне и вокруг плавали игрушки, меня завораживали воронки — они появлялись, когда вынимали сливную пробку. Играя с этими воронками, я постепенно обнаружил, что могу их остановить, заставить появиться вновь и вращаться в обоих направлениях. Этим воронкам приходилось терпеть мое присутствие, и они не могли адаптироваться к перепадам в моем настроении. Такие воронки — пример сложных неадаптивных систем. Они сложные, но не в состоянии адаптироваться [Lewin 1999: 15].
Несколько более интересны сложные адаптивные системы (САС). Они способны адаптироваться к внешней среде. В качестве примеров можно привести ребенка, который учится ходить; штамм бактерий, развивший резистентность к определенному антибиотику; водителей, пытающихся объехать пробку; колонию муравьев, обнаруживших недоеденный сэндвич, или команду разработчиков программного продукта, адаптирующихся к реальным потребностям заказчика.
Системы, о которых чаще всего идет речь в этой книге, включая команды разработчиков, будут сложными адаптивными. Они сами сдвигают себя в комфортную область между упорядоченностью и хаосом. Они способны обучаться и адаптироваться, а также двигаться по определенной траектории посредством «хаордических процессов», сочетающих в себе элементы хаоса и порядка, но никогда не являющихся ни полностью упорядоченными, ни действительно хаотическими [Highsmith 2002].
В той ванне десятки лет назад воронки были глупыми неадаптивными системами. Настоящей сложной адаптивной системой был я. Я адаптировал свои действия в зависимости от поведения воронок. И это помогало мне понять, как можно их контролировать.
Если исходить из представления, что команды разработчиков программных продуктов — это действительно системы, то можно ли считать такие системы сложными и адаптивными? Вправе ли мы сравнивать участников подобных команд с детьми, играющими в ванне?
При обсуждении гибких методологий разработки ПО мы регулярно слышим такие научные термины, как самоорганизация и эмерджентность.
Основная причина, почему теория сложных адаптивных систем актуальна при разработке программного обеспечения, это продвигаемая ею концепция эмерджентности и эмерджентных результатов.
Например, колония муравьев, мозг, иммунная система, Scrum-команды и город Нью-Йорк будут самоорганизующимися системами.
Scrum — это не методология, не четко расписанный процесс и не набор процедур. Это открытый фреймворк при разработке программного обеспечения. Применяемые правила ограничивают поведение сложной адаптивной системы, в результате чего система самоорганизуется и приходит в состояние, адекватное решаемой задаче.
Насколько оправданно применение теории сложности к разработке программного обеспечения? Согласны ли сами специалисты по сложным системам, что такие термины, как самоорганизация и эмерджентность, применимы не только к описанию муравейников, мозга и иммунной системы, но также и к Agile-командам?
Некоторые ученые уже обрушились с критикой на людей вроде нас за то, что мы заимствуем их научную терминологию. Они утверждают, что мы берем термины, не вникая в их значение, и используем научные понятия, не имея на то достаточных концептуальных оснований. И еще они говорят, что нас опьяняют сами слова вне связи с тем, что они на самом деле означают [Sokal 1998: 4].
По правде говоря, я здесь немного сжульничал. Разнос, который Сокал устроил тем, кто использует теорию сложности (или скорее злоупотребляет ею), адресован в первую очередь не сторонникам Agile-методологий, а людям в целом. Но сигнал мы услышали. Чтобы усвоить его еще лучше, вот цитата, напрямую относящаяся к существу вопроса:
Нет ничего неожиданного в том, что гуру теории сложности очень расстроены тем, насколько безответственно терминология их теории используется в литературе и дискуссиях, касающихся менеджмента — бывает, что она используется чуть ли не в метафорическом смысле. Один [такой гуру] зашел настолько далеко, что, отмечая полезность подобных книг для менеджеров, всерьез рекомендует вымарывать из них любые ссылки на теорию сложности.
Ох!
Впрочем, я вновь немного сжульничал. Эта критика была направлена против литературы по менеджменту, в которой авторы злоупотребляют терминами теории сложности, а не против книг о гибких методологиях. Но все же… лучше внять и этому предупреждению.
Мы обязаны проявлять осторожность при переносе терминологии из науки о поведении сложных систем в другие области, включая менеджмент и разработку ПО. Например, когда небольшая шероховатость, возникшая в ходе проекта по разработке ПО, неожиданно выливается в большие проблемы, нет ничего легче, чем заявить, что это проявление «хаотического» поведения системы. Но если мы при этом не понимаем, что с научной точки зрения означает термин «хаос», то сильно рискуем стать посмешищем в глазах специалистов по теории сложности…
Итак, будет ли использование понятия самоорганизация злоупотреблением научной терминологией?
А как насчет «эмерджентного дизайна»? Это тоже злоупотребление?
Лично я так не думаю. Но в любом случае будет разумно сохранять критичность и здоровую долю скепсиса.
В этой книге я пишу об идеях и концепциях из теории сложности, которые мы могли бы применять при управлении командами разработчиков ПО. И хотя я ловлю себя на том, что меня тоже опьяняют слова, я собираюсь пользоваться соответствующей терминологией с учетом точного значения того или иного научного термина и только при условии, что для этого имеются достаточные основания.
Если вы применяете теорию сложности в контексте разработки программных продуктов и менеджмента в целом, это значит, что вы приняли решение рассматривать свою организацию как систему.
В этом нет ничего нового. Системная динамика, первоначально возникшая в 1950-х годах (не путать с теорией динамических систем), разрабатывалась как инструмент, призванный помочь менеджерам лучше понимать и совершенствовать производственные процессы. Она была одним из первых методов, продемонстрировавших, что даже те организации, что кажутся простыми, могут проявлять неожиданное нелинейное поведение [Stacey 2000a: 64]. Системная динамика показала, что структура организации, с ее многочисленными циклическими взаимноблокирующими взаимодействиями и частыми задержками реакции, может сильнее воздействовать на поведение организации, чем параметры ее отдельных компонентов. Системная динамика помогла менеджерам улучшить понимание бизнес-процессов и в то же время привлекла внимание к тому, что свойства организации часто становятся результатом ее поведения как целостной системы и не могут быть сведены к свойствам образующих ее индивидуумов. Системная динамика не будет частью суммы наших знаний о системах. Это просто инструмент (вроде старого калькулятора), интересный для менеджеров со склонностью к математике.
В 1980-х годах возникла новая идеология, в чем-то схожая с системной динамикой, получившая название системное мышление и обязанная своей популяризацией книге Питера Сенге «Пятая дисциплина» [Senge 2006]. Системное мышление представляет собой набор установок при решении «проблем», которые рассматриваются как часть более обширной системы. Системное мышление фокусируется на циклических взаимоотношениях между компонентами системы и нелинейных причинно-следственных связях внутри нее. Часто это позволяет избежать непредвиденных последствий, риск возникновения которых повышается, если компоненты рассматриваются изолированно. Системное мышление в чем-то похоже на системную динамику, однако в последней при анализе последствий альтернативных решений широко применяются симуляции и математические расчеты. Системное мышление считается более субъективным в своей оценке сложных структур, поскольку его концепция более расплывчата [Forrester 1992]. Основная ценность системного мышления состоит в том, что оно позволяет людям сосредоточиться на проблемах систем, а не людей. Я бы сказал, что системное мышление похоже на старую фотокамеру, которая может дать менеджерам более полную картину их организаций с интересных, но субъективных ракурсов.
Исследование сложности в социальных системах ведется в рамках социологического направления, которое принято называть социологическая системная теория. К сожалению, ни системная динамика, ни системное мышление в явном виде не признают, что любые попытки проанализировать и применить социальную сложность на основе подхода сверху вниз будут нереалистичными [Snowden 2005]. Использование упрощенных симуляций при описании поведения организаций или кружков, соединенных стрелками, для описания взаимодействия между командами или людьми создает ложное впечатление, что менеджеры в состоянии проанализировать свои организации, внести в них изменения и направить в нужное русло. Конечно же, системная динамика и системное мышление не отрицают существование нелинейных процессов, но все равно они исходят из базовой идеи, что топ-менеджмент в состоянии каким-то образом сконструировать «правильную» организацию, которая будет выдавать «правильные» результаты. Все эти подходы недалеко ушли от детерминистского мышления XIX века [Stacey 2000a]. Но XXI век — век сложности. Это время, когда менеджеры приходят к осознанию, что для управления сложными социальными системами необходимо понять, как они формируются и растут, а не как их конструировать.
В этой книге теория сложности применяется последовательно и в полном согласии с ее основными постулатами нелинейности, недетерминизма и неопределенности. Менеджмент 3.0 базируется на мышлении в категориях сложных систем. Оно исходит из представления, что менеджеры неспособны конструировать самоорганизующиеся команды и управлять ими. Таким командам надо давать возможность формироваться и развиваться постепенно. Управление организациями с помощью негибких моделей или жестких планов неэффективно. Продуктивность — это постепенно проявляющееся свойство, возникающее благодаря самоорганизации и эволюции команд. Мне нравится сравнивать этот тип мышления с источником света или энергии, который дает начало всему и благодаря которому произрастают все плоды. Калькуляторы и камеры — весьма интересные устройства, но без света они бесполезны.
В главе 4 мы направим этот поток света на команды разработчиков ПО и увидим, каким образом первый компонент Менеджмента 3.0 помогает таким командам расти, самоорганизовываться и адаптироваться к изменениям в среде.
Теория сложности — междисциплинарный подход к исследованию систем, развивающий достижения общей теории систем, кибернетики, теории динамических систем, теории игр и эволюционной теории.
Широко признано, что выводы теории сложности применимы к социальным системам, примерами которых будут команды разработчиков ПО, хотя еще не до конца понятно, насколько далеко следует заходить по пути переноса концепций из одной дисциплины в другие.
Одно из важных наблюдений состоит в том, что сложность системы (то, насколько она предсказуема) и запутанность ее структуры (то, насколько легко ее понять) — далеко не одно и то же. Еще одно важное наблюдение — многие сложные системы могут адаптироваться к изменениям в среде. Такие системы называют сложными адаптивными системами (САС).
Социологическая системная теория — дисциплина, рассматривающая социальные группы в качестве сложных адаптивных систем.
Давайте посмотрим, как применить некоторые идеи из данной главы в вашей компании: