А вы знаете на что уходит ваше рабочее время?
Не знаешь что сказать на ежегодном перфоманс ревью?
Нужно подготовиться к ежемесячному one to one, но не помнишь чем занимался?
Нужно провести ретроспективу по задаче?
Не знаешь почему задача заняла так много времени?
Забыл что делал вчера, 1 день назад, 2,3?
Интересуешься самоорганизацией?
Возможно этот инструмент для тебя.

==== скрин распределения времени по версиям.

Привет! Меня зовут Игорь, я занимаюсь разработкой на Unity c 2018 года.
В статье рассказываю о личном подходе к самоанализу, инструменте для оценки распределения трудозатрат и поиске точек роста. В конце статьи бонус: как выглядит 1 рабочий день из жизни техлида.

Что в статье:

Вступление

Дисклеймер.
Я не я, хата не моя.

Это моё личное мнение и подход к работе, он может отличаться от вашего.
Я не говорю о том что это истина и так нужно делать всем.
Делюсь своим опытом и видением.

Мой рабочий день может состоять из различных типов задач: краткосрочное и долгосрочное планирование, синки, консультации, менторство, one to one, ревью кода и написание кода, мониторинг продовской инфраструктуры, релизы и др. Даже с учётом распланированного дня возникают вопросы и задачи, которые необходимо решать по мере поступления.

В определённый момент времени я решил оценить на что расходуется рабочее время, определить много это или мало. Хотелось понять что в работе я делаю лишнего, от чего мог бы избавиться (например, больше делегировать, чем выполнять самому). Ну и с такими вопросами на ощущениях далеко не уедешь, нужны данные и цифры. Так появились мысли о ведении журнала выполняемых задач, а точнее журнала выполняемых действий.

Какие вопросы интересовали:

  • какая активность совершалась (название)

  • описание активности (заметки что выполнялось, обсуждалось, о чём договорились)

  • количество затраченного времени

  • люди, которые участвовали в активности.

Для сбора данных выбор пал на обычные гугл таблицы. Для анализа структура таблицы была определена следующей:

  • Data - дата выполнения активности

  • Time - время начала выполнения активности

  • Duration - длительность активности

  • Type - тип активности (ревью, написание кода, перерывы, релиз менеджмент и др.)

  • Participants - участники активности (с кем контактировал в этот момент)

  • Action - название активности (название задачи, тема разговора и т.д.)

  • Description - описание активности (чем конкретно занимался)

Позднее добавились фильтры и ещё несколько полей, которые будут описаны подробнее в разделе "Как начать использовать". Вот что получилось:

Инструмент оказался удобным и позднее начал использоваться не только для анализа личных затрат времени, но и для проведения ретроспектив, анализа задач и поиска точек роста. К выше перечисленным полям добавились фильтры, формулы автоматизации расчёта, группировки по версиям.

Техническая часть. Как использовать.

Раздел про детали работы с конкретным шаблон составленной таблицы и рекомендациями по использованию. Можно пропустить и перейти к следующему разделу, если интересует только общая информация.

Ссылка на шаблонный Google Sheets документ (Тык).

P.S. Документ доступен как шаблон в режиме только для чтения. Копируйте себе на google drive, чтобы поэкспериментировать (ФайлСоздать копию).

В шаблоне приведены 3 страницы таблиц.

  • Journal - основная страница с журналом активностей

  • Diagrams - несколько примеров диаграмм

  • People - массив участников для выпадающего списка страницы Journal

Для эффективной работы используйте преимущества гугл таблиц: фильтры, шорткаты, формулы. Без этого заполнение превратиться в рутину и будет занимать очень много времени.

Шорткаты: Ctrl+Shift+; - вставить текущее время, Ctrl+; - вставить текущую дату, Shift+Alt - сгруппировать/разгруппировать строку/столбец и др.

Формулы заполнения: Колонка Duration заполняется автоматически за счёт ARRAYFORMULA вверху столбца. Продолжительность рассчитывается как разница времени начала следующего события и текущего события. Для расчёта вручную заполняется только колонка Time (помним про шорткаты).

Фильтры: Фильтры по ключевым столбцам позволят выбирать один конкретный Action, тип задач, человека, дату, версию и т.д. Ниже будет описано как с помощью фильтров можно фильтровать данные на диаграммах.

