Kitobni o'qish: «Софт за 30 дней. Как Scrum делает невозможное возможным»

Shrift:

Издано с разрешения John Willey & Sons International Rights, Inc., и литературного агентства Александра Корженевского

Благодарим за помощь в подготовке издания компанию ScrumTrek в лице Алексея Пименова

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

© 2012 by Ken Schwaber and Jeff Sutherland. All rights reserved. This translation published under license with the original publisher John Willey & Sons, Inc.

© Перевод, издание на русском языке, оформление. ООО «Манн, Иванов и Фербер», 2017

* * *

Посвящается Икуджиро Нонаке, Бабатунде А. Огунайке и Хиротака Такеучи с благодарностью за их наставления и вдохновение


Введение

Мы, Джефф и Кен, работаем в индустрии программного обеспечения в общей сложности 70 лет.

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

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

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

Для этой аудитории у нас есть послание.

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

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

Кроме того, мы расскажем, как определить приоритеты по созданию функционала и получить их «а-ля карт», то есть как пожелаете.

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

Это софт за 30 дней.

Раздел I. Почему любой бизнес в мире может создать программное обеспечение за 30 дней

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

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

Мы надеемся, что сможем достичь этих целей с помощью нашей книги.

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

1. Кризис в программном обеспечении: неправильный процесс разработки приводит к неправильным результатам

Ваша организация, будь то коммерческая, некоммерческая или государственная компания, должна быть в состоянии выдавать полезный продукт путем создания, настройки и использования программного обеспечения. Без программ ваша способность достичь целей как бизнес-лидера сильно ограничена, если не полностью невозможна. Но, несмотря на эту потребность, разработка программного обеспечения – исторически ненадежный, дорогостоящий и подверженный ошибкам процесс1. Это создает проблему: вам нужно программное обеспечение, но вы не можете получить его в нужное время, по приемлемой цене и с уровнем качества, которое делает его использование удобным.

Действительно, The Standish Group в своем CHAOS Report 2011 года обнаружила, что половина проектов по разработке программного обеспечения с 2002 по 2010 год описывались либо как трудные для выполнения, либо как полный провал. Только 37 % были классифицированы как успешные (рис. 1.1). The Standish Group скромно называет успешным проект, который обеспечивает требуемый функционал в срок и по заявленной цене.

Рис. 1.1. Риски традиционного метода разработки программного обеспечения


Способность приспосабливаться к изменениям, управлять рисками или изначальная ценность программного обеспечения не рассматривалась.

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

И вы не одиноки. К примеру, проект «Страж» Федерального бюро расследований (ФБР) недавно столкнулся с проблемами, и его полностью обновили, используя идеи и процессы, описанные в этой книге.

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

ПРИМЕР: ПРОЕКТ «СТРАЖ» ФЕДЕРАЛЬНОГО БЮРО РАССЛЕДОВАНИЙ

Все записи, которые были созданы или получены в рамках того или иного расследования ФБР, собраны в папки. В 2003 году ФБР решило оцифровать дела и автоматизировать связанные процессы, чтобы агенты могли быстро сравнивать дела и обнаруживать связи между ними. Проект назвали «Страж».

В марте 2006 года ФБР приступило к разработке «Стража», целью проекта было создание базы для более чем 30 тысяч конечных пользователей, агентов ФБР, аналитиков и административного персонала. По предварительной оценке, на разработку и запуск «Стража», что должно было произойти к декабрю 2009 года, выделили 451 миллион долларов. Согласно первоначальному плану ФБР, разработка «Стража» должна была пройти в четыре стадии. Проект поручили корпорации Lockheed Martin, практикующей традиционный процесс разработки программного обеспечения.

К августу 2010-го ФБР потратило 405 из 451 миллиона долларов бюджета «Стража», при этом предоставив функционал только двух из четырех стадий. Хотя эти результаты и улучшили систему управления расследованиями ФБР, они не обеспечивали всех полезных функций, которые предполагались первоначально.

В связи с превышением стоимости и сроков разработки в июле 2010 года ФБР выпустило распоряжение о прекращении сотрудничества и приостановке оставшихся двух стадий проекта.

До этого момента в ФБР использовали традиционный метод девелопмента и теперь решили опробовать новый подход с целью достичь лучших результатов. Мы разработали этот новый подход, названный Scrum, в начале 90-х. Тот самый CHAOS Report The Standish Group, который классифицировал только 37 % проектов успешными, продемонстрировал как различаются результаты традиционного подхода к разработке и тех, которые используют быстрый Scrum-подход (рис. 1.2).


