Разработка программного продукта

Разработка программного продукта — это не производственная линия

Как рождаются фабрики кодирования

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

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

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

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

Достижение совершеннолетия

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

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

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

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

Программное обеспечение для производства

Примерно в 2012 году McKinsey совместно с Оксфордским университетом опубликовала данные о проектах в области программного обеспечения — с тех пор эта статистика стала широко известна в отрасли. Их выводы:

«…предполагает, что половина всех крупных ИТ-проектов, определяемых как те, первоначальная стоимость которых превышает 15 миллионов долларов, сильно расходуют свои бюджеты. В среднем крупные ИТ-проекты превышают бюджет на 45 % и сокращают сроки на 7 %, при этом обеспечивая на 56 % меньшую ценность, чем прогнозировалось».

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

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

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

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

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

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

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

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

Процесс жизненного цикла разработки программного обеспечения

Для непосвященных каждый раз, когда Lean упоминается в разработке программных продуктов, TPS (Toyota Production System) — это то, что первым приходит на ум — и это понятно. В книге Машина, изменившая мир Вомак и его команда переосмыслили TPS как бережливое производство и сосредоточились на производственных практиках и ценностях. Однако у бережливого производства есть универсальные принципы, которые в равной степени применимы к развитию — непрерывное обучение, постоянное совершенствование и уважение к людям.

Большинство сторонников бережливого производства при разработке программного обеспечения тяготеют к TPS, не обращая внимания на тот факт, что это система Производства, а не системы Разработки, адаптированная к культуре Toyota.

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

TPS не подходит для разработки программного продукта.

В своей книге «Бережливая разработка программного обеспечения» Мэри и Том Поппендик предложили подходящую аналогию для размышлений о разнице между разработкой и производством, а именно: разработка — это акт создания рецепта (глубокая работа), а производство или производство — это набор шагов. который выполняет рецепт (поверхностная работа).

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

Развитие находится в центре внимания; средства и цели создания программного продукта.

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

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

С первого мазка и на протяжении всего остального процесса росписи изделие видно. Каждый новый выбор строится на основе предыдущего выбора.

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

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

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

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

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