Подсветка ячеек по условию: Например, для колонки Date включается красная подсветка, если введён не тип Дата.

Группировка: сворачивайте старые строки в группы, например, по дням/неделям/версиям. Это будет экономить визуальное пространство. Для удобства можно располагать текущий день в самом верху таблицы, чтобы все старые дни съезжали вниз.

Выпадающие списки: Используйте простые списки и списки из диапазона (Например список людей для колонки Input Participants берётся с листа People).

Скрипты расширений (РасширенияApps Scripts): Чтобы выбирать несколько участников добавлен скрипт использующий колонку Input Participants как источник ввода для колонки Participants.

В колонку Input Participants вводиться участник, скрипт переносит значение в колонку Х. Повторный ввод участника в колонку Input Participants удаляет его из колонки Х.

Дефолтная реализация множественного выбора не удовлетворяла желаниям.

P.S. Внутри скрипта используются константы на имена страниц, номера колонок (изменение или сдвиги потребуют внести изменения в классы Columns и Settings).
P.S. Скрипт клонируется автоматически при копировании GoogleSheet документа.

Исходный код скрипта
class Columns 
{
  static get InputParticipants() { return 6; }
  static get Participants() { return 7; }
}

class Settings
{
  static get LimitRow(){ return 4; }
  static get TargetSheetNames(){ return ["Journal", "<Other sheet list name>"]; }
}

function onEdit(e) 
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();

  var activeSheetName = activeSheet.getName();
  var isTargetSheet = Settings.TargetSheetNames.indexOf(activeSheetName) != -1;
  if (!isTargetSheet)
  {
    return;
  }

  var activeCell = ss.getActiveCell();
  var activeCellRow = activeCell.getRow();

  if (activeCellRow < Settings.LimitRow)
  {
    return;
  }

  var activeCellColumn = activeCell.getColumn();
  if (activeCellColumn != Columns.InputParticipants)
  {
    return;
  }

  var separator = '\n';
  var targetSetValueCell = activeSheet.getRange(activeCellRow, Columns.Participants);
  applyMultiplyDropDownList(e.value, targetSetValueCell, separator);
  activeCell.setValue("");
}


function applyMultiplyDropDownList(newValue, targetSetValueCell, separator)
{
  var oldValue = targetSetValueCell.getValue();

  if (newValue) 
  {
    var toApplyValue = "";

    if (!oldValue) 
    {
      toApplyValue = newValue;
    }
    else 
    {
      var oldDropDownElements = oldValue.split(separator);
      var existsingNewValueElementIndex = oldDropDownElements.indexOf(newValue);
      var isNewValueExist =  existsingNewValueElementIndex != -1;
      if (isNewValueExist)
      {
        oldDropDownElements.splice(existsingNewValueElementIndex, 1);
      }
      else
      {
        oldDropDownElements.push(newValue);
      }

      toApplyValue = oldDropDownElements.join(separator);
    }

    targetSetValueCell.setValue(toApplyValue);
  }
}

Визуализация данных: Используйте диаграммы для анализа данных (см. лист Diagrams).

С помощью фильтров и группировки можно отображать на диаграмме только интересующие события. Для этого переключайте опцию "Включить скрытые или отфильтрованные данные" в настройках диаграммы.

Зачем это всё?

Этот инструмент позволяет ответить на различные вопросы, главное уметь их правильно задавать. Например:

В команду приходит новый человек, ты занимаешься его онбордингом.

Сколько времени это занимает?
Это время откуда-то отрезается, откуда(если возможно определить)?
Много или мало занимает времени, страдают ли от этого долгосрочные планы?
Сколько таких новых сотрудников ты можешь позволить себе одновременно?

В спринте получил распределение затраченного времени по категориям: ревью кода - 35%, помощь консультация - 30%, холивар - 20%. Итого получаем 85% времени. Остаётся 15% времени на другую свою работу.

Не малова-то ли?
Не пора ли делегировать часть задач?

В спринте получил распределение затраченного личного времени по людям: Петя - 20%, Вася - 13%, Коля - 43%, Алёша - 10%.

Что-то у Коли многовато времени, почему?
Он делал сложную задачу?
Ему требовалась постоянное сопровождение по задачам?
Не нужно ли помочь ему развивать качество автономности/самостоятельности?

Прикручиваем к анализу нормативы рабочего времени.