Рис. 1.2. Гибкие проекты в три раза более успешны


В частности, отчет показывает, что 42 % проектов, использующих быстрый метод, добиваются успеха. Что касается традиционных проектов, то здесь успешны только 14 %. Мы полагаем, что в дополнение к стандартным определениям успеха The Standish Group Scrum-проекты также обеспечивают более быстрое реагирование на изменяющиеся потребности клиентов, позволяют снижать риски и в конечном счете предоставляют более высокое качество программного обеспечения.

К 2009 году в ФБР были приняты на работу новый директор по информационным технологиям (CIO) и новый технический директор (CTO) с опытом управления организациями, создающими программное обеспечение на основе нашего метода. Они решили проверить, сможет ли этот более быстрый подход к разработке помочь ФБР. В 2010-м CTO сообщил департаменту правосудия, что намерен изменить подход к разработке проекта «Страж». Он утверждал, что новый подход оптимизирует процессы принятия решений и позволит ФБР остаться в рамках предусмотренного бюджета. ФБР сообщило генеральному инспектору Министерства юстиции, что сможет закончить разработку «Стража» в пределах оставшегося бюджета в течение 12 месяцев после возобновления проекта. Проведенный перед этим компанией Mitre аудит проекта показал, что для завершения «Стража» традиционным методом потребуются шесть лет и дополнительные 35 миллионов долларов.

ФБР перевело всю команду по разработке проекта «Страж» в подвал здания в Вашингтоне и сократило персонал с 400 человек до 45, 15 из которых были программисты. Технический директор ФБР лично возглавил проект. Целью управления разработкой стало предоставление части функционала «Стража» каждые 30 дней. Все приращения функционала обязаны были соответствовать окончательным характеристикам, это не должен был быть «сырой продукт». Каждые три месяца ФБР объединяло три ранее полученные части в единый пилотный проект.

К ноябрю 2011-го, через год после возобновления работы с использованием нового подхода, все стадии проекта «Страж» были закончены. Программное обеспечение установили для пилотной группы агентов ФБР, оснащение оставшихся агентов новым программным обеспечением было запланировано к июню 2012 года. ФБР удалось закончить проект «Страж» за 30 миллионов долларов в течение года. Экономия средств составила более 90 %. Сотрудники так же усердно трудились и над первыми стадиями проекта «Страж», но сам подход к разработке программного обеспечения отбрасывал их назад. После применения нового метода, описанного в этой книге, они продолжили работать столь же усердно, как и раньше, но наградой им стали гораздо лучшие результаты. Если такая организация, как ФБР, смогла сделать это, почему не может ваша?

НЕПРАВИЛЬНЫЙ ПОДХОД: ПРЕДИКТИВНЫЕ ПРОЦЕССЫ

Процесс, который ФБР изначально использовало для «Стража», мы называем предиктивным, или последовательным. По сути, до 2005 года большинство проектов по разработке программного обеспечения использовали предиктивные процессы, которые при определенных обстоятельствах наиболее подходят и могут обеспечить успех. Эти обстоятельства, однако, скорее исключение, чем правило. Если кто-то может создать окончательное видение, определить все требования к нему и затем разработать детальный план по воплощению их в жизнь, тогда предиктивный процесс будет эффективным. Но любое отклонение от изначального видения, требований или плана создает большой риск. При частой смене требований бизнеса и технологий, которые присутствуют в реальных условиях, очень редко встречается, чтобы все элементы проекта оставались неизменными. Как результат, о чем и сообщает отчет The Standish Group, 86 % проектов по разработке программного обеспечения, основанных на предиктивных процесах, неуспешны. На самом деле мы считаем использование предиктивных процессов самой распространенной причиной проблем при разработке программного обеспечения.

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

Руководители и менеджеры обычно описывают проблемы, с которыми сталкиваются, следующим образом.


1. Выпуск продукта занимает все больше и больше времени. «Каждый релиз занимает больше времени, требует больше усилий и затрат до момента передачи потребителю. Несколько лет назад выпуск новой версии занимал 18 месяцев, теперь на разработку, комплектацию и установку требуется 24 месяца. И при этом каждый релиз становится стрессом и требует значительных усилий. Мы тратим все больше, при этом получаем все меньше и меньше.

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

