Книга: Agile-менеджмент: Лидерство и управление командами
Назад: Глава 13. Как выращивать структуру
Дальше: Глава 15. Как улучшить всё
Глава 14

Ландшафт изменений

То, что мы называем прогрессом, всего лишь замена одних неприятностей на другие.

Генри Хэвлок Эллис,

сексолог, врач (1859–1939)

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

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

Так что берем туристское снаряжение и начинаем подъем на эту последнюю гору.

Внешняя среда находится вовсе не «где-то там»

Говорят, что на севере Швеции живут миллиарды комаров. Не думаю, что это правда. По моему мнению, там живет только 1217 особей. Но они обладают невероятным обонянием и скоростью полета.

Я в этом уверен, потому что, куда бы в Швеции вы ни поехали, комаров не видно до тех пор, пока вы не выйдете из машины и не подставите открытые участки кожи прохладному ветерку. И вот тогда они налетят. Со всей Швеции. Через несколько минут все 1217 комаров будут с жужжанием виться над вами, пытаясь добраться до открытых участков кожи, которые они учуяли с другого конца страны. Шведские комары летают со сверхзвуковой скоростью, поскольку на севере страны практически нет людей. Для меня очевидно, что миллиардам комаров там просто не выжить. Людей еле хватает, чтобы прокормить 1217 комаров. И я кормил их всех в течение пяти дней.

Куда бы я ни поехал на севере Швеции, повсюду видел облако комаров, возникающее потому, что появился я. Мое появление в этой среде вызывало изменения в самой среде. А когда меня не было, не было и комаров. Другими словами:

Когда система попадает в определенную среду, это вызывает изменения в самой этой среде.

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

Некоторое действие должно предшествовать планированию, поскольку таким образом мы участвуем в создании внешней среды. Окружающая среда вовсе не находится «где-то там», существуя отдельно от нас. Мы можем помочь в создании среды. <…> В испанском языке на этот счет существует удачная фраза: «Compañero, no hay camino. Se hace camino al andar». Она переводится так: «Мой друг, дороги нет. Дорога возникает, когда ты по ней идешь».

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

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

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

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

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

Страх неопределенности

Кстати о путешествиях и планировании… Годом раньше мы с моим партнером были на Кубе, где нам неожиданно удалось посетить знаменитую табачную плантацию. Это произошло потому, что мы подобрали молодого парня, который голосовал на обочине и оказался одним из рабочих с этой плантации. Мы подвозили его неохотно и немного нервничали, потому что туристов в поездках по острову регулярно предупреждают не брать попутчиков. За два года до этого мою приятельницу Надиру на Кубе ограбили после того, как она подобрала попутных пассажиров. Все это говорит о том, что путешественникам приходится иметь дело с неопределенностью. Вас либо ограбят, либо вознаградят. Но как узнать это заранее?

В своей книге «Сложность: Экскурсия с гидом» (Complexity: A Guided Tour) Мелани Митчелл объясняет, что на решающую роль неопределенности в сложных системах влияют два важных фактора: [Mitchell 2009: 20]. Первый из них — принцип неопределенности Гейзенберга. Он устанавливает предел точности одновременного определения пары характеристик элементарной частицы, например ее положения и импульса. Чем точнее известно положение частицы, тем менее точно можно измерить импульс, и наоборот. Этот принцип показывает, что неопределенность вплетена в ткань реальности. Но все это имело бы не большее значение, чем незначительные статистические отклонения, если бы не второй фактор: эффект бабочки.

Эффект бабочки, открытие которого приписывают Эдварду Лоренцу, это метафора чувствительности системы к отклонениям в ее начальных параметрах. Он утверждает, что порхание крыльев бабочки в Китае может вызвать ураган в США. Я заметил, что эта метафора приводится во многих книгах по теории хаоса и теории сложности. Иногда эта бабочка машет крыльями в Китае, иногда в Индии, а иногда и в Бразилии. Но странным образом ураган при этом всегда случается в Соединенных Штатах. Напрашивается вопрос: не обнаружили ли теоретики хаоса глобальную сеть бабочек-террористок, цель которых — организация ураганов на территории США? (Во время отпуска на Кубе мы стали свидетелями урагана, пронесшегося над островом. Могу подтвердить, что он направлялся в сторону Флориды. Судя по его траектории, бабочка находилась на острове Аруба.)

