Как переключение между контекстами убивает эффективность разработчиков на проекте
Вы когда-нибудь задумывались, что сильнее всего подрывает эффективность работы? Да много чего. Но мы часто недооцениваем один фактор, который выделяется на фоне остальных.
Каждое короткое сообщение, которое вы отправляете коллеге в телеге с мемасом, шуткой и прочим, отнимает у него 23 минуты продуктивной работы. И это далеко не всё.
Недавно мы задумались, что совсем недооцениваем вред, который нам причиняют такие отвлекающие факторы. В этой статье разберёмся, почему переключение между контекстами обходится так дорого и что с этим делать.
Что такое переключение между контекстами
Вы замечали, как у вас путаются мысли, когда вы переключаетесь с чтения почты или телеги на написание кода? Это и есть переключение между контекстами. Наш мозг не компьютер, который в состоянии мгновенно запустить новую программу. Нет, мы должны додумать один поток мыслей, а потом загрузить следующий. И эти умственные операции перегружают нас больше, чем кажется на первый взгляд.
Вот вы с головой погрузились в проект. На телефон приходит пуш, вы проверяете сообщение и понимаете, что на него надо ответить. Потом вы на автомате возвращаетесь к проекту. После каждого такого скачка ваш мозг должен заново сосредоточиться, перебирая в памяти, где вы остановились. Эти дополнительные затраты времени на обработку информации могут замедлить вашу работу и стать причиной ошибок.
Термин «переключение между контекстами» заимствован из работы операционных систем. ОС может обрабатывать на одном процессоре несколько процессов, приостанавливая один и запуская другой. Эти системы умеют переключаться между контекстами, а наш мозг — нет.
Почему мы переключаемся между контекстами?
Мы переключаемся между задачами чаще, чем кажется. Ещё бы, ведь все приложения и уведомления специально созданы для того, чтобы привлекать наше внимание. Наш мозг обожает всё новое и устремляется к каждому новому сообщению, особенно при рутине.
Нам кажется, что по работе мы обязаны отвечать немедленно. Это ещё сильнее снижает концентрацию, а корпоративная культура обычно такое ещё и поощряет. И перед нами столько всего: письма, чаты, открытые вкладки, на что можно легко отвлечься.
Насколько сильно переключение между контекстами вредит разработчикам?
Вспомните последнюю нетривиальную историю по программированию, над которой вы работали. Наверняка вам приходилось держать в голове множество моментов: системную архитектуру, конкретную задачу, возможные риски, а ещё как ваше решение впишется в общую картину. Каждый элемент живёт у вас в кратковременной памяти, формируя хрупкую ментальную модель, и мы способны одновременно помнить только 7 элементов.
Когда нас отвлекают, эта ментальная модель разваливается. По замерам учёных Калифорнийского университета оказалось, что разработчикам нужно в среднем 23 минуты, чтобы полностью восстановить концентрацию внимания. Выходит, при стандартном восьмичасовом рабочем режиме они постоянно находятся в процессе восстановления внимания над задачей. Это при отвлечении на три уведомления в час, а, как вы знаете, их гораздо больше, если учесть все рабочие и личные моменты.
Что может быть обиднее потерянного времени?
Когда нас отвлекают, мы не просто тратим ценные минуты — у нас снижается качество работы в нескольких плоскостях.
Снижается умственная энергия. Наш мозг не предназначен для постоянного переключения от одного к другому. После каждого такого скачка у нас сокращаются когнитивные ресурсы — наподобие того, как аккумулятор телефона разряжается быстрее, если переключаться между приложениями.
Разработчиков, которых часто отвлекают, признаки умственной усталости проявляются намного раньше, чем у остальных, и во второй половине дня они допускают больше ошибок. Со временем такая умственная усталость накапливается и приводит к повышению уровня стресса и даже выгоранию.
Ещё обиднее потерянного времени:
- Из-за частых помех постепенно растёт количество ошибок, потому что разработчики с трудом заново погружаются в свою задачу.
- Снижение производительности из-за усталости, вызванной постоянным отвлечением, приводит к накоплению тех. долга, так как разработчикам приходится дольше погружаться в тему и вспоминать уже написанный код.
- Постоянные отвлечения во время написания кода снижают его надёжность. А это увеличивает длительность циклов проверки кода и исправления ошибок.
Всё это — реальные проблемы, которые командам разработчиков придётся устранять позже. Возникает эффект снежного кома
По опыту мы знаем, что отвлекающие факторы влияют не только на выполнение самой задачи. Если вас отвлекли на пятнадцать минут во время работы над важной задачей, это сильно задержит её выполнение. Разработчикам часто приходится буквально начинать работу над задачей с нуля. Знакомо?
Как избежать переключения между контекстами?
Каждому, кто занимается решением задач, требующих концентрации внимания, креативности и технического мастерства, в частности, разработкой ПО, нужно оптимизировать рабочее пространство и включаться в состояние потока. Достичь состояния потока — значит быть в оптимальном состоянии сознания, в котором человек полностью погружён в своё занятие и выполняет его наилучшим образом.
Пик активности
По данным исследования Stack Overflow — это сайт, к которому масса разработчиков по всему миру обращается за помощью при возникновении сложностей (то есть постоянно) — опубликовал исследование, основанное на данных запросов к ресурсу. Оно показывает, какие языки программирования, в каких городах и в какое время суток используются чаще всего.
Для получения статистики был выбран август (чтобы максимально исключить из выборки запросы школьников и студентов, которые могли исказить результат) и 250 самых используемых тегов. Также для каждого запроса по IP-адресу вычислили информацию о часовом поясе и с достаточно высокой точностью определили местное время.
Сайт помогает программистам выполнять свою работу, поэтому неудивительно, что трафик сильно повышается примерно с 9 до 17 часов, а в районе полудня немного падает — люди идут обедать.
Посмотрим на статистику посещений тем, касающихся четырех распространённых языков: C, Python, JavaScript и C#.
График похож на предыдущий: вне зависимости от языка программисты в основном используют сайт в стандартные рабочие часы с перерывом на обед, а ночью отправляются спать (или внезапно решают делать всё самостоятельно).
Тем не менее, можно заметить некоторые различия: например, разработчики на C# начинают и заканчивают работу раньше, что, скорее всего, связано с использованием языка в банках и корпорациях, а C более популярен в вечернее время суток.
Как теперь кодить?
1. Ставьте конкретные цели для каждого периода работы, чтобы удерживать концентрацию внимания и эффективно отслеживать прогресс. А ещё ежедневные цели помогают нам понять, что мы хотим успеть за сегодня.
2. Заносите задачи в список дел. Это снизит напряжённость. В любой момент можно свериться со списком и решить, над какой задачей работать дальше. Выберите самую важную задачу и начните с неё.
3. Расставляйте приоритеты. Этот приём поддерживает вовлечённость в работу и не даёт отвлекаться.
4. Отведите время для сосредоточенной работы. Установите полуторачасовые интервалы для сосредоточенной работы. Отметьте эти блоки у себя в календаре и для их выполнения выберите время дня, когда вы на пике энергии. Для большинства людей это — утро, но для разработчиков чаще всего вечер.
5. Во время работы держите открытым текстовый файл. Если вам в голову приходит мысль или возникает новая задача, не переключайтесь на неё, а просто быстро запишите её в файл. Так вы сможете не отвлекаться.
6. Когда вы занимаетесь сложной задачей, оставляйте себе подсказки. Если вас отвлекли, лаконичный комментарий о том, почему в файле вы написали именно эту строчку, сэкономит вам несколько часов, которые ушли бы на восстановление вашего хода мысли. Этим же приёмом можно пользоваться в конце дня. Тогда завтра вы точно будете знать, с чего продолжить.
7. Минимизируйте отвлекающие факторы. Как вариант, наденьте шумоподавляющие наушники, отключите неважные уведомления или создайте изолированное рабочее пространство. Отличный вариант — выключать на какое-то время мессенджеры и включать на телефоне режим «Не беспокоить».
8. Откажитесь от многозадачности. Наш мозг может корректно и сосредоточенно работать только над одной задачей. Так что берите в работу что-то одно.
9. Продумайте эргономику. Обзаведитесь эргономичным столом и стулом, настройте монитор, чтобы сократить физический дискомфорт.
10. Организуйте пространство. Не загромождённое рабочее пространство снижает когнитивную нагрузку и помогает сосредоточиться на задаче.
11. Используйте подходящие инструменты. Правильно подобранные инструменты и программы могут иметь огромное значение. Быстрый и надёжный комп с классным ПО упрощает работу.
12. Соблюдайте режим. Наш мозг любит порядок. Начинайте день с определённого ритуала — это подскажет мозгу, что пора входить в состояние потока.
13. Делайте регулярные перерывы. Запланированные перерывы помогут сохранять высокую концентрацию внимания и не выгорать.
14. Взаимодействуйте, если это действительно нужно. Если вы работаете в офисе, где высоко ценят открытость и доступность, проанализируйте свою готовность к взаимодействию с окружающими.
15. Планируйте свой день стратегически. В конце рабочего дня подведите итоги и запланируйте задачи на следующий день. Или, наоборот, начинайте каждый день с планирования. Это помогает начать день продуктивно.
Наши команды в отделе разработки «ПиццаФабрики» два раза в месяц по понедельникам в начале спринта проводят детальное планирование. Каждый день во время спринта организуют пятнадцатиминутное дейли, на котором все участники команды делятся результатами работы за предыдущий день и рассказывают какие задачи будут решать в текущий день. Два раза в месяц в конце спринта все команды проводят ретроспективы, на которых подводят итоги двухнедельной работы и предлагают пути решения проблем и улучшения производительности.
16. Хорошо отдыхайте. Работать на пике возможностей в течение длительного времени — опасно. Постарайтесь делать короткие перерывы, менять местоположение, делать паузы на кофе или перекус.
Стремимся к лучшему
Когда разработчиков отвлекают от работы, дело не только в том, что это раздражает. Это наносит сильный вред продуктивности, подрывая качество кода, боевой дух команды и сроки по проекту. Но если определиться с подходом и подобрать нужные инструменты, с этой проблемой можно эффективно бороться.
- Переключаться между контекстами — это не просто потерять несколько минут. У отвлекающегося разработчика падает концентрация внимания, и снижается качество кода.
- Состояние потока повышает эффективность, но это очень хрупкое состояние.
- Чтобы его сохранить, нужно устанавливать время сосредоточенной работы, переходить на асинхронную коммуникацию и анализировать показатели.
Общая цель — не избавиться от помех, а убедиться, что они обходятся не слишком дорого. Оберегайте время сосредоточенной работы: и команда, и программный код скажут вам за это спасибо.
Наши скачки в производительности
По независимым наблюдениям наши разработчики не отвлекаются на уведомялки в телефоне или залипание на чтение ленты в телеграм-канах. Самой частой проблемой мы выделили неверную оценку реальных сроков, которые требуются на реализацию той или иной задачи на грумингах.
И если с новыми модулями Единой системы автоматизации и сервисами обычно всё понятно и проблем не возникает. А вот когда приходится дорабатывать старые сервисы, это похоже на русскую рулетку. Всё дело в старом коде (легаси), который, к сожалению, часто не имеет ни тестов, ни комментариев. Разобраться, что делает тот или иной кусок такого кода, почти невозможно. И да, это не только наша проблема, но она наиболее болезненна и трудозатратна для разработки в целом.