3. Создание стабильной версии перед релизом занимает все больше и больше времени. «Мы установили разработчикам четкие, неизменяемые даты выполнения заказа. Они уложились в эти сроки, но программное обеспечение было нестабильным, не функционировало, как требуется. У нас даже не получилось отгрузить этот софт как бета-релиз, так что мы смогли получить отзывы только от ограниченного количества пользователей. Дефекты оказались настолько значительными, что наши бета-тестеры отказались участвовать. Нам потребовалось еще девять месяцев, чтобы выпустить релиз, и даже тогда он был нестабилен и требовал множества доработок и оправданий перед пользователями».

4. Планирование занимает слишком много времени и выполняется неправильно. «Мы выяснили, что разработка и развертывание релизов занимают слишком много времени, потому что мы не планировали достаточно хорошо в начале работы. Наши требования были не четко определены и не полностью разработаны, а оценки включали больше догадок, чем возможно. Чтобы это исправить, теперь мы больше времени тратим на планирование. Новые идеи продолжают поступать постоянно. Так как люди пересматривают планы, они находят части, которые должны быть переделаны или уточнены. Теперь мы тратим гораздо больше времени на планирование, чем раньше, но наш график плывет, и периоды стабилизации программного обеспечения все еще большие и ужасные. Несмотря на наши значительные усилия, во время разработки происходят изменения, которые не были и не могли быть учтены во время планирования».

5. Изменения трудно вносить в процессе разработки. «Текущий процесс не приспособлен к внесению изменений. Мы тратим много времени на планирование всего в начале разработки, и все необходимые этапы предусмотрены планом. Но часто необходимо вносить критические изменения или новые функции близко к дате релиза. Для этого мы должны настроить всю ранее проделанную работу для приспособления нового изменения. Это очень сложно, потому что трудно предсказать, как именно это изменение повлияет на стабильность программы. Даже если оно очень важное, есть ощущение, что для его приспособления в процессе разработки требуется в сто раз больше времени, чем если бы знать об этом изменении в самом начале. Но что мы можем сделать? Если важное изменение не внести в текущую разработку или релиз, нужно ждать два и более года до следующего релиза».

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

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


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

НЕПРАВИЛЬНЫЕ РЕЗУЛЬТАТЫ: ПРОВАЛ ПРОЕКТА

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


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

2. Технология работает без каких-либо проблем. Все технологии, используемые при разработке программного обеспечения, должны надежно работать, как и планировалось изначально. К несчастью, в проект часто включают такие технологии, которые до того не использовались целиком, в комбинации или для тех же целей. Более того, технологические стандарты иногда меняются прямо во время разработки проекта.

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


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

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

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

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

Мы использовали его, чтобы смоделировать три аспекта в разработке программного обеспечения: требования, технологии и люди, как показано на рис. 1.3.


Рис. 1.3. График Стейси


Можно изобразить проекты по разработке программного обеспечения так, как показано ниже.


Требования: от близко к определенности без риска изменений до далеко от определенности со смутными, сложными характеристиками и множеством ожидаемых изменений.

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

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


Используя график Стейси, можно увидеть, что проекты по разработке программного обеспечения как минимум сложные, а иногда и хаотичные. Предиктивный процесс, на котором основаны каскадный и традиционный методы девелопмента софта, пригоден только для простой, повторяющейся работы. Вы можете определить, правильный ли процесс вы используете, по ставке доходности, степени успеха. Если бы предиктивный подход был подходящим для проектов разработки программного обеспечения, ставка доходности (или процент успешного завершения проектов) была бы очень высокой – около 99,99 %. Однако рассмотренный ранее отчет The Standish Group оценивает процент успеха проектов разработки программного обеспечения, использовавших предиктивный метод, в 14 %.

Предиктивный процесс не подходит для решения проблем в девелопменте софта. Разработка программного обеспечения – нелегкая задача, и построение ее на предиктивном процессе приведет к неудаче. Наши доказательства основаны на повышении процента успешности проектов, в которых стал применяться Scrum-метод.

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

ПРИМЕР: PARAMETRIC TECHNOLOGY CORPORATION