Мы должны принять за данность, что бизнес-ландшафт в XXI веке характеризуется как неопределенностью, так и сложностью. И ситуация не становится лучше. И хотя неопределенность — естественный феномен, многим она не нравится. Всем хочется в своем будущем видеть определенность и безопасность. Попытки достигнуть такой определенности могут приводить к параличу анализа [Heath 2007: 34–37]. Мы не знаем, какое решение принять, потому что не уверены в результате. Внедрять масштабируемую архитектуру сейчас или позже? Использовать при разработке HTML5 или Flash? Подобрать попутчика или нет? Закончится все это на сигарной фабрике или в полицейском участке?

Когда люди наконец-то набираются смелости, чтобы принять решение, они часто предпочитают избежать рисков, а не воспользоваться потенциальной возможностью. Они склонны полагать, что неопределенность скорее будет иметь негативные последствия, чем позитивные. (Они также могут считать, что последствия потенциальных проблем будут более значительными, чем выгоды от позитивного исхода.) Хорошим примером служит часто упоминаемая «угроза», которую несет для экосистем завоз человеком неместных биологических видов. Многие экологи пытаются активно противостоять этой «угрозе». Но исследования говорят о том, что лишь в нескольких процентах случаев завезенные виды оказывают значительное и негативное воздействие на существующие экосистемы [Davis 2009: 26]. В большинстве остальных случаев воздействие «чужеродных» видов на местные экосистемы было нейтральным или даже положительным. (Интересно, что медоносная пчела стала официальным символом нескольких штатов в составе США, но это не местный вид: он попал в Америку только в 1600-х годах. Наверное, этих пчел занесло в Штаты ураганом.)

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

Законы изменений

Фразу «постоянны только изменения» приписывают древнегреческому философу Гераклиту. Также часто говорят, что выживают только те, кто способен «приветствовать изменения». Кент Бек использует эту фразу в качестве подзаголовка к своему бестселлеру «Экстремальное программирование» (Extrame Programming) [Beck 2005].

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

Некоторые авторы утверждают, что успешное программное обеспечение требует больше технической поддержки, чем неудачное [Brooks 2005, Glass 2003]. Одна из причин — стремление людей использовать любимое ПО в неожиданных ситуациях. Например, в Африке те, у кого нет банковских счетов, рассчитываются друг с другом, переводя деньги с мобильных телефонов. Еще одна причина состоит в том, что успешное ПО часто живет дольше, чем то поколение «железа» и бизнес-процессы, для которых оно первоначально предназначалось. Так, например, ожидалось, что многие программные продукты не переживут XX век, поскольку их придется серьезно модифицировать в связи с проблемой 2000 года (ее еще часто неправильно называют «ошибка миллениума»).

Необходимость учитывать изменения в окружающей среде при разработке ПО настолько фундаментальна, что рано или поздно в литературе мне должны были попасться соответствующие законы. Их предложил профессор Меир Леман:

  1. Непрерывные изменения: система, используемая в изменяющейся среде, нуждается в постоянной модернизации, в противном случае удовлетворенность пользователей будет прогрессивно снижаться.
  2. Увеличение сложности: если не предпринимать усилий по ее упрощению, то по мере своего развития система будет становиться все сложнее.
  3. Саморегулирование: эволюция системы — саморегулируемый процесс, при этом темпы изменения атрибутов системы в течение ее жизненного цикла близки к нормальному распределению.
  4. Влияние организационной стабильности: среднее количество усилий, прилагаемых при поддержании развивающейся системы, в течение ее жизненного цикла остается примерно постоянным.
  5. Сохранение преемственности: в то время как система развивается, все связанные с ней люди должны обеспечивать господство ее содержания для достижения удовлетворительной эволюции.
  6. Непрерывный рост: чтобы удовлетворенность пользователей не снижалась на протяжении жизненного цикла системы, ее функциональные возможности должны постоянно расширяться.
  7. Ухудшение качества: воспринимаемое качество системы будет снижаться, если не предпринимать специальных мер по ее сопровождению и адаптации к изменениям во внешней среде.
  8. Система обратной связи: эволюционные процессы представляют собой сложные системы обратной связи и должны рассматриваться как таковые для достижения значительных улучшений.

