Когда мы говорим об умственной нагрузке, то понимаем, что у любого человека есть предел того, сколько информации он может хранить в своём мозге в определённый момент. То же самое касается и команд, где суммируются когнитивные возможности всех членов. Чем чревато превышение допустимой когнитивной нагрузки, и какие могут быть рекомендации по недопущению её превышения, делятся в своей заметке на IT Revolution Мэтью Скелтон (Matthew Skelton) и Мануэль Пайс (Manuel Pais), авторы книги “Team Topologies: Organizing Business and Technology Teams for Fast Flow”.
Что такое когнитивная нагрузка
В 1988 году психолог Джон Свеллер (John Sweller) охарактеризовал когнитивную нагрузку как «общее количество умственных усилий, использующих рабочую память». Согласно исследованию Свеллера, можно выделить три различных её вида:
- внутренняя (сущностная) – относится к тем аспектам задачи, что лежат в основе предметной области («какова структура Java-класса?», «как создать новый метод?»);
- внешняя (побочная) – относится к среде, в которой выполняется задача («как снова развернуть этот компонент?» «как настроить эту службу?»);
- контекстная (связанная) – относится к аспектам, требующим особого дополнительного внимания при обучении или для высокой производительности («как рассматриваемая служба должна взаимодействовать с другой службой?»).
Для разработчика веб-приложений внутренней когнитивной нагрузкой может быть, например, знание используемого компьютерного языка (помимо владения основами программирования). Внешняя когнитивная нагрузка может заключаться в деталях, необходимых для создания экземпляра среды динамического тестирования (для чего потребуется держать в памяти определённое количество трудно запоминаемых консольных команд). А контекстная когнитивная нагрузка может специфицировать конкретные вопросы в той области бизнеса, над задачами из которой трудится разработчик приложения (например, система выставления счетов или алгоритм обработки видео).
Для эффективной поставки и эксплуатации современных программных продуктов организациям следует попытаться минимизировать внутреннюю когнитивную нагрузку (посредством обучения, правильного выбора технологий, найма компетентных специалистов, парного программирования и т. п.), полностью исключить побочную когнитивную нагрузку (скучные или избыточные задачи, которые не несут большой пользы, ради которой их нужно держать в рабочей памяти, и которые зачастую могут быть автоматизированы), высвободив больше места для контекстной когнитивной нагрузки, с которой как раз и работает мышление, «создающее ценность».
Опасность игнорирования когнитивной нагрузки команды
При планировании задач для определённой команды в рамках разработки частей программного продукта, почти никогда не обсуждается её когнитивная загрузка. Возможно, по той причине, что сложно количественно оценить как имеющиеся ресурсы команды в этом ключе, так и сам уровень предстоящей нагрузки. Или, как часто бывает, “так исторически сложилось”, и от команды ждут, что она без каких-либо вопросов сама адаптируется к возникшим условиям.
Когда когнитивная нагрузка не принимается во внимание, команда затем разрывается на части, пытаясь охватить и взять на себя чрезмерное количество обязанностей и областей. Такой команде не достичь мастерства в своём деле, поскольку возникнет множество издержек, связанных с необходимостью переключения из контекста в контекст.
Изменение объёма когнитивной нагрузки со временем
Количество предоставляемых услуг и разрабатываемых компонентов, за которые отвечает продуктовая команда, обычно со временем растёт. Другими словами – нагрузка на продуктовую команду увеличивается, что приводит к возникновению узких мест. При этом разработка новых услуг часто планируется так, будто у команды снова высокая начальная доступность и околонулевая когнитивная нагрузка.
Такое невнимание ведёт к появлению проблем, поскольку команде по-прежнему требуется исправлять и улучшать существующие продукты. В конечном итоге, команда становится узким местом в процессе разработки, поскольку когнитивные способности её членов в значительной степени перегружены, что приводит к задержкам с выпусками, снижению качества и часто к демотивации членов команды.
Создание команд с учётом когнитивной нагрузки
Создавайте команды с учётом их возможностей и ограничений в части когнитивной нагрузки, как имеющейся, так и прогнозируемой. Не игнорируйте эту область! Принятие во внимание, анализ и оценка текущего уровня когнитивной нагрузки могут быть мощными инструментами для последующих решений о размере команды, распределении обязанностей и установлении границ ответственности между другими командами.