Parametric Technology Corporation (PTC) – международная компания, насчитывающая около 5000 сотрудников, которая занимается разработкой программного обеспечения управления жизненным циклом продуктов. Эти продукты, которые выросли из CAD/CAM (систем автоматизированного проектирования/производства), помогают некоторым крупнейшим в мире организациям, например Raytheon, BAE System, Airbus, управлять разработкой массивных систем, таких как «Аэробус-А380». Они делают это отчасти путем отслеживания конфигурации всех частей, узлов и сборок.

В 2005 году компания PTC страдала от всех симптомов предиктивного процесса разработки программного обеспечении.

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

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

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

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

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

6. Качество ухудшалось. Это было серьезной и усиливающейся проблемой.

7. Авралы наносили моральный вред. РТС испытывала проблемы с наймом хороших специалистов.

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

Джейн Вачутка, вице-президент по разработке продукта Windchill в компании PTC, как новый сотрудник попыталась применять используемый в компании каскадный метод и столкнулась со всеми обычными для этого метода проблемами. На предыдущей работе она использовала множество некаскадных процессов, подобных тем, что помогли достигнуть успеха проекту ФБР «Страж». В соответствии с этим методом проект состоит из одного или нескольких повторений работы (итераций), каждый из которых длится не более 30 дней. Множество небольших команд разработчиков выбирают наиболее важные требования для каждой итерации и превращают их в часть готового к употреблению программного обеспечения. Все эти части затем объединяются в одну полностью законченную и готовую к применению программу. В конце каждой последующей итерации другие части и надстройки программы добавляются к существующему функционалу.

Брайан Шепард, исполнительный вице-президент по развитию продуктов компании РТС, был настроен скептически, когда в 2007 году Джейн предложила новый процесс производства программного обеспечения.

Она просила позволить ей раньше подключать программистов к разработке, задействовать контроль качества и не выпускать продукты, которые не прошли полного тестирования. Джейн подчеркнула, что функциональные характеристики могут быть несовершенными, так как группа управления разработкой часто будет получать и использовать части разрабатываемого продукта в течение всего цикла разработки, чтобы давать обратную связь. Брайан согласился попробовать новый процесс – гибкий метод разработки под названием Scrum. При этом он предупредил Джейн: «У тебя нет права на ошибку!»

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

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

В течение двух лет все обязательства Джейн перед Брайаном были выполнены. Джейн и ее сотрудники выпускали программное обеспечение каждые 12 месяцев, в то время как ранее выпуск занимал 24 месяца. Продукт был высокого качества. К 2011 году РТС изменилась – она превратилась в прозрачную организацию как внутри, так и для потребителей. Сюрпризы случались редко, клиенты знали, чего и когда ждать. Дефекты были редкими и к 2012 году практически равнялись нулю. Новые детали, пользовательские интерфейсы и возможности рабочего потока были добавлены. Продукт был переработан, стал безопасным от внешних угроз. В итоге бюджет и организационные расходы упали каждый более чем на 10 %. По поручению Брайана Шепарда для организации по разработке программного обеспечения было построено новое здание, которое отражало прозрачность, столь важную для перемен: все располагались в едином пространстве, без отдельных кабинетов, и стены были из стекла.

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

Однажды Джейн и Джим присутствовали на конференц-связи с компанией в Израиле, оценивающей возможность применения продуктов РТС. Джейн сказала CEO, что компания Raytheon использует продукты РТС по всему миру, и просила связаться с их руководством. Она знала, что в Raytheon не только впечатлены продуктами РТС, но и вдохновлены тем, что новый процесс РТС по разработке программ исключает сюрпризы и есть возможность корректировать свои графики с РТС в режиме реального времени. Компания Raytheon даже переняла у РТС процесс разработки программного обеспечения. Джим сообщил потенциальным клиентам, что последний релиз – самый красивый продукт, когда-либо выпущенный РТС, в первую очередь потому что Джейн изменила процесс разработки.

ИТОГ

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

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

2. Scrum: правильный процесс приводит к правильному результату

В предыдущей главе мы узнали, что эмпирический процесс – правильный для девелопмента программного обеспечения. Теперь давайте посмотрим, как эмпиризм работает и как можно с его помощью создать ПО. Мы изучим эмпиризм через призму гибкого процесса разработки программного обеспечения, который мы назвали Scrum.

ЭМПИРИЗМ В ДЕЙСТВИИ

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

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

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

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

Таблица 2.1. Бэклог требований для организации бизнес-операций


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

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

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

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

Давайте сформулируем определения для того, что мы описали.


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

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