У меня имеются мелкие разногласия с некоторыми из законов Лемана (в особенности с третьим), но в любом случае их смысл понятен и верен: система должна постоянно изменяться, иначе ее эффективность снижается. А когда система изменяется, то она становится более сложной, если не предпринимать мер по ее упрощению.

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

Каждый продукт успешен… пока не потерпит неудачу

Каким образом мы судим об успешности продукта?

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

Как вы думаете, динозавры были успешны? А люди как биологический вид? Подозреваю, что многие ответят «нет» на первый вопрос и «да» на второй. Однако динозавры господствовали на Земле 160 миллионов лет, в то время как семейство гоминид (все виды, относящиеся к отряду приматов) существует только 6 миллионов лет. И при этом люди наносят ущерб поверхности планеты своим присутствием всего лишь 200 000 лет. С моей точки зрения, нам еще предстоит доказать, что мы успешнее динозавров (рис. 14.1).

А как вы думаете, успешны ли лошади как биологический вид? Скорее всего, моя дочь была бы с этим согласна, но ее мнение вряд ли поддержал бы великий палеонтолог Стивен Джей Гулд. В своих работах Гулд несколько раз отмечал, что почти все виды диких лошадей (Equus ferus) исчезли с лица Земли [Gould 2002]. Успешными можно признать только представителей вида Equus ferus caballus (домашняя лошадь) в том смысле, что они адаптировались и позволили Homo sapiens залезть себе на спину. Скорее всего, именно этому они и обязаны своим выживанием.

picture

Мне кажется, есть основания утверждать, что любой биологический вид успешен до тех пор, пока не вымрет. Если учесть, что 99,9% всех видов из когда-либо существовавших вымерли, то мы располагаем массой примеров неудачных биологических проектов. Вследствие этого я предпочитаю такое определение успешности проектов по разработке ПО:

Программный продукт успешен до тех пор, пока не потерпит неудачу.

Да, я знаю, что это звучит по-дурацки. Но мир в целом иногда выглядит по-дурацки.

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

Успех — это длительное отсутствие неудач. С моей точки зрения, продукт может представлять ценность, даже если процесс его разработки не уложился в график и вышел за пределы бюджета; даже если имеет место неудовлетворительный возврат инвестиций и даже если не все заинтересованные стороны довольны. Биологические виды успешны, пока не вымрут. Мой автомобиль успешен до тех пор, пока он мне не разонравится. Программные продукты успешны, пока не потеряют всех своих пользователей. Принципы принятия изменений и непрерывного улучшения направлены на то, чтобы отложить неизбежный момент потери последнего пользователя. Рано или поздно все программные продукты постигает неудача. Я на 99,9% в этом уверен.

Успех и степень приспособленности: все относительно

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

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

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

Как адаптироваться к изменениям

На протяжении нескольких страниц я пытался показать, что неопределенность будет всегда и что необходимо адаптироваться к изменениям. Не исключено, что вам все это надоело до слез и вас клонит в сон. Попробуем разбудить вас и обсудить практические аспекты неопределенности. Как вести себя в среде, характеризующейся неопределенностью? Как управлять непрерывными изменениями? Увы, универсального рецепта не существует. Управление изменениями в значительной степени будет ситуационным и зависит как от операционной среды, так и от характеристик самой организации [Bennett 2004: 10].

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

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

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

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

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

Адаптация, исследование, прогнозирование

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

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

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

