[Перевод] Работай асинхронно
Асинхронная работа — такой способ организации процесса, когда задачи выполняются на конвейере. Это позволяет полностью контролировать процесс и точно подстроить его под себя. При этом давление и стресс снижаются до нуля, а задачи выполняются быстро и ловко.
Ровный и быстрый конвейер выдаёт в точности нужное количество продукции, все его этапы сбалансированы с точки зрения эффективности и скорости. Он избегает пустой траты времени или ресурсов, по образцу методологии 3M от Toyota Production System.
Асинхронная работа опирается на три основных принципа: мультиплексирование, связь и действие.
Люди живут в синхронном мире. Часы тикают ровно по секунде. Но способ организации задач оказывает безумное влияние на результат. Всё дело в планировании.
Синхронное планирование
Типичное (синхронное) планирование предполагает одновременное массовое начало задач. Само по себе это не страшно, но общая скорость ограничивается скоростью самого медленного элемента. Любая задержка распространяется по конвейеру, поскольку каждый этап полностью зависит от предшествующего.
Пример 1
Здесь мы видим поток разработки программного обеспечения с тремя терминалами и синхронным планированием. Для завершения разработки нужно выполнить задачи A, B и C. Учитывая способ планирования и очередь, для завершения работы потребуется цикл из девяти рабочих часов. Система хорошо подходит для атомарных задач, но очень медленная в других проектах, поскольку предусматривает очень редкие деплои.
Асинхронное планирование
Асинхронное планирование предполагает разбиение задач на максимальное количество более мелких задач с максимально частым выпуском «минимально жизнеспособных изменений» (MVC). Метод основан на гипотезе, что более частый выпуск минимальных изменений позволит лучше измерить успех и как можно быстрее реагировать на отрицательный фидбек. Он также позволяет лучше контролировать распределение ресурсов, поскольку за то же время мы выполняем больше задач (уменьшенного размера).
Пример 2
Разделив задачи А, B и C (А1, А2, А3, B1 и т. д.) мы в три раза увеличили частоту деплоев. Через девять часов у нас может быть столько же готовых функций, но мультиплексирование с асинхронным распределением позволяет проверить результат — и откатить или изменить следующие шаги. Мы сократили время итерации до трети от первоначального.
Эта методика позволяет нам мультиплексировать задачи, объединяя их, чтобы быстрее получать результаты.
Хорошая коммуникация — ключ к успеху любой системы (человека или машины).
Есть много видов связи: электронная почта, мгновенные сообщения, голосовой вызов, видеозвонок или даже «пойдём выпьем кофе». Каждый из них совершенно по-разному влияет на производительность, и выбор правильного варианта так же важен для конвейера, как и выбор задачи.
Синхронная связь
Мы по природе больше склонны к синхронному общению, оно проще и комфортнее.
В разговоре обычно участвует минимум двое. Он происходит в разных форматах:
- Встреча
- Видео/голосовой вызов
- Кофе-брейк
- Беседа за обедом
- Отправка сообщения с ожиданием немедленного ответа
Это всё отлично, если вопрос невозможно или сложно обсудить в асинхронном формате. Например, обзор эффективности, обсуждение стратегии, собеседование, разговор один на один.
Большинство совещаний можно заменить правильной документацией, хорошо написанными электронными письмами или сообщениями.
Вообще, совещания — самый дорогой инструмент в компании, используйте его правильно.
В третьем примере два разработчика работают над собственными задачами и перед деплоем должны завершить задачи A, B и C:
Пример 3
Довольно типичная ситуация. Обоих разработчиков на некоторое время отвлекает обсуждение технического задания, и вскоре собрание на тему, что им делать дальше.
Это явно не лучший вариант для использования синхронной связи. Мы видим, что прерывания задержали всю работу и деплой не состоялся.
Производительность такого конвейера явно не равномерная, и её никак не назовёшь высокой.
Асинхронная связь
Асинхронная связь даёт независимость. Она пытается обеспечить, чтобы задача и её последствия не зависели от того, кто её спланировал или выполнил.
Асинхронная связь обеспечивает некоторые общепризнанные лучшие практики, такие как:
- Хорошая документация
- Письменные инструкции
- Обмен сообщениями вместо звонков
- Уважение к работе без отвлечений
Пример 4 с теми же двумя разработчиками и задачами, но асинхронной связью.
Пример 4
В этом примере связь осуществляется посредством обмена сообщениями и хорошо написанной документации. Даже если обмен сообщениями растянут во времени, влияние на рабочий поток незначительно и часто даёт лучшую производительность.
Но почему?
Люди не очень хорошо переходят от состояния полного сосредоточения на задаче А к полному сосредоточению на задаче В (как показано на следующем рисунке). Например, когда вы глубоко погружены в книгу и вас что-то отвлекает, вам потребуется время, чтобы вернуться к тексту.
В примере 5 мы видим диаграмму, где по осям отложены время и производительность бэкенд-разработчика, которого отвлекают дважды: сначала разработчик фронтенда спрашивает о полезной нагрузке запроса API, а потом новичок в команде просит помощи с локальной настройкой БД проекта.
Пример 5
Бэкенд-разработчик потратил некоторое время, чтобы сосредоточиться на текущей задаче (1), затем перешёл в состояние концентрации (2), где его суперкреативный и мощный мозг работает наиболее эффективно. Затем его отвлекают, и он тратит некоторое время на общение с фронтенд-разработчиком (3), чтобы потом вновь вернуться к задаче (1). К сожалению, когда разработчик снова сосредоточился (2), его опять отвлекают (3).
Если вы дочитали до этого места, уверен, что всё это вам очень знакомо.
Ключевым является понятие потока (2). Определение из Википедии:
В позитивной психологии состояние потока — это психическое состояние, в котором человек, выполняющий какую-либо деятельность, полностью погружен в ощущение энергичного сосредоточения, полной вовлечённости и наслаждения процессом деятельности. В сущности, поток характеризуется полным поглощением внимания, и вытекающей из этого потерей чувства пространства и времени.
Если полностью сосредоточиться само по себе трудно, то попасть в поток ещё труднее. Чем лучше вы сосредоточены, тем выше вероятность попасть в поток, но если возникли проблемы с сохранением концентрации, забудьте о потоке.
Асинхронная связь здесь исключительно важна, поскольку защищает время и концентрацию каждого сотрудника, уменьшая бессмысленные отвлечения. Когда вы связываетесь асинхронно, такие типы прерываний происходят гораздо реже. Увеличивается время для глубокой работы и вероятность достижения потока.
Это последний фактор перехода в асинхронный режим. Дело не в процедурах, а в отношении к себе как профессионалу и своих профессиональных целях.
Часто встречается, что задача не подготовлена, процессы не планируются, ответственные лица не выходят на связь и т. д. В таких условиях успешные команды выполняют работу, даже если позже придётся её переделать и адаптировать, но не тратят время на «ожидание».
«По умолчанию всегда действуй» — мантра, которую мы в Remote продолжаем повторять. Это означает, что если нужно что-то сделать и никто не может помочь или указать, что делать дальше, то используйте здравый смысл и делайте выбор самостоятельно.
Представьте, что есть три задачи, из них хорошо описаны только две, поэтому нужно подождать, чтобы менеджер по продукту точно определил требования.
Пример 6
В этом примере первый разработчик по умолчанию выполняет действие, а второй по умолчанию ожидает. Первый взял в работу какую-то другую задачу, пусть не такую важную. Второй дожидается менеджера, чтобы тот помог описать требования для такой задачи.
Это условный пример, и я хотел бы сказать, что он преувеличен, но нет. Очень распространённая ситуация.
Если действительно нужна помощь со следующей задачей и вы никак не можете найти что-нибудь ещё, ну, лучше использовать это время для личного блага, например, сходить в спортзал, погулять с собакой или посмотреть эпизод любимого сериала (да, даже в течение рабочего дня).
Конечно, некоторые задачи очень тонкие, и если вы не уверены, можно подобрать что-то ещё. Речь не об игнорировании риска, а о том, чтобы брать на себя ответственность контролируемым образом.
Асинхронная работа — это способ организовать работу с меньшими перерывами и более высокой эффективностью, основанный на нескольких идеях:
- Асинхронная работа должна использоваться чаще, чем синхронная, она обеспечивает лучшее управление ресурсами, уменьшает потери времени и, следовательно, оптимизирует производительность.
- Мультиплексирование задач сокращённого размера позволяет быстрее выполнять поставленные задачи, быстрее проверять гипотезы и с большей уверенностью достигать успеха.
- В большинстве случаев связь должна быть асинхронной, кроме случаев, которые явно требуют синхронности. Это позволяет людям дольше фокусироваться на своих задачах и применять лучшие практики, такие как документация и написание надлежащих процедур.
- Всегда по умолчанию действовать (в рамках разумного) помогает всей команде двигаться быстрее, сократить потерю времени и повысить сопричастность каждого сотрудника общему делу.