Инкремент (приращение). Это частица целого, которая увеличивается со временем. Функциональный результат итерации в процессе разработки называется инкрементом. Приращение создается повторение за повторением, пока мы не получим полезную систему.

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

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


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

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


Рис. 2.1. Одна итерация производит один прозрачный инкремент


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

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

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

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


Рис. 2.2. Несколько итераций создают инкремент дополнительной функциональности


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

РЕШАЕТ ЛИ ЭМПИРИЗМ НАШИ ПРОБЛЕМЫ?

Решает ли наше эмпирическое решение проблемы каскадного метода? Давайте оценим новый процесс в болевых точках, обнаруженных в каскадном методе.


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

Проблема 2 каскадного процесса: срыв графиков релизов. Наш график разработки не может сдвинуться более чем на 30 дней, так как это максимальная длительность одной итерации. Мы выпускаем накопленные инкременты, когда достигаем даты релиза. Мы не выделяем итераций для построения малозначительного функционала, что позволяет выпускать законченную систему гораздо раньше, чем обычно. При использовании традиционного метода разработки программного обеспечения только менее 50 % функционала используется часто. Мы не разрабатываем этот функционал.

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

Проблема 4 каскадного процесса: планирование занимает слишком много времени и выполняется неправильно. Начальное планирование сводится к постановке цели и определению наиболее ценных функциональных возможностей, производительности и особенностей, необходимых для ее достижения. Затем определяются ориентировочная стоимость и срок разработки. Планирование до первой итерации, как правило, занимает 20 % времени от того, что обычно мы привыкли тратить на планирование для каскадного, или предиктивного, метода. Мы планируем детальные требования для каждой итерации только непосредственно перед ее началом. Это планирование перед итерацией называется «точно в срок», и в него могут включаться требования, возникающие во время проверки предыдущей итерации, и адаптироваться лучшие требования для следующей.

Проблема 5 каскадного процесса: изменения трудно вносить в процессе разработки. В итеративно-инкрементальном процессе нет состояния середины процесса разработки. Новые требования могут возникать и быть добавлены перед каждой итерацией с минимальными затратами.

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

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


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

Работой можно управлять, используя всего три переменные. Первая (А) – это требования, функциональные возможности, которые предоставит планируемое программное обеспечение. Вторая переменная (В) – время, которое теперь мы измеряем в блоках по 30 дней. Третья переменная (С) – законченная работа, которая измеряется в пригодных к применению функциональных возможностях или в количестве требований и функциональных возможностей, выполненных в каждый из 30-дневных периодов и совокупно.

Таким образом, можно создать график для управления проектом.


1. Бэклог требований по оси Y, или вертикальной оси. Работа по выполнению каждого требования разбита по размеру. Давайте предположим, что у нас есть пять требований. Каждое требует выполнения 2, 3, 5, 3 и 8 блоков работы. Они создают объем работы по оси Y из 21 блока. Блоки расположены в порядке, в котором вы хотите превращать их в пригодные к использованию функциональные возможности. Давайте, скажем, порядок сверху вниз будет 2, 3, 5, 3 и 8.

2. Время отложим по горизонтальной оси Х. Блоки по 30 дней, что составляет протяженность одной итерации.

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

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

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


Рис. 2.3. Диаграмма сгорания работы


План, или прогноз, в начале работы показывает, что вы начали с 21 блока работы.

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

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

Эмпиризм обеспечивает ряд факторов.


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

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

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

4. Управление рисками. Команда разработки закончила только два блока работы в каждой из первых трех итераций. В конце третьей прогноз показал, что окончание разработки не случится ранее середины десятой итерации. Если начальный бюджет был 100 тысяч долларов, новый прогноз предполагает перерасход средств на 150 тысяч. Если возврат инвестиций в размере 250 тысяч долларов невозможен, то проект можно отменить уже после третьей итерации.

ПРАКТИЧЕСКИЕ МЕТОДЫ, ОСНОВАННЫЕ НА ЭМПИРИЗМЕ

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

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

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

Действия команд напоминали им игру в регби, поэтому они назвали этот стиль управления разработкой проекта Scrum – так в регби называется момент возобновления игры после того, как мяч вышел за пределы поля.

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