Инкременты и ретроспективы — это вариант двойного цикла обучения, концепцию которого предложили Крис Аргирис и Дональд Шон. В качестве примера двойного цикла обучения часто приводят простой термостат, управляемый оператором (за неимением вдохновения я повторю этот пример). Термостат регулирует себя сам на основе поступающей из внешней среды информации о температуре воздуха (это первый цикл, использующий модель внешней среды). Но у термостата также есть оператор, который корректирует его установки, основываясь на своем опыте и ожидаемых изменениях, которые могут быть вызваны, например, праздниками или прогнозом погоды (второй цикл, уточняющий модель окружающей среды) [Augustine 2005: 170].

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

picture

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

Мы готовы к неопределенности и контролируем ее путем итераций, прогнозирования и адаптации (Декларация взаимозависимости).

Но разве сама идея прогнозирования не противоречит философии Agile?

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

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

В моем предыдущем маленьком стартапе нам приходилось прибегать как к адаптации и исследованию, так и к прогнозированию. Откровенно говоря, мы вместе с командой прошли столько двойных циклов обучения, что иногда у меня голова шла кругом. Но время от времени у всех нас возникал вопрос: «Действительно ли нам удается усовершенствовать продукт? Или мы просто еле-еле успеваем не отстать от остального мира?»

Гонка Черной Королевы

Несмотря на все наши попытки внести улучшения, иногда усилия оказываются бесплодными. Разработчики никогда не бывают до конца довольны инструментами, которые они применяют. Пользователи никогда не бывают полностью удовлетворены программными продуктами, которые мы для них создаем. А члены команд никогда не бывают на 100% довольны процессами, применяемыми в проектах. Почему? Ответ можно найти в детской книжке, впервые опубликованной в XIX столетии.

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

Но если уж в биологическом виде происходят изменения, то обычно на это есть причины более серьезные, чем изменение погоды. Кроме того, виды неразрывно связаны друг с другом, и им необходимо адаптироваться к взаимным изменениям. Например, для борьбы с насекомыми поверхность листьев растений может стать более прочной, также может появиться способность производить отпугивающие насекомых вещества. В то же время насекомые обзаводятся более прочными челюстями и химической устойчивостью к вырабатываемым растениями репеллентам. Биологические виды изменяются, чтобы остаться в игре. Это эволюционная гонка вооружений получила выразительное название Гонка Черной Королевы — оно взято из книги Льюиса Кэрролла «Алиса в Зазеркалье», где Черная Королева говорит Алисе (рис. 14.3):

Нужно бежать изо всех сил, чтобы остаться на том же самом месте.

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

Гонка Черной Королевы объясняет, почему пользователи никогда не бывают полностью удовлетворены программным обеспечением. В конце концов, даже если в программные продукты с каждым новым релизом добавляются новые функциональные возможности, у пользователей параллельно появляются новые потребности. Это очень похоже на шестой закон Лемана: чтобы удовлетворенность пользователей не снижалась на протяжении жизненного цикла системы, ее функциональные возможности должны постоянно расширяться. Этот феномен также отражен в модели качества Кано, которая говорит, что те новые функциональные возможности продукта, которые поначалу потребители воспринимают с восхищением, достаточно быстро становятся частью стандартного набора функций.

picture

Многие программные продукты не становятся лучше просто ради того, чтобы стать лучше. Они развиваются, чтобы отсрочить неизбежное наступление момента, когда пользователи от них откажутся. Успех — способность отсрочить неудачи на будущее. И если внешняя среда не изменяется, то создатели продолжают поставлять свой продукт без изменений. Зачем им вносить в него изменения? Отсутствие сильных конкурентов было причиной того, почему Microsoft в течение пяти лет после появления версии 6.0 не выпускал обновлений браузера Internet Explorer. Можно даже утверждать, что угроза быть вытесненным с рынка конкурирующими продуктами — это куда более сильный драйвер эволюции программных продуктов, чем новые потребности уже существующих пользователей. Провайдер может игнорировать своих клиентов, но не действия конкурентов.

В ближайшие несколько десятилетий способность каждого общества, организации и индивидуума адаптироваться подвергнется небывалым прежде испытаниям. <…> Отсюда важнейшим вопросом для каждой компании в XXI веке будет: «Меняемся ли мы столь же быстро, как мир вокруг нас?» Как мы уже видели, для многих компаний этот ответ — нет.

