«Деятельность, свойственная человеку,
есть для него источник радости.»
 
Консалтинговая компания Марк Аврелий


Проектирование в нестабильной среде

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

Предполагается, что ПРОЕКТ - это образ будущего материального объекта (или программного продукта). Проект будет полезным, если условия, в которых он создавался, будут неизменными в ходе последующего дизайна/разработки конечного продукта согласно данным в проекте.  Но что делать в том случае, когда мир, обстановка, ситуация перестали быть стабильными даже на протяжении одного месяца?  В таком случае ПРОЕКТ нуждается в изменениях. В постоянных уточнениях и корректировках. И эти уточнения/корректировки должны тут же учитываться в производственном цикле, где уже началось создание продукта. И чем чаще происходят такие изменения, в том числе из за новых бюджетных или временных ограничений, тем больше обесценивается фаза ПРОЕКТИРОВАНИЯ.

Мир разработки программного обеспечения ответил на это методиками экстремального программирования, суть которых лежит в итеративной разработке и максимальном сближении проектирования и программирования. Идея экстремальных методов программирования (agile методик) заключается в исключении формальных спецификаций и замене их пользовательскими историями (user story), описывающими главные идеи/фичи того или иного экрана/функции системы. Это дает следующие возможности:

  • простор разработчику для выбора методов и вариантов реализации
  • возможность быстрой реализации. Первую реализацию можно считать прототипом. Что дает новые идеи для проектирования (коррекции изначальной задачи) и быстрее приводит к финальному результату
  • можно начать пользоваться системой уже тогда, когда она готова всех лишь на 10-20-30% от первоначально задуманного объема!  

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