Уважение к личности сотрудника. В некоторых компаниях к сотрудникам относятся как к детям, их мнение не учитывается, им просто указывают, что именно делать в каждый момент в течение дня. Для того чтобы люди были вдохновлены и вовлечены в свою работу, следует создать атмосферу содействия, когда с сотрудниками обращаются с уважением и восхищением. Scrum призван обеспечить такую обстановку. Мы были не первые, кто решил применять идеи и практические методы, используемые в Scrum. Большинство из них представляют собой передовые методы в индустрии. Тем не менее Джефф действительно сосредоточен на аспекте «люди» в среде разработки программного обеспечения Scrum.

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

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

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

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

Многоуровневое и мультифункциональное обучение. Обучение в команде идет в разных направлениях. В 3М, например, инженерам рекомендуется использовать 15 % своего рабочего времени, чтобы заниматься своей мечтой. Если команда работает с компанией Honda, ее члены могут быть отправлены в Европу, чтобы «осмотреться и понять, что там происходит». Идея в том, что обучение часто происходит в необычных местах и необычным способом и, самое главное, инициируется сотрудниками и поощряется и направляется руководством.

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

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

Мы обнаружили, что некоторые практические методы также улучшают разработку программного обеспечения.

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

Люди в команде. Команды и люди делают работу лучше всего, когда их не прерывают. Команды больше совершенствуются, когда сами решают свои проблемы. А общение, в том числе лицом к лицу, – наиболее продуктивный способ для команды работать вместе.

Состав команды. Команды более продуктивны, если имеют один и тот же состав участников. Продукты более надежны, когда команда имеет все кросс-функциональные навыки, сосредоточенные на работе. Изменение состава команды часто временно снижает ее производительность

ДАЖЕ ЕСЛИ МЫ ЗНАЕМ ЛУЧШЕ

Несмотря на то что предиктивный, или каскадный, процесс испытывает трудности, многие организации продолжают пытаться заставить его работать. Мы встретились в 2005 году с СТО и персоналом компании розничной торговли Marks and Spenser из Великобритании, чтобы обсудить эмпиризм и Scrum. Компания только что модернизировала весь процесс развития, приобретя в PricewaterhouseCoopers (PWC), интернациональной консалтинговой компании, набор методологий, инструментов, обучения и услуг по внедрению. Подход PWC был предиктивным, или каскадным.

Но CTO Marks and Spenser хотел понять эмпиризм. Когда мы объяснили ему процесс, он заметно разволновался, прервал нас и сказал, что его компания тоже использует эмпиризм. Всякий раз, когда один из их больших проектов по разработке, основанный на подходе PWC, попадает в беду, они его останавливают и затем применяют другой подход, чтобы вернуть процесс на правильный путь или закончить. Он сказал, что это их «туз в рукаве», имея в виду трюк, который позволяет компании выходить из трудных ситуаций.

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

ГИБКОСТЬ

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

ИТОГ

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

Менее рискованно, с большим контролем и быстрее вы можете получить первый результат в течение 30 дней и затем совершенствовать его.

Эмпирический процесс разработки программного обеспечения, использующий итеративно-инкрементальные методы, с нами уже более чем 20 лет. Используя его, вы можете создать плотный контроль над рисками с помощью ограниченных по времени инкрементов программного обеспечения. Это обеспечивает прозрачность путем доставки законченного, готового к использованию прироста полезного функционала каждые 30 дней (или в меньший срок), так что потери могут быть сведены к минимуму. Это обеспечивает скорость и гибкость настройки приложения для более полного удовлетворения возникающих потребностей и тем самым значительно увеличивает применимость. Мы больше не беспокоимся, что наши требования не будут выполнены. Мы больше не волнуемся, что бюджет увеличится. Мы больше не должны зависеть от абстрактных представлений о динамике проекта, таких как диаграммы Ганта или прототипы. Мы точно знаем, где мы находимся с точки зрения ценности продукта и графика, по крайней мере каждые 30 дней.

3. Попробуй это сам: пилотный проект

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

1) как провести пилотное исследование этого нового метода разработки программного обеспечения;

2) какую информацию вы сможете обрести в ходе этого исследования;

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

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

Процесс, которому вам необходимо следовать во время пилотного проекта, достаточно прост:

1) сформируйте команду;

2) подумайте, что бы вы хотели создать;

3) закончите маленький кусочек работы полностью;

4) оцените, что бы вы хотели сделать следующим;

5) определите, что может быть улучшено, и улучшите это;

6) продолжайте повторять шаги с третьего по пятый, пока не будете удовлетворены результатом.

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