Перерабатываешь?
Почему?
Из-за каких задач?
В какой момент что-то пошло не так?
Что нужно было сделать, чтобы предотвратить?

Провалили сроки по фиче (нужно провести ретроспективу).

Что пошло не так?
Что было готово в контрольных точках?
Это ошибка планирования или форс-мажор?
Почему вовремя не приняли меры?
В какой момент нужно было забить тревогу?

Из минусов: начинаешь отслеживать сколько времени занимает отслеживание всего времени.

Один рабочий день из жизни техлида

Вот пример как выглядит один реальный рабочий день с фиксированием действий в журнале активностей.

  • Частое переключение контекста.

  • Отсюда возникают ситуации, когда лиды резервируют себе слоты времени и просят, чтобы их никто не беспокоил.

  • Отсюда возникают просьбы "пишете в чат, если ваша проблема не требует срочного ответа, не нужно просто так отвлекать".

  • Отсюда возникают проблемы, если лиды на себя берут спринтовые задачи. Правило "Тренеры не играют".

  • Отсюда возникает ожидание к начинающим разработчикам "Сначала подумай, погугли, найди варианты решений, а уже потом приходи с вопросами к опытным разработчикам".

  • Шутки про "сделаю за 4 часа в течение недели" (не шутки).

    Ну и так далее...

Вывод

Инструмент свою задачу выполняет хорошо, но требует серьёзной дисциплины в заполнении. При использовании не стоит уходить в крайности и фиксировать мельчайшие события. Инструмент должен приносить пользу, а не создавать головную боль.

Помним, что Activity Journal это не про планирование. Планирование осуществляется до начала выполнения задач. Activity Journal - это события, которые завершились, используемые только для анализа и дальнейших корректировок действий.

Журнал очень помог вначале карьеры техлида, особенно в управлении людьми. Рекомендую.

Потенциально интересные заметки

  1. В общей сумме заполнение журнала занимает 8-15 минут в день, всё зависит от степени детализации (помним что не нужно уходить в крайности).

    Много ли это? Ну звучит как дофига. 15 минут в день - 1,25 часа в неделю - 5.5 часа в месяц, почти рабочий день... Но задумайтесь, а дадут ли вам эти 15 минут в день (несколько секунд между задачами) какой-то пользы? Сомневаюсь... Вместо этого вы получаете ценный инструмент самоанализа (если конечно же потом делать этот анализ). А если посмотреть сколько в день тратиться времени на перекуры, чай/кофе, болтовня с коллегами по нерабочим задачам, то эти 15 минут становятся не такой уж большой тратой.

  2. Знаю некоторые команды, которые интегрировали похожий инструмент как обязательный в работе команды.

    В таких командах налажен процесс ежемесячных one to one. Инструмент используют для подготовки и обсуждения успехов, ошибок, достижений на one to one. С помощью инструмента анализируют рост сотрудника как специалиста, принимают решения о достижении следующего грейда.

    Но помним, что если такой инструмент используется для отчётности, то люди начинают "приписывать" себе.

  3. Спустя время стал использовать инструмент не только как личный журнал, но и для отметок положительных/негативных фактах о команде.

    Пример фактов: "Забыл заказать локализацию, пришлось двигать релиз", "Ответственный. Несколько дней подряд заде��живался допоздна", "Вводил инновацию Х".

    Сильно бустануло предоставление обратной связи по работе человека. Даёшь обратную связь без воды, на конкретных примерах.

  4. Занимаюсь ведением подобного журнала около 2 лет. Даже спустя большое кол-во времени получается восстановить контекст чем занимался тогда, какие задачи решал и какие проблемы были.

    Редко приходится так далеко заглядывать, но бывает. Вот некоторые примеры:
    -- Посмотреть достижения за год.
    -- Сравнить распределение рабочего времени по категориям между месяцами.
    -- Подготовиться к предоставлению обратной связи для человека.

  5. В одно время я написал код, который преобразует записи в диаграмму в виде дерева. Но она получилась настолько объёмной, что читать или анализировать было весьма затруднительно.

  6. Изначально хотел использовать инструмент пару спринтовых версий, максимум пару месяцев. Но втянулся :-)

    Если вы тоже анализируете своё рабочее время, то делитесь в комментариях, как и с помощью чего. Интересно почитать.