Любая сложная деятельность состоит из множества различных аспектов. Каждый из этих аспектов является важным, и любой руководитель стремится их все контролировать. Но возможности человека ограничены и, если держать одновременно слишком много фокусов, то неизбежно будет упущено немало важных вещей или изменений и, как следствие, ухудшится качество управления. Так и в разработке программного обеспечения для достижения успеха необходимо следить за аналитической работой, определением приоритетов, правильной архитектурой, качеством кода, тестированием, документацией и многими другими вещами. И, наверное, каждый, кто пробовал управлять разработкой ПО знает, что уследить за всем этим одновременно невозможно. Начав акцентировать внимание, например, на документации можно получить снижение скорости разработки, а вновь занявшись разработкой обнаружить отсутствие документации. И, как правило, нет никакой возможности нанять для контроля различных аспектов специальных людей. А попытки регламентировать каждый шаг и формализовать детальные требования к процессам и артефактам серьезно демотивируют участников проекта и, в лучшем случае, просто не дают желаемого результата. Но различные аспекты деятельности связаны между собой, а также зависят от обстоятельств, внешних по отношению к ним. Например, необходимость согласования архитектуры несколькими разработчиками неизбежно приведет к появлению хорошей документации по проекту. Другим примером является SCRUM, когда несмотря на отсутствие прямых указаний об улучшении качества кода, в командах нередко появляются такие процедуры как code review, непрерывная интеграция и мо