Автомобиль, на котором я езжу сейчас, стоил мне в два раза больше, чем тот, на котором я начинал водить, и у него в десять раз больше опций. Сделало ли это меня счастливее? Боюсь, лишь ненадолго. Дело в том, что у него парковочный радар только сзади, а не со всех сторон, что для меня проблема. Обогрев сидений слишком медленно набирает нужную температуру. К тому же нельзя регулировать подсветку педалей… День за днем мой автомобиль все больше и больше отстает в Гонке Черной Королевы.

Можно ли измерить сложность?

Шестой закон Лемана гласит: «Если мы хотим, чтобы удовлетворенность пользователей не снижалась, в программных системах должна появляться новая функциональность». А согласно второму закону, если не предпринимать усилий по упрощению системы, то по мере своего развития она будет становиться все сложнее. Мой личный опыт это подтверждает. Когда-то я более пяти лет работал над интранет-приложением. Со временем оно стало жить своей жизнью, и даже я уже с трудом понимал его. Будет ли такое увеличение сложности тенденцией любых сложных систем? Нормально ли, что системы со временем становятся все более сложными?

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

Давайте присоединимся к этой дискуссии с ее конца, а именно с измерения сложности. Действительно, нет единого мерила сложности, с которым были бы согласны все исследователи. Предлагалось много различных параметров, начиная от количества агентов и связей в системе до количества ее возможных состояний, от уровня энтропии в системе до ее вычислительной мощности, а также от количества уровней в ее иерархии до «фрактальной размерности» [Mitchell 2009: 94–111]. Как и в случае с моим интранет-приложением, во всех подходах были недостатки.

И тем не менее отсутствие единого метода измерения сложности вовсе не означает, что мы не можем сказать об одной системе, что она сложнее другой. Как сказал судья Верховного суда США Поттер Стюарт, говоря о жесткой порнографии, «я узнаю ее, когда увижу». По его словам, он не смог бы дать точного определения порнографии, но безошибочно определит, что это она, когда увидит ее. То же самое относится к сравнению мозга человека с мозгом, например, цыпленка. Или к сравнению моего интранет-приложения с Центром управления полетами НАСА. Я не знаю, как доказать, что одно сложнее другого. Но «я узнаю это, когда увижу».

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

Вернемся к первоначальному утверждению: действительно ли системы имеют тенденцию к усложнению? Некоторые ученые отрицают это. Существует масса примеров, когда биологические виды со временем утрачивали некоторые свои характеристики. Например, предки морских звезд имели мозг. У современных морских звезд мозг отсутствует, и никто не знает почему [Le Page 2008: 29]. (Некоторые полагают, что то же самое относится к менеджерам.) Также известно, что приматы потеряли способность синтезировать витамин C примерно в то же самое время, когда начали питаться фруктами. И параллельно они вновь приобрели цветное зрение, которое ранее ими было утрачено [Corning 2003: 176]. Так что несмотря на то, что в настоящий момент на планете обитает множество более сложных видов, чем ранее, с точки зрения биомассы наиболее успешными оказались несколько видов бактерий.

Хорошо известна позиция, которой придерживался Стивен Джей Гулд, решительно отвергавший точку зрения, что биологическим видам присуща имманентная тенденция к «возрастающей сложности» [Gould 1997]. Чтобы проиллюстрировать свою мысль, что биологические виды не имеют встроенной тенденции к усложнению, он использовал в качестве метафоры «путь пьяницы», который может случайным образом отклоняться то вправо, то влево. Гулд указывает, что слева имеется «стена», поскольку размер, вес и сложность биологических организмов не могут принимать отрицательные значения (рис. 14.4). Следовательно, если сотни пьяниц начнут свой путь от двери, расположенной рядом со стеной (состояние, характеризующееся минимальной сложностью), то усредненным направлением их движения неизбежно будет вправо — несмотря на то, что любого из них в любой момент с одинаковой вероятностью может повести как вправо, так и влево.

picture

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

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

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