ЭМПИРИЗМ ИСПОЛЬЗУЕТСЯ В ОРГАНИЗАЦИИ ВЕЗДЕ

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

Вот как выглядит процесс.

1. Сформируйте команду. Соберите всех менеджеров по продажам вместе, обсудите, как идут дела в компании, проведите обзор конкурентов, информируйте продавцов обо всех новых продуктах компании.

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

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

4. Обдумайте, что бы вы хотели сделать следующим. Обновите каналы сбыта и сфокусируйте усилия на следующем месяце.

5. Продолжайте делать и оценивать. Повторяйте эти шаги каждый месяц.

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

ПРИМЕР ПИЛОТНОГО ПРОЕКТА

Как мы говорили ранее, пилотное исследование – небольшой эксперимент, чтобы оценить выполнимость проекта, временные и финансовые затраты, а также побочные эффекты. Его цель состоит в том, чтобы определить, помогут ли эмпирические процессы в разработке программного обеспечения. Мы предлагаем опробовать наш метод на том, что доставило вам серьезные проблемы. Это должно быть что-то ненадежное, сложное, в чем вы не уверены.

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

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

Вице-президент должен был инвестировать только лишь в первую фазу проекта 500 тысяч долларов – приличные деньги всего лишь за описание требований того, что он хотел. Цена разработки самого приложения была неизвестна, но можно было предположить, что она будет в разы выше первоначальных затрат. Ему следовало предоставить предложения своему начальнику в комитете финансов и в IT (для планирования). Никто не хотел рисковать такими средствами без полной уверенности в успехе продукта.

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

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

Он немного подправил свой план по результатам замечаний, в частности добавил в команду разработки проекта менеджера из IT-отдела, который имел опыт работы с итеративным, инкрементальным процессом разработки программного обеспечения. Это увеличило бюджет до 170 тысяч долларов, но могло помочь IT-отделу дать оценку эмпирическому процессу разработки. Представитель IT-отдела должен был стать менеджером пилотного проекта. При наличии свободного времени ему также следовало помогать команде разработчиков с тестированием приложения.

Вице-президент получил одобрение при условии, что все заинтересованные лица в его отделе и в IT-отделе смогут проверять динамику в разработке приложения каждый месяц.

Формирование команды

Когда пилотный проект одобрили, первым шагом стало формирование команды с участием проект-менеджера из IT-отдела. Изначально было решено делать проект только своими силами, без привлечения сторонних разработчиков. Затем в компании выяснили, кто из сотрудников подходит для участия в пилотном проекте. О том, можно ли сотрудника считать хорошим разработчиком, можно узнать по его способности создать инкремент программного обеспечения. И конечно, лучше, если это станет ясно через месяц после начала разработки, чем по окончании 12 месяцев каскадного проекта. В итоге была создана IT-команда, каждый член которой отвечал определенным требованиям.

1. Понимает, как создать программное обеспечение, используя технологии, необходимые для пилотного проекта.

2. Имеет все необходимые навыки для разработки законченного фрагмента приложения.

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

4. Каждый участник команды должен быть добровольцем, а не призывником.

5. Участник должен быть увлечен проектом.

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

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

2. Флипчарты и лекционные доски в рабочем пространстве могут помочь членам команды визуализировать возможности и найти идеи. Пространство должно обеспечивать место для работы и хранения инструментов на всем протяжении создания пилотного проекта.

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

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

Итак, вице-президент сформировал команду, состоящую из него, менеджера проекта и трех разработчиков программного обеспечения.

Создание послания, притягивающего членов команды

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

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

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

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

1.Апрель 11, 2005. Отчет Forrester Corporate Software Development Fails to Satisfy on Speed or Quality («Корпоративная разработка программного обеспечения не может удовлетворить скорости и качества»). Корпоративные разработчики продолжают разочаровывать: к осени 2004 года опрос Forrester 692 влиятельных участников индустрии, которые заказывают разработку программного обеспечения, показал, что около трети недовольны временем, затрачиваемым на разработку, и такое же количество недовольно качеством предоставляемых приложений. Одна пятая опрошенных недовольна обеими позициями.
2.R. Stacey, Complexity and Emergence in Organizations (London: Routledge, 2001).
3.H. Takeuchi and I. Nonaka, “The New New Product Development Game,” Harvard Business Review (Jan – Feb 1986).

Bepul matn qismi tugad.