Шрифт:
Интервал:
Закладка:
Некоторые авторы утверждают, что успешное программное обеспечение требует больше технической поддержки, чем неудачное [Brooks 2005, Glass 2003]. Одна из причин – стремление людей использовать любимое ПО в неожиданных ситуациях. Например, в Африке те, у кого нет банковских счетов, рассчитываются друг с другом, переводя деньги с мобильных телефонов. Еще одна причина состоит в том, что успешное ПО часто живет дольше, чем то поколение «железа» и бизнес-процессы, для которых оно первоначально предназначалось. Так, например, ожидалось, что многие программные продукты не переживут XX век, поскольку их придется серьезно модифицировать в связи с проблемой 2000 года (ее еще часто неправильно называют «ошибка миллениума»).
Необходимость учитывать изменения в окружающей среде при разработке ПО настолько фундаментальна, что рано или поздно в литературе мне должны были попасться соответствующие законы. Их предложил профессор Меир Леман:
1. Непрерывные изменения: система, используемая в изменяющейся среде, нуждается в постоянной модернизации, в противном случае удовлетворенность пользователей будет прогрессивно снижаться.
2. Увеличение сложности: если не предпринимать усилий по ее упрощению, то по мере своего развития система будет становиться все сложнее.
3. Саморегулирование: эволюция системы – саморегулируемый процесс, при этом темпы изменения атрибутов системы в течение ее жизненного цикла близки к нормальному распределению.
4. Влияние организационной стабильности: среднее количество усилий, прилагаемых при поддержании развивающейся системы, в течение ее жизненного цикла остается примерно постоянным.
5. Сохранение преемственности: в то время как система развивается, все связанные с ней люди должны обеспечивать господство ее содержания для достижения удовлетворительной эволюции.
6. Непрерывный рост: чтобы удовлетворенность пользователей не снижалась на протяжении жизненного цикла системы, ее функциональные возможности должны постоянно расширяться.
7. Ухудшение качества: воспринимаемое качество системы будет снижаться, если не предпринимать специальных мер по ее сопровождению и адаптации к изменениям во внешней среде.
8. Система обратной связи: эволюционные процессы представляют собой сложные системы обратной связи и должны рассматриваться как таковые для достижения значительных улучшений.
У меня имеются мелкие разногласия с некоторыми из законов Лемана (в особенности с третьим[91]), но в любом случае их смысл понятен и верен: система должна постоянно изменяться, иначе ее эффективность снижается. А когда система изменяется, то она становится более сложной, если не предпринимать мер по ее упрощению.
Может быть, самое интересное наблюдение Лемана состоит в том, что количество усилий по внесению изменений в систему и ее адаптации остается (приблизительно) постоянным в течение всего жизненного цикла. Мы вернулись к тому, что постоянны только изменения…
Каким образом мы судим об успешности продукта?
Индустриальные отчеты, такие как, например, известный (или печально известный) CHAOS, выпускаемый компанией Standish Group, утверждают, что лишь незначительное число проектов по разработке ПО будут «успешными». Но что это означает? За последние годы было много попыток найти правильное определение успешности проектов, но согласие до сих пор не достигнуто. Согласно традиционной точке зрения, проект успешен, если он завершен вовремя и в рамках бюджета, а готовый продукт соответствует спецификациям. Другие говорят, что успешный продукт соответствует ожиданиям заказчика или обеспечивает соответствующий возврат инвестиций с точки зрения созданной ценности. Существует также точка зрения, что проект успешен в том случае, когда удовлетворены все заинтересованные стороны.
Как вы думаете, динозавры были успешны? А люди как биологический вид? Подозреваю, что многие ответят «нет» на первый вопрос и «да» на второй. Однако динозавры господствовали на Земле 160 миллионов лет, в то время как семейство гоминид (все виды, относящиеся к отряду приматов) существует только 6 миллионов лет. И при этом люди наносят ущерб поверхности планеты своим присутствием всего лишь 200 000 лет. С моей точки зрения, нам еще предстоит доказать, что мы успешнее динозавров (рис. 14.1).
А как вы думаете, успешны ли лошади как биологический вид? Скорее всего, моя дочь была бы с этим согласна, но ее мнение вряд ли поддержал бы великий палеонтолог Стивен Джей Гулд. В своих работах Гулд несколько раз отмечал, что почти все виды диких лошадей (Equus ferus) исчезли с лица Земли [Gould 2002]. Успешными можно признать только представителей вида Equus ferus caballus (домашняя лошадь) в том смысле, что они адаптировались и позволили Homo sapiens залезть себе на спину. Скорее всего, именно этому они и обязаны своим выживанием.
Мне кажется, есть основания утверждать, что любой биологический вид успешен до тех пор, пока не вымрет. Если учесть, что 99,9 % всех видов из когда-либо существовавших вымерли, то мы располагаем массой примеров неудачных биологических проектов. Вследствие этого я предпочитаю такое определение успешности проектов по разработке ПО:
Программный продукт успешен до тех пор, пока не потерпит неудачу.
Да, я знаю, что это звучит по-дурацки. Но мир в целом иногда выглядит по-дурацки.
Некоторые продукты, в разработке которых я принимал участие, были успешными только в течение короткого промежутка времени – до тех пор, пока клиенты не отменяли заказ, поняв что им действительно нужно (оказывалось, что нужно им нечто совершенно другое). И хотя эти продукты не доживали даже до первого релиза, команды разработчиков и представители клиентов работали над ними к обоюдному удовлетворению до тех пор, пока не изменялась ситуация или не заканчивались деньги. Я знаю и другие продукты, которые были переданы клиентам в оговоренные сроки, в рамках бюджетов и в соответствии со спецификациями, и тем не менее сразу же после первого релиза выяснялось, что они не соответствуют клиентским ожиданиям. Были ли эти проекты неудачными? На самом деле нет, поскольку обычно нам удавалось найти способы исправить свои ошибки, адаптировать продукты в соответствии с полученной обратной связью и предоставить клиенту версии, которые позволяли восстановить доверие. Мне также приходилось видеть проекты, которые получали финансирование даже через несколько лет после выпуска первого релиза, хотя было очевидно, что эти инвестиции себя уже никогда не оправдают. Видимо, в подобных случаях удается временно отложить провал, поскольку в организации клиента есть какие-то заинтересованные лица, готовые продолжать поддерживать проект. Или, может быть, некоторым клиентам просто нравится тратить деньги.