Smooth is Fast
Головоломка Agile
Гибкое программирование - это медленный процесс. Речь идет о работе небольшими порциями и переоценке своей работы еженедельно, если не ежедневно.
Все характерные элементы Agile по своей сути медленные. В частности, гибкое программирование выполняется парами, когда два программиста сидят вместе, проектируют и пишут код небольшой сплоченной командой. Это, конечно, сильно замедляет процесс кодирования, потому что все вербализуется и все учитывается. По сути, парное программирование превращает то, что традиционно было внутренним монологом, во внешний диалог.
Обещание гибкой разработки заключается не в скорости, а в том, чтобы не наращивать технический и дизайнерский долг. Программисты избегают технического долга, тратя время на рефакторинг своего кода во время его написания. Они избегают задолженностей по дизайну, заставляя пользователей, дизайнеров или владельцев продуктов просматривать их недавние работы. Когда это произойдет, велика вероятность, что работу придется переделывать. Но переделывать код - это медленно, требует много времени и для посторонних кажется пустой тратой. Это фундаментальное непонимание сути разработки программного обеспечения. Просто не имеет значения, сколько времени уйдет на создание кода, который нужен пользователям, и не имеет значения, как быстро можно создать код, который пользователям не нужен.
Просто не имеет значения, сколько времени уйдет на создание кода, который нужен пользователям, и не имеет значения, как быстро можно создать код, который пользователям не нужен.
Отслеживание и повторная работа по ходу дела - существенная характеристика гибкости. В конце концов, Agile означает способность быстро меняться. Agilistas отслеживают скорость по единственной причине: чтобы убедиться, что они не пытаются работать слишком быстро. Agile заключается в том, чтобы нарезать салями очень тонко и съедать один полупрозрачный ломтик перед тем, как нарезать другой, чтобы убедиться, что он правильный. Если кто-то вообразит, что гибкость имеет какое-то отношение к быстрому движению, он ... ну, они идиоты. Это просто неправильно.
Одним из замечательных побочных эффектов правильной реализации Agile является то, что множество ненужных функций выявляется на ранних этапах процесса. Agile - довольно хороший инструмент для определения того, какой исследовательский код не следует превращать в рабочий код.
Тактическая ленивость agile дает значительные преимущества в стратегической скорости.
Традиционные, не отражающие методы кодирования часто пишут код, который никогда не доставляется, никому не нужен и никогда не используется; это потраченный впустую код. Без сомнения, потраченный впустую код - это самая большая утечка корпоративных ресурсов. Сейчас я говорю о производственном коде, а не о экспериментальных всплесках или обучающих приключениях - это совсем другой тип кода. Но потраченный впустую код, который тщательно написан, хорошо протестирован и достаточно рефакторирован для отправки, - это просто колоссальная трата драгоценных ресурсов. Это не только расточительно само по себе, но и требует дополнительных затрат. Альтернативная стоимость - это цена того, что вы не сделали, пока были заняты неправильным делом. Более крупным корпорациям легче покрыть упущенные возможности, но это может быть смертельно опасным для стартапов.
У пилотов истребителей есть поговорка: медленно - значит гладко, а плавное - быстро. То есть, если вы попытаетесь ехать быстро, вы просто хлопнете дросселем, создадите сопротивление из-за чрезмерно растянутых поверхностей управления, перескочите или занизите свои повороты и, как правило, потратите энергию на восстановление после своих ошибок. Но, что примечательно, если вы попытаетесь лететь как можно более плавно, прикладывая только самое мягкое давление к рулевым поверхностям и перемещая дроссель с небольшими приращениями, вы разгонитесь. Конечно, вам нужно замедлить ход, чтобы добиться такого уровня плавности управления. Эта очевидная загадка в значительной степени и заключается в том, что такое agile: медленное, плавное, быстрое.
Я хочу сказать, что тактическая леность agile дает значительные преимущества в стратегической скорости. Если вы замедлитесь достаточно, чтобы быть по-настоящему гибким, вы справитесь с задачами быстрее. Да, agile быстрее, но если вы попытаетесь работать быстрее с agile, вы идиот, и вы будете работать намного медленнее, получите дрянной продукт и всех рассердите.