В-третьих, будет ли рост сложной системы столь же вероятным, как и уменьшение? Когда пьяница пересекает улицу, действительно ли его ведет влево с такой же вероятностью, как и вправо? Мне трудно судить об этом по своему опыту, но, если говорить об эволюции, шаг вправо более вероятен, чем шаг влево. Давайте подумаем вот о чем: откуда ученые узнали, что у морских звезд раньше был мозг? Или что раньше организм приматов мог синтезировать витамин C? Они узнали об этом, потому что следы этих признаков сохраняются в ДНК в виде псевдогенов. Функции утрачены, но код все еще доступен, хотя и находится в спящем состоянии. Но он может быть вновь активирован. Именно так в ходе эволюции некоторые виды «повторно» приобрели характеристики, которые ранее были утрачены. Просто происходит повторное включение генов, которые ранее были отключены! Поэтому утрата системой какой-либо функции не означает, что система стала менее сложной. Возможно, она даже усложнилась, поскольку добавилась новая функция отключения/включения определенных генов.

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

И наконец, последним аргументом в пользу тенденции систем к усложнению будет уже сделанное нами наблюдение, что внутренние модели, создаваемые системой, должны отражать характеристики среды, в которой данная система пытается выжить. Если среда усложняется, то обитающие в ней системы со временем также эволюционируют в сторону большей сложности. В общем, адаптироваться к сложной среде могут сложные системы, и высока вероятность, что естественный отбор оказывает сильное давление именно в пользу более сложных систем [Gell-Mann 1994: 245].

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

Форма вещей: фазовое пространство

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

picture

Я построил объект, изображенный на рис. 14.5, переместив обычный куб в воображаемом четырехмерном пространстве и соединив шестнадцать углов линиями, точно так же, как мы можем построить обычный куб, сдвинув квадрат в трехмерном пространстве и соединив линиями восемь углов. Я был упоен тем, что так просто нарисовать 2D-проекцию 3D-проекции 4D-объекта. В то время данная фигура мне нравилась больше всего. Но когда я показал свой рисунок учителю физики, тот сказал мне, что все нарисовано неправильно. Мне казалось, что меня не поняли. Годы спустя я узнал, что объект, который я «изобрел», называется гиперкуб и что учитель физики упустил прекрасную возможность чему-то научиться у одного из своих учеников.

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

Например, у водорослей порядка 1000 генов. Предположим ради простоты, что каждый из этих генов отвечает за два признака: листья могут быть зелеными или коричневыми, маленькими или большими, плоскими или морщинистыми и так далее. В этом случае число возможных состояний конкретного растения будет составлять 21000, или тысячу измерений по два возможных значения в каждом из них [Waldrop 1992: 167]. (ДНК человека состоит примерно из 25 000 генов — и более чем двух вариантов каждого. Можете себе представить гиперкуб, нарисованный в таком фазовом пространстве?)

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

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

Аттракторы и конвергенция

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

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

Вы все еще со мной? Отлично. Конкретизируем все это на том же примере с водорослями.

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

picture

Некоторые ученые полагают, что конвергенция, заключающаяся в том, что такие биологические решения, как глаза и крылья, в ходе эволюции были полностью независимо «изобретены» несколько раз, это хорошая иллюстрация аттракторов [Lewin 1999: 73]. С точки зрения биологической морфологии существуют аттракторы «четырехногого существа», «существа с двумя крыльями» и так далее. Формы с пятью ногами или одним крылом имеют право на существование, но они неустойчивы (за исключением, пожалуй, района вокруг АЭС с неустойчивым реактором).

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

Устойчивость и возмущения

Ниже приведены три типа аттракторов, существующих в сложных системах [Gleick 1987: 269]:

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

Устойчивость, или гомеостаз, это важное свойство сложных систем. Независимо от интенсивности применяемых к ним воздействий, некоторые системы упорно сохраняют свое состояние. Звучит знакомо? Разве это не похоже на тот случай, когда вы пытались внедрить Agile-методологии в своей команде, но она в конечном итоге вернулась к привычным методам работы? Не напоминает ли это вам о том, как вы пытались изменить организационную культуру, но все ваши усилия натыкались на сопротивление?

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

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

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

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

