Эта статья тоже вас отвлекает. Возвращайтесь к работе! Или нет.
В разработке всё, что идет в ущерб производительности, обычно называют отвлекающими факторами. Я с ними сталкиваюсь, вы с ними сталкиваетесь, все с ними сталкиваются. Наша основная рабочая привычка – сосредотачиваться на проблеме, которую пытаемся решить, и обращать решение в код. Удерживать внимание при этом критически важно, и желательно устранять всё, что нас отвлекает. Но сумеете ли вы опознать все разновидности того, что рассеивает внимание? Давайте остановимся на этом немного подробнее.
1.1. Очевидные отвлекающие факторы
Основное предназначение телефонов и мессенджеров – дать нам знать, что нас кто-то ищет; для того мы их и используем. Их можно выключить или поставить на беззвучный режим, однако в отношении некоторых срочных звонков на нас лежит обязательство отвечать. Они относятся к таким отвлекающим факторам, на которые мы подписались реагировать. Современные телефоны и приложения позволяют разбивать контакты на группы по степени важности, устанавливать для этих групп часы, когда вас нельзя беспокоить, или регулировать уровень сигнала для входящих звонков.
Офис – очевидный источник отвлекающих факторов в виде разговоров лицом к лицу. Так как мы работаем в группах и командах, сотрудничество идет всем на пользу. Но при этом можно подавать своим коллегам сигналы, что вы перешли в режим «не беспокоить». Массивные наушники – верный знак того, что вы огораживаетесь от окружающих и пытаетесь на чем-то сосредоточиться. И да, не пренебрегайте разного рода технологическими игрушками: наушники с шумоподавлением сейчас так эффективны, что человеку, который хочет привлечь ваше внимание, придется сначала попасть вам в поле зрения. Ну, или пальнуть вам в спину из игрушечного дробовика.
Что касается Slack или MS Teams, тут действует простое правило: с глаз долой – из сердца вон. Звуковых оповещений они не выдают, только визуальные. Так что сведите эту треклятую тучу отвлекающих факторов к минимуму в часы, отведенные для продуктивной работы.
1.1.1. То одно, то другое
В ходе моей долгой и плодотворной карьеры разработчика ПО я открыл для себя, что при командной модели работы всю нашу деятельность в течение дня можно разделить на три основные части:
Те, кто думает, что разработчики на работе день-деньской пишут код, выдают желаемое за действительное. Около трети времени уходит на разные виды деятельности, не связанные с кодом. Здесь всё упирается в менталитет компании.
Распределение времени по трем типам задач (отмечены зеленым, красным и желтым соответственно) в стартапах (слева) и крупных компаниях (справа)
Зачем я провожу все эти сравнения? Затем, что задачи из категории «то одно, то другое» некоторые команды или отдельные разработчики могут воспринимать как отвлекающие факторы. Одно из умений, необходимых менеджерам или владельцам продуктов – способность определять, когда и к кому обращаться по таким поводам, чтобы отрывать людей по минимуму. Просто вбрасывать запросы в общий канал в любой произвольный момент со словами «А можем мы помочь с…» — плохая идея и верный способ всем помешать. Договоритесь с командой насчет времени и места, когда лучше всего будет объявлять «то одно, то другое». Я бы рекомендовал ограничиться ежедневными стендапами.
1.2. Серая зона
В массиве отвлекающих факторов есть серая зона. На определенных сотрудниках организации лежит обязанность проталкивать те дела, которые туда входят, однако многие разработчики относятся к последним как к отвлекающим факторам и напрасной трате времени.
К счастью, с основной массой этих отвлекающих факторов можно справиться за счет выделения под них малопродуктивных часов, откладывания на потом или даже избегания. Что до писем – используйте фильтры и автоматическую сортировку по папкам.
1.3. Неочевидные отвлекающие факторы.
1.3.1. Поиск информации онлайн или во внутренних документах
Сбор информации в процессе написания кода или поиск каких-то сведений во внутренних документах отвлекают вас от собственно кода. Эта кривая тропка может увести от вас от задачи на существенный промежуток времени, в результате чего вы утратите сосредоточенность и выпадете из потока. Постарайтесь определить, что вам понадобиться, до того как браться за код. По максимум соберите информацию и документы заранее и положите себе в закладки.
1.3.2. Пренебрежение эффективными инструментами, экономящими время
Если вместо использования горячих клавиш или инструментов для форматирования кода, вы тупо монотонно печатаете вручную, это может вас утомить и сбить с мысли, связанной с кодом. Да, эти инструменты, стимулирующие продуктивность, в любом случае нужно осваивать и вводить в привычный обиход, но, помимо прочего, они предоставляют вам наилучший способ устранить скрытые отвлекающие факторы. Сказанное относится и ко всем технологиям, которые вы часто применяете в работе; распространенным примером является regex. Используйте специализированные инструменты и генераторы для regex; ИИ тоже может оказаться здесь полезен.
1.3.3. Ожидание в ходе программистских процессов
Что-то из перечисленного может повлиять на процесс написания кода, особенно если вам нужно опробовать какую-нибудь раннюю версию. Но подобные вещи ожидаемы. Спланируйте эти действия заранее, в идеале так, чтобы они приходились на конец рабочего цикла или время перед перерывом. Перерыв также может пригодиться для того, чтобы осмыслить и разобраться, что пошло не так, если какой-то шаг получится неудачным.
2.1. Привыкайте расставлять приоритеты
Вы никогда не попадете в среду, где отвлекать не будет вообще ничего. Новые задачи будут поступать всегда. Важно научиться расставлять их в порядке значимости. Есть отличная схема (я позаимствовал ее отсюда) для сортировки задач, которые вы считаете отвлекающими факторами (хотя с точки зрения вашего начальника или коллеги это может быть вопрос жизни и смерти). Эти задачи можно классифицировать по двум критериям:
Мои две копейки к этой схеме – я добавил пятый вариант действия, он закрашен желтым цветом. Иногда вполне справедливо не делать ничего («оставить гнить», как мы говорим). Вы удивитесь, сколько «проблем» на поверку оказываются вообще не проблемами и решаются сами по себе. Если проблема не пожелает самоустраняться, вас призовут снова.
Умение определить приоритетность задачи, которая отрывает вас от работы – это навык из социальной сферы. Помните: вы не единственный человек в компании, способный справиться с проблемой. Вступайте в переговоры и учитесь отказывать, если не уверены, что справитесь с текущей работой под грузом прибывающих дел, которые отвлекают вас от нее. И с другой стороны, не будьте излишне заносчивы, постарайтесь понять, почему люди считают ту или иную задачу срочной. Кстати, сюрприз: задача, который на первый взгляд выглядела как отвлекающий фактор, может оказаться приятным развлечением, которое позволит передохнуть от текущих дел.
2.2. Распорядок дня
Лучший способ справляться с отвлекающими факторами – выстроить повседневный рабочий распорядок.
2.1. Выясните, в какие часы ваша продуктивность на пике
Определите те периоды, когда ваш мозг работает лучше всего, и распределяйте обязанности и командные практики по часам соответствующим образом. Для меня часы максимальной продуктивности – с десяти до часа и с трех до шести. Организуйте пространство таким образом, чтобы вас ничего не отвлекало: наденьте наушники, отключите уведомления, поставьте статус «офлайн» или «не беспокоить» в Slack.
2.2. Спланируйте прокрастницию
Вместо того чтобы позволять чему попало завладевать вашим вниманием когда придется, решите заранее, когда будете отвлекаться. Разработчики ПО – вечные студенты, они учатся чему-то всю жизнь. Просматривайте твиты и блоги, читайте новости и каналы в Slack в те часы, когда ваша производительность хромает. Лично я занимаюсь этим, когда прихожу на работу, и обычно закругляюсь ко времени ежедневной Scrum-сессии. Следующая фаза наступает после обеда – немного попрохлаждаться и еще раз пройтись по ресурсам. Мы живем не одной работой, нужно уметь находить баланс с жизнью. Главное, делать это с умом.
2.3. Дополнительные рекомендации
2.3.1. Отдыхайте
Программирование иногда сильно выматывает; в первую очередь из-за того, что разработчикам приходится часами сидеть перед экраном и печатать код. Это может плохо сказываться на здоровье. Нужно регулярно делать передышку между задачами. Я устраиваю себе маленький перерыв в пару минуты каждые полчаса, а после часа работы – перерыв чуть подольше, в 5-7 минут. «Перерыв» означает, что я встаю и немного прохаживаюсь: до туалета, за перекусом или кофе, просматривая телефон и так далее. Более длительные перерывы хорошо бы по возможности проводить на свежем воздухе. Вы можете воспользоваться популярной техникой Помодоро: двадцать пять минут за работой, затем пятиминутный перерыв.
2.3.2. Устраивайте дни ничегонеделания
Иногда бывает сразу ясно, что ничего, требующего творческого мышления, вы в этот день не сделаете. Примите такие дни как данность и отведите их под простые рутинные дела – освободите рабочий стол, наведите порядок в папках, установите обновления, почистите железо, скачайте свежую документацию, напишите модульные тесты и все в таком духе. Никто не узнает.
2.3.3. Устраивайте дни потока
В другие дни сразу ясно, что вам и суток работы будет мало, и вы чувствуете в себе силы кодить куда дольше, чем обычные 8 часов. Это называют состоянием потока в программировании. Часто такое случается на начальных стадиях проекта, когда можно мыслить свободно, и у вас появляется масса новых идей и желание воплотить их в коде. И здесь, опять же, важно воспользоваться возможностью, отказаться от любых правил и распорядков – писать код хоть по ночам, хоть на выходных, погрузиться в поток. В такие моменты вы – творец.
2.3.4. Сформируйте хорошие привычки при написании кода
Эта статья представляет субъективный взгляд на выявление отвлекающих факторов и борьбу с ними. Возможно, для вас сработают только некоторые из перечисленных рекомендаций, и, разумеется, я привожу не исчерпывающий список, так что делитесь своими собственными идеями и лайфхаками в комментариях.
1. Отвлекающие факторы
В разработке всё, что идет в ущерб производительности, обычно называют отвлекающими факторами. Я с ними сталкиваюсь, вы с ними сталкиваетесь, все с ними сталкиваются. Наша основная рабочая привычка – сосредотачиваться на проблеме, которую пытаемся решить, и обращать решение в код. Удерживать внимание при этом критически важно, и желательно устранять всё, что нас отвлекает. Но сумеете ли вы опознать все разновидности того, что рассеивает внимание? Давайте остановимся на этом немного подробнее.
1.1. Очевидные отвлекающие факторы
- Личные звонки / сообщения / беседы вживую
- Групповые созвоны / ситуативные запросы / разного рода сборы
Основное предназначение телефонов и мессенджеров – дать нам знать, что нас кто-то ищет; для того мы их и используем. Их можно выключить или поставить на беззвучный режим, однако в отношении некоторых срочных звонков на нас лежит обязательство отвечать. Они относятся к таким отвлекающим факторам, на которые мы подписались реагировать. Современные телефоны и приложения позволяют разбивать контакты на группы по степени важности, устанавливать для этих групп часы, когда вас нельзя беспокоить, или регулировать уровень сигнала для входящих звонков.
- Звонок = звонит ваша мама = не вздумайте игнорировать!
- Вибрация = звонит ваш начальник = не спешите брать трубку
- Перенаправление на автоответчик, автоматический ответ текстовым сообщением = друзья, собутыльники и т.д.
Офис – очевидный источник отвлекающих факторов в виде разговоров лицом к лицу. Так как мы работаем в группах и командах, сотрудничество идет всем на пользу. Но при этом можно подавать своим коллегам сигналы, что вы перешли в режим «не беспокоить». Массивные наушники – верный знак того, что вы огораживаетесь от окружающих и пытаетесь на чем-то сосредоточиться. И да, не пренебрегайте разного рода технологическими игрушками: наушники с шумоподавлением сейчас так эффективны, что человеку, который хочет привлечь ваше внимание, придется сначала попасть вам в поле зрения. Ну, или пальнуть вам в спину из игрушечного дробовика.
Что касается Slack или MS Teams, тут действует простое правило: с глаз долой – из сердца вон. Звуковых оповещений они не выдают, только визуальные. Так что сведите эту треклятую тучу отвлекающих факторов к минимуму в часы, отведенные для продуктивной работы.
1.1.1. То одно, то другое
В ходе моей долгой и плодотворной карьеры разработчика ПО я открыл для себя, что при командной модели работы всю нашу деятельность в течение дня можно разделить на три основные части:
- Написание кода – ваша работа над задачами в соответствии с планом
- Работа в команде – инспекции кода, мозговые штурмы, взаимопомощь, совещания, ритуалы Agile, офисные и корпоративные заморочки
- То одно, то другое – это тоже написание кода (или другие дела, связанные с программированием). Тут речь идет о задачах, возникающие спонтанно, багов в продакшне, тушении пожаров, запросах в духе «а можем мы помочь с?..» и так далее.
Те, кто думает, что разработчики на работе день-деньской пишут код, выдают желаемое за действительное. Около трети времени уходит на разные виды деятельности, не связанные с кодом. Здесь всё упирается в менталитет компании.
- Менталитет стартапа: «то одно, то другое» считается входящим в рутинные рабочие обязанности. Ну, знаете, как говорят: «молодая, гибкая, динамично развивающаяся команда».
- Корпоративный менталитет: «то одно, то другое» считается аномалией – существуют специальные команды для поддержки, которые отсеивают подобные задачи, освобождая команды для разработки. Команды для поддержки обращаются за помощью только по необходимости, и обычно такие запросы имеют вид плановых задач.
Распределение времени по трем типам задач (отмечены зеленым, красным и желтым соответственно) в стартапах (слева) и крупных компаниях (справа)
Зачем я провожу все эти сравнения? Затем, что задачи из категории «то одно, то другое» некоторые команды или отдельные разработчики могут воспринимать как отвлекающие факторы. Одно из умений, необходимых менеджерам или владельцам продуктов – способность определять, когда и к кому обращаться по таким поводам, чтобы отрывать людей по минимуму. Просто вбрасывать запросы в общий канал в любой произвольный момент со словами «А можем мы помочь с…» — плохая идея и верный способ всем помешать. Договоритесь с командой насчет времени и места, когда лучше всего будет объявлять «то одно, то другое». Я бы рекомендовал ограничиться ежедневными стендапами.
1.2. Серая зона
В массиве отвлекающих факторов есть серая зона. На определенных сотрудниках организации лежит обязанность проталкивать те дела, которые туда входят, однако многие разработчики относятся к последним как к отвлекающим факторам и напрасной трате времени.
- Совещания – менеджеры уверяют, что от них одна польза, разработчики считают, что убивают там время впустую. Обсуждайте, действительно ли ваше присутствие необходимо.
- Церемонии Agile – может показаться, что некоторые из них только отрывают от дел, особой нелюбовью пользуются периодические ретроспективы. Придите к соглашению, в какие моменты они действительно нужны.
- Корпоративная ерунда – рассылки, опросы, благодарности, логи и так далее.
- Внутренние проблемы – перебои со светом, сетью, серверами.
- Компьютерные и программные обновления – словами не передать, как я ненавижу этот баннер!
К счастью, с основной массой этих отвлекающих факторов можно справиться за счет выделения под них малопродуктивных часов, откладывания на потом или даже избегания. Что до писем – используйте фильтры и автоматическую сортировку по папкам.
1.3. Неочевидные отвлекающие факторы.
1.3.1. Поиск информации онлайн или во внутренних документах
Сбор информации в процессе написания кода или поиск каких-то сведений во внутренних документах отвлекают вас от собственно кода. Эта кривая тропка может увести от вас от задачи на существенный промежуток времени, в результате чего вы утратите сосредоточенность и выпадете из потока. Постарайтесь определить, что вам понадобиться, до того как браться за код. По максимум соберите информацию и документы заранее и положите себе в закладки.
1.3.2. Пренебрежение эффективными инструментами, экономящими время
Если вместо использования горячих клавиш или инструментов для форматирования кода, вы тупо монотонно печатаете вручную, это может вас утомить и сбить с мысли, связанной с кодом. Да, эти инструменты, стимулирующие продуктивность, в любом случае нужно осваивать и вводить в привычный обиход, но, помимо прочего, они предоставляют вам наилучший способ устранить скрытые отвлекающие факторы. Сказанное относится и ко всем технологиям, которые вы часто применяете в работе; распространенным примером является regex. Используйте специализированные инструменты и генераторы для regex; ИИ тоже может оказаться здесь полезен.
1.3.3. Ожидание в ходе программистских процессов
- Настройка зависимостей требует времени – вы можете отвлечься
- Сборка требует времени – вы можете отвлечься
- Развертывание проекта требует много времени – вы однозначно отвлечетесь
Что-то из перечисленного может повлиять на процесс написания кода, особенно если вам нужно опробовать какую-нибудь раннюю версию. Но подобные вещи ожидаемы. Спланируйте эти действия заранее, в идеале так, чтобы они приходились на конец рабочего цикла или время перед перерывом. Перерыв также может пригодиться для того, чтобы осмыслить и разобраться, что пошло не так, если какой-то шаг получится неудачным.
2. Меры по исправлению ситуации
2.1. Привыкайте расставлять приоритеты
Вы никогда не попадете в среду, где отвлекать не будет вообще ничего. Новые задачи будут поступать всегда. Важно научиться расставлять их в порядке значимости. Есть отличная схема (я позаимствовал ее отсюда) для сортировки задач, которые вы считаете отвлекающими факторами (хотя с точки зрения вашего начальника или коллеги это может быть вопрос жизни и смерти). Эти задачи можно классифицировать по двум критериям:
- Важные или неважные
- Срочные или несрочные
- Важные и срочные (зеленое поле): задачи, у которых есть сроки и последствия невыполнения; выполнить.
- Важные и несрочные (оранжевое поле): задачи без четких сроков, которые способствуют успешной работе в долгосрочной перспективе: запланировать .
- Неважные и срочные (голубое поле): задачи, которые кто-то должен выполнить, но для них не требуются навыки вашего уровня: делегировать.
- Неважные и несрочные: отвлекающие факторы и ненужные дела: исключить.
- Желтое поле: может решиться само собой; ничего не делать.
Мои две копейки к этой схеме – я добавил пятый вариант действия, он закрашен желтым цветом. Иногда вполне справедливо не делать ничего («оставить гнить», как мы говорим). Вы удивитесь, сколько «проблем» на поверку оказываются вообще не проблемами и решаются сами по себе. Если проблема не пожелает самоустраняться, вас призовут снова.
Умение определить приоритетность задачи, которая отрывает вас от работы – это навык из социальной сферы. Помните: вы не единственный человек в компании, способный справиться с проблемой. Вступайте в переговоры и учитесь отказывать, если не уверены, что справитесь с текущей работой под грузом прибывающих дел, которые отвлекают вас от нее. И с другой стороны, не будьте излишне заносчивы, постарайтесь понять, почему люди считают ту или иную задачу срочной. Кстати, сюрприз: задача, который на первый взгляд выглядела как отвлекающий фактор, может оказаться приятным развлечением, которое позволит передохнуть от текущих дел.
2.2. Распорядок дня
Лучший способ справляться с отвлекающими факторами – выстроить повседневный рабочий распорядок.
2.1. Выясните, в какие часы ваша продуктивность на пике
Определите те периоды, когда ваш мозг работает лучше всего, и распределяйте обязанности и командные практики по часам соответствующим образом. Для меня часы максимальной продуктивности – с десяти до часа и с трех до шести. Организуйте пространство таким образом, чтобы вас ничего не отвлекало: наденьте наушники, отключите уведомления, поставьте статус «офлайн» или «не беспокоить» в Slack.
2.2. Спланируйте прокрастницию
Вместо того чтобы позволять чему попало завладевать вашим вниманием когда придется, решите заранее, когда будете отвлекаться. Разработчики ПО – вечные студенты, они учатся чему-то всю жизнь. Просматривайте твиты и блоги, читайте новости и каналы в Slack в те часы, когда ваша производительность хромает. Лично я занимаюсь этим, когда прихожу на работу, и обычно закругляюсь ко времени ежедневной Scrum-сессии. Следующая фаза наступает после обеда – немного попрохлаждаться и еще раз пройтись по ресурсам. Мы живем не одной работой, нужно уметь находить баланс с жизнью. Главное, делать это с умом.
2.3. Дополнительные рекомендации
2.3.1. Отдыхайте
Программирование иногда сильно выматывает; в первую очередь из-за того, что разработчикам приходится часами сидеть перед экраном и печатать код. Это может плохо сказываться на здоровье. Нужно регулярно делать передышку между задачами. Я устраиваю себе маленький перерыв в пару минуты каждые полчаса, а после часа работы – перерыв чуть подольше, в 5-7 минут. «Перерыв» означает, что я встаю и немного прохаживаюсь: до туалета, за перекусом или кофе, просматривая телефон и так далее. Более длительные перерывы хорошо бы по возможности проводить на свежем воздухе. Вы можете воспользоваться популярной техникой Помодоро: двадцать пять минут за работой, затем пятиминутный перерыв.
2.3.2. Устраивайте дни ничегонеделания
Иногда бывает сразу ясно, что ничего, требующего творческого мышления, вы в этот день не сделаете. Примите такие дни как данность и отведите их под простые рутинные дела – освободите рабочий стол, наведите порядок в папках, установите обновления, почистите железо, скачайте свежую документацию, напишите модульные тесты и все в таком духе. Никто не узнает.
2.3.3. Устраивайте дни потока
В другие дни сразу ясно, что вам и суток работы будет мало, и вы чувствуете в себе силы кодить куда дольше, чем обычные 8 часов. Это называют состоянием потока в программировании. Часто такое случается на начальных стадиях проекта, когда можно мыслить свободно, и у вас появляется масса новых идей и желание воплотить их в коде. И здесь, опять же, важно воспользоваться возможностью, отказаться от любых правил и распорядков – писать код хоть по ночам, хоть на выходных, погрузиться в поток. В такие моменты вы – творец.
2.3.4. Сформируйте хорошие привычки при написании кода
- Начинайте с самого сложного или самого интересного
- Упростите всё скучное до MVP или mock-объектов, поставьте отметку TODO и вернитесь к ним позже
// @TODO - there are 3 places where to find it and 2 possible fallbacks...
function generateConversationTopic(/*conversationId: string*/): string {
return 'Talking with ???';
}
- Не изобретайте колесо: если код напоминает что-то, уже написанное, стащите кусок оттуда или проведите рефакторинг
- Написание несложных однозадачных функций занимает меньше времени и не так утомляет. Три однозадачных функции лучше, чем одна универсальная, даже если их длина в строках окажется больше.
Эта статья представляет субъективный взгляд на выявление отвлекающих факторов и борьбу с ними. Возможно, для вас сработают только некоторые из перечисленных рекомендаций, и, разумеется, я привожу не исчерпывающий список, так что делитесь своими собственными идеями и лайфхаками в комментариях.