Сравнение весьма удачное: подобно спортивной команде, команда разработки ПО – это группа людей, чьи умения дополняют друг друга, собравшаяся, чтобы достичь общей цели.
Для создания решений, которые понравятся потребителям, нужно проверять предположения об их нуждах, способствуя тем самым обучению – неотъемлемой части процесса разработки продукта. Такеучи и Нонака предупреждали, что способы работы, при которых все предположения о потребителях установлены заранее, несостоятельны:
«Транснациональные компании должны стать быстрыми и гибкими в разработке продуктов. Чтобы сделать это, нужно использовать динамический процесс, который во многом полагается на метод проб и ошибок и на обучение в процессе работы. Сегодня, в мире постоянных изменений, нужны непрерывные инновации»[14],[15].
Это понимание заинтересовало Джеффа Сазерленда, бывшего военного летчика, занимавшегося развитием IT-систем в Easel Corporation. Вместе с коллегами он начал искать более гибкий путь разработки программного обеспечения, который учитывал бы обучение, основанное на опыте, напряженную совместную работу и частые петли обратной связи. В 1995 году Сазерленд вместе с Кеном Швабером, разработчиком ПО и промышленным консультантом, формализовали этот способ работы и назвали его фреймворком Scrum. Он был представлен на индустриальной конференции OOPSLA[16]. Scrum помог открытиям Такеучи и Нонаки оформиться в восхитительно простую по структуре, но сложную в овладении методологию, применяемую для разработки продуктов (больше о Scrum можно узнать в главе 3 «Технологии»).
Scrum обращен к управленческой стороне разработки продуктов, но не освещает специфические технические практики в ПО. Кент Бек, выдающийся инженер ПО, обратился напрямую к этой стороне вопроса, когда в конце 1990-х представил концепцию экстремального программирования (Extreme Programming, XP) в одноименной книге. Главная цель XP – уменьшение стоимости изменений; чем быстрее схлопывается петля обратной связи для поступательных циклических изменений в процессе работы, тем с большей вероятностью мы создаем ПО, которые хотели создать. Бек убеждал менеджеров признать: изменения – естественный и желательный аспект разработки ПО. Вместо того чтобы пытаться определить стабильный набор требований, нужно быть готовым к изменениям и предвидеть их как ожидаемую часть процесса разработки продукта (см. рис. 1.1)[17].
Рис. 1.1. Практики экстремального программирования создают возможности быстрого обучения посредством множественных слоев петли обратной связи
Работа Бека привлекла внимание Роберта Мартина, успешного консультанта по С++ и объектно-ориентированному проектированию, работавшего в Чикаго. Клиенты часто просили Мартина придумать процесс, который сможет систематизировать практики, поставляемые им своим клиентам. Поэтому его заинтриговала работа Бека и после мюнхенской конференции, посвященной вопросам ПО, они стали общаться. Мартин чувствовал, что Бек знает что-то действительно важное, и поехал в Портленд, чтобы научиться разработке через тестирование и парному программированию. Чем больше Мартин узнавал, тем больше убеждался, что они с Беком приближаются к тому, о чем просили клиенты.
Одновременно с этим, в 1991 году, Алистеру Коуберну, методологу, работающему в новой консалтинговой группе компании IBM, дали задание найти причины успеха проектных групп. Углубившись в изучение проектов на Smalltalk и С++, Коуберн обнаружил, что в литературе того времени не были описаны факторы, делающие проектные группы успешными. Опросив десятки таких групп, он выделил ключевые элементы успешных команд в семейство методологий Crystal: серию легких процессов, подходящих к определенным типам проектов. Основная идея заключается в том, что каждому проекту нужна своя методология и методы должны меняться так же, как меняется ситуация