Адаптивный ландшафт

Сейчас я попытаюсь еще сильнее напрячь ваше воображение. Представьте себе еще одно измерение, которое мы добавим к фазовому пространству. Это дополнительное измерение будет соответствовать степени «приспособленности» системы к определенной среде. (Естественно, абсолютной шкалы, которая позволяла бы измерить этот параметр, не существует [Waldrop 1992: 259]. Но, как уже бывало ранее, мы вполне в состоянии определить, что одна система лучше приспособлена к определенной среде, чем другая. «Я узнаю ее, когда увижу!»)

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

picture

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

Форма адаптивного ландшафта зависит как от системы, так и от окружающей ее среды. По этой причине стратегии выживания одной системы не очень легко переносятся на другие. Консультанты со стороны, привыкшие полагаться на решения, которые сработали для одних групп и организаций, могут ошибаться, пытаясь перенести те же самые подходы на группу с совершенно иным адаптивным ландшафтом [Arrow 2000: 182].

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

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

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

Мы должны понимать, что из-за изменчивости среды обитания и систем, эволюция которых протекает бок о бок, адаптивные ландшафты никогда не бывают статичными. Они как будто бы сделаны из резины [Waldrop 1992: 310]. Пока вы совершаете свою адаптивную прогулку по этому пейзажу, вы видите, как некоторые вершины исчезают и возникают другие, долины могут передвинуться в другое место, а у каждого вашего шага возможны непредвиденные последствия — например, перед вами вдруг вырастет стена, а скалы позади исчезнут. В этом и состоит основная причина, почему необходимо постоянно подвергать свою стратегию переоценке.

Похоже ли это на Швейцарские Альпы? Не очень. Если, конечно, вы не употребили слишком много вина со своим фондю.

Формируем ландшафт

Легко ли передвигаться по адаптивному ландшафту? Трудно ли найти вершину? Что взять с собой из инструментов — палки для скандинавской ходьбы или швейцарские армейские ножи?

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

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

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

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

picture

Направленная и ненаправленная адаптация

В своей книге «Малые группы как сложные системы» (Small Groups as Complex Systems) авторы различают два вида адаптации — направленную и ненаправленную [Arrow 2000: 175–176]. Ненаправленная (в моей терминологии ей соответствуют адаптация и исследование) происходит в биологических системах. ДНК мутирует случайным образом, и биологические виды совершают свои адаптивные прогулки во всех направлениях, в том числе и в неправильных. Но естественный отбор отсеивает организмы, унаследовавшие вредные изменения. (Если бы руководить людьми было так же легко…)

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

Помимо направленной адаптации, команды ненамеренно осуществляют действия, которые будут ненаправленной адаптацией. Они могут постепенно вносить изменения в применяемые процессы, не имея при этом осознанного плана. Они также могут изменить свой подход между итерациями, хотя это не будет частью осознанной стратегии изменений. Со временем все эти небольшие изменения могут накапливаться [Arrow 2000: 175] и становиться причиной существенных перемещений в рамках соответствующего адаптивного ландшафта.

Интересно, что генная инженерия преднамеренно привнесла направленную адаптацию в биологический мир, посредством искусственной эволюции существенно ускорив изменение сельскохозяйственных культур и скота [Kelly 1994: 3].

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

На этом месте мы вполне осознанно и завершаем данную главу. В следующей речь пойдет о методах непрерывной оптимизации.

Резюме

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

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

Существует три подхода, применяемых при проведении непрерывного улучшения: адаптация, исследование и прогнозирование. При реализации проектов необходимо пользоваться всеми тремя в виде непрерывного цикла. Процесс непрерывного улучшения иногда называют Гонкой Черной Королевы: необходимо постоянно совершенствоваться, чтобы не отстать.

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

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

Подумать и сделать

Посмотрим, сможете ли вы применить некоторые идеи из этой главы в своей компании:

Назад: Глава 13. Как выращивать структуру
Дальше: Глава 15. Как улучшить всё