Вот и наступил 2020 год. И как всегда в начале года мы ставим себе амбициозные цели на год, обещаем заняться планированием, стать лучше и т.п. Мы начинаем использовать новый крутой сервис по управлению временем и задачами, о котором прочитали накануне. Но проходит пару недель или пару месяцев, мы разочаровываемся в сервисе, забрасываем планирование и управление задачами. А ведь управление временем/задачами входит в семь навыков высокоэффективных людей, какими мы все хотели бы быть. Так происходило и со мной: на протяжении последних десяти лет я пробовал различные сервисы и программы по управлению временем/задачами, читал море статей по этой теме, но всё как-то не мог найти свой идеальный подход до последнего времени. Последние пару лет я пришел к тому, что начал использовать Visual Studio Code (VSCode) и расширение Org Mode для управления временем и задачами. В этой статье я расскажу, как я это делаю. Не скажу, что я стал супер высокоэффективным, но эффект чувствуется.  Это адаптированный перевод серии статей из моего блога. Здесь, на хабре, я рассказываю про то, как использую VSCode для управления временем/задачами. Если же вам всё-таки интересно прочитать все статьи, где можно найти намного больше информации как я ставлю задачи, как я пришел к такому подходу, и какие лайфхаки я использую для увеличения продуктивности, то ниже я привожу ссылки на каждую статью из серии (написаны на английском): В оригинальной статье вы также сможете посмотреть скринкасты, которые показывают процесс работы с разными файлами. К сожалению, хабр пока не позволяет вставлять скринкасты в видео формате. Перед тем как начать описывать мой подход, я хочу немного остановиться на интервалах времени, которые я использую при планировании. Моя основная цель управления временем — это увеличить продуктивность, т.е. успевать больше за тот же период времени не ухудшая качества работы. Для того, чтобы что-то улучшить, для начала надо это измерять. И лучше всего для этой цели использовать одинаковые промежутки времени.  Каждая секунда, минута, час, день, и неделя обладает одинаковой длительностью в общем случае. К сожалению, секунды, минуты и часы не очень удобны для измерения продуктивности, так как она изменяется в зависимости от время суток. Например, я сова, и вечером моя продуктивность выше. Так же не очень корректно сравнивать продуктивность в разные дни, потому что в какие-то дни мы более "живые". Например, у людей самая высокая продуктивность во вторник-среду, а к концу недели наши батарейки обычно уже еле живые. Из этого становится очевидным, что минимальный интервал для корректного измерения продуктивности — это неделя.  К сожалению, мы, люди, обычно планируем в месяцах, а в месяце может быть от 28 до 31 дня. Таким образом сравнивать продуктивность не очень корректно, так как длительность разных месяцев может отличаться на 10%. Для того, чтобы этот интервал у меня всегда был одной и той же длительности, я решил, что мой месяц будет равен 4 неделям или 28 дням. Сейчас такой же подход часто используется при разработке: итерации обычно кратны неделе. В году у меня получается 13 месяцев (13*28=364) и один или два дополнительных дня. Таким образом, в год я нахаляву получаю лишний месяц. Это как 25-ый час в сутках о котором все мечтают, чтобы все успевать. Кстати, отпуск со всеми выходными чаще всего тоже примерно равен 28 дням, так что лишний месяц может быть вашим отпуском (хотя я этого и не делаю, потому что в отпуске я все-равно занимаюсь планированием, хотя и в меньшей степени). Основные интервалы планирования у меня — это неделя и месяц. Мне очень сложно планировать свои дела на год вперед (очень завидую тем, кто может это делать и при этом выполняет поставленные задачи), поэтому планирование года заключается в том, чтобы только поставить цели в различных сферах жизни.  Планы у меня хранятся в отдельных файлах. Я использую следующее соглашение по именованию этих файлов (использование такого соглашения облегчает навигацию): Все задания я разделяю на два типа: привычки и задачи. Задача — это задание, у которого есть конкретный результат и которое запланировано на определенную дату. Например, "убрать в комнате" — это задача, потому что я всегда могу определить, на какой день я запланировал эту задачу (TODO), выполнил ли я задачу полностью в этот день (DONE), или же я сделал её только частично (PRTL). Кроме этого, в связи с более приоритетной задачей, мы можем уборку перенести на другой день (MOVE), или же мы не можем сделать уборку в этот день, потому что наш пылесос сломался, и мы ждём новый (WAIT). В скобках я указал статусы, которые я присваиваю задачам в таких ситуациях.  Наиболее часто я использую статусы TODO, DONE, PRTL. Довольно редко использую WAIT, и практически никогда не использую MOVE. Мне проще просто передвинуть строчку с задачей на другой день. Но этот статус полезен, если вы отслеживаете, сколько задач вы запланировали на конкретный день и сколько реально смогли сделать. Впоследствии эта информация может помочь улучшить планирование. Второй вид задания — это привычки. Основное отличие привычки от задачи в том, что привычку невозможно сделать, её можно только практиковать каждый день и, возможно, укоренить когда-нибудь. Например, привычки для меня это "Рано просыпаться", "Читать перед сном", "Делать зарядку", "Заниматься спортом". Если я хочу избавиться от чего-то, то это тоже тип задания "привычка", например, "Бросить курить".  Так как процесс формирования привычки занимает время (какие-то умные люди говорят, что надо минимум один месяц), то привычки я практикую минимум неделю. В моей модели, у привычки есть всего три статуса: GOAL, если я планирую следить за привычкой на этой неделе; DONE, если на этой неделе я не нарушил; и FAIL если я сорвался. Например, если в начале недели я ставлю себе задание "Читать перед сном", то если я каждый день читал перед сном на этой неделе, то привычка DONE, если я хотя бы один день лег спать не почитавши (по любой причине, даже уважительной), то привычка FAIL. Только если привычка DONE, то на следующей неделе я могу добавить новую привычку. При этом, важно отслеживать привычки, которые уже сформированы, чтобы так же не нарушать их.  Так как большое количество различных задач я выполняю в VSCode, неудивительно что я использую этот текстовый редактор для управления временем/задачами. VSCode доступен на трёх основных платформах (Win, Linux, MacOS), поэтому вполне вероятно, что вы тоже можете использовать подход описанный в этой статье. Для управления временем/задачами, я дополнительно использую два расширения для этого текстового редактора: Расширение File Utils позволяет мне ускорить некоторые операции с файлами (например, копирование или перемещение), а расширение Org Mode непосредственно необходимо для управления временем/задачами.  Стоит отметить, что расширения типа Org Mode существуют и для других текстовых редакторов: наиболее мощное, насколько я знаю, в Emacs; но так же есть расширения для Vim и Sublime Text 3. Если вы используете эти инструменты для работы, то вы можете адаптировать мой подход для работы с ними. Я использую kubuntu, поэтому все быстрые сочетания клавиш я привожу для этой операционной системы (насколько я помню, я использую стандартные варианты). Если вы используете какую-то другую операционную систему, или вы используете нестандартные сочетания клавиш, то они могут отличаться от моих. Мой способ использования Org Mode отличается от канонического. Например, обычно разное количество * используется для структурирования задач. В моем случае иерархии нет, и разное количество * я использую просто для красоты. Временную метку я не присваиваю конкретной задаче, а использую просто для обозначения дня.  Я знаю про канонические приемы, но к такому подходу я пришел сознательно, потому что канонический подход не совсем подходит мне (или не поддерживается расширением) в некоторых аспектах. Вся информация по управлении временем/задачами храниться в одной директории. У меня эта директория называется Lifelogging. Вот её структура: В этой директории есть следующие поддиректории: Как вы можете заметить, структура директории для 2020 года немного отличается от структуры других лет: файлы 2020.org, 2020:01.org и 2020:01:01|W01.org находятся в корне этой директории. Причина в том, что мне удобнее сохранять файлы относящиеся к текущему периоду планирования в корне директории. После того как период окончен, я просто перемещаю соответствующий файл в соответствующую директорию.  Если вы работаете на нескольких компьютерах и хотите иметь доступ к этим данным с разных машин, то можно поместить папку Lifelogging в Dropbox (или использовать другое решение для синхронизации данных). Для каждого из периодов планирования (год, месяц, неделя) в поддиректории _template у меня хранится шаблон. Во время планирования, я копирую соответствующий шаблон в директорию текущего года, переименовываю его в соответствии с моим соглашением по именованию файлов, и далее приступаю к изменению контента. Например, если мне надо составить план на второй месяц 2020 года, я копирую файл month.org в директорию 2020 и переименовываю его в 2020:02.org. Перед тем как описывать, как я планирую каждый из периодов, нам необходимо сделать некоторые изменения настроек расширения Org Mode. В частности, нам надо изменить список статусов задач. По-умолчанию, в Org Mode определены следующие статусы: "TODO", "DONE", "WAIT", "SCHD". Мой список отличается, мне требуются статусы "TODO", "DONE", "WAIT", "PRTL" и "MOVE".  Чтобы изменить этот список выполните следующие действия. В меню VSCode выберите File -> Preferences -> Settings (или просто нажмите Ctrl+,). На появившемся экране, раскройте Extensions и выберите Org Mode configuration. Найдите настройку Org:Todo Keywords. Так как изменить эту настройку из UI нельзя, нажмите на ссылку Edit in settings.json. VSCode откроет файл settings.json, где нам надо изменить значения org.todoKeywords следующим образом: В начале каждого года, я создаю новую директорию, в которую сразу копирую шаблон year.org из директории _template и переименовываю его. Чтобы ускорить этот процесс, я использую возможности расширения File Utils. Я просто выбираю файл year.org в директории _template, нажимаю Ctrl+Shift+P, чтобы открыть "Command Palette" (также можно использовать меню: View -> Command Palette…), и выбираю команду File: Duplicate. Далее, в строке приглашения просто меняю .../_template/year.org на .../2020/2020.org и вуаля, файл находится в нужном мне месте. Мой шаблон для года имеет следующий вид:  В шаблоне есть две области (выделенные красным цветом). В первой я непосредственно записываю цели на год. Так как ставить задачи на год я ещё не научился, то годовой файл содержит только цели, сгруппированные по сферам жизни:  У меня не всегда есть цели в каждой из этих категорий, просто мне нравится такое разделение сфер жизни. В середине года, я провожу ретроспективу моих целей. Я корректирую поставленные цели, а также описываю прошедшие полгода в свободной форме. Для этого предназначена вторая область. Каждые 4 недели я создаю план на следующий месяц. Как и в случае плана на год, я копирую шаблон для месяца month.org из директории _template в директорию текущего года и переименовываю его в соответствии с моим соглашением, например, в 2020:01.org. Так же как и в предыдущем случае, я использую возможности расширения File Utils. Шаблон для месяца выглядит следующим образом:   В нём можно выделить три секции: В начале месяца, я выбираю привычки, которые бы хотел сформировать в этом месяце, и записываю их в предназначенную для этого секцию привычек. Не стоит сразу пытаться формировать очень много привычек. Укоренять привычки очень сложно, требуется прикладывать усилия каждый день. При этом очень легко сорваться. Более того, если не соблюдать уже сформированные привычки, то они очень быстро исчезают. Поэтому на месяц у меня обычно всего пара новых привычек (из разных сфер). При этом я также часто записываю уже сформированные привычки в эту секцию, для того, чтобы не забывать и о них.  Вторая секция предназначена для задач на следующий месяц. Чаще всего, эти задачи привязаны к каким-то дедлайнам в этом месяце. Например, если мне надо сдавать какой-то проект в этом месяце, то я записываю все задачи, которые надо закончить по проекту. Кроме этого, в список задач я также записываю названия книг, которые планирую прочитать в этом месяце. Стоит отметить, что это не означает, что я создаю план на месяц один раз и потом весь месяц пытаюсь достичь поставленных целей. В течении месяца, я могу менять этот файл, добавляя и удаляя задачи из него. Но предварительно сформированный план позволяет сфокусироваться на более приоритетных задачах. В самой последнее секции Описание месяца я провожу ретроспективу. В ней, в конце месяца, я в свободной форме описываю все достижения и неудачи. В последствии, я использую эту информацию для того, чтобы сделать ретроспективный анализ всего года. Для этого просто открываешь 13 месячных файлов, читаешь описание и получаешь четкую картину всего года. Так как это Org Mode файл, то менять статусы задач можно используя быстрые клавиши. Для этого поставьте курсор в строку с соответствующей задачей и нажмите Alt+RightArrow (или выполните команду Org: Increment Context) или Alt+LeftArrow (Org: Decrement Context). Эти команды поменяют статус задачи на следующий (предыдущий) в списке. Шаг-за-шагом, мы подходим к моему основному уровню планирования — неделя. Аналогично как в случае для года и месяца, в начале недели я копирую шаблон недели в директорию текущего года и переименовываю файл. Название файла имеет вид: год:месяц:неделя|W<номер_недели_в_году>.org. Например, для следующей недели файл будет называться: 2020:02:01|W05.org (это будет первая неделя во втором месяце, но в году это пятая неделя). Шаблон недели выглядит следующим образом:   Шаблон имеет три области: Давайте немного подробнее остановимся на метриках, которые я сейчас отслеживаю. Если с весом всё понятно (кто его не отслеживает теперь?), то вот с метрикой POMODORO могут возникнуть вопросы. На самом деле это одна из наиважнейших метрик, которая позволяет отслеживать мне мою продуктивность. Она показывает количество продуктивного времени, которое я потратил за день выполняя различные задачи. Для того, чтобы отслеживать это время я использую адаптированный метод помидора. Суть метода состоит в том, чтобы на определенное время (25 минут) полностью погрузиться в выполнение определенной задачи. После этого сделать перерыв на 5 минут. После 4 таких итераций сделать длинный перерыв на 15 минут. Во время работы нельзя отвлекаться ни на что другое, все мысли должны быть заняты решением одной задачи. Если ты отвлекся, то таймер надо запускать заново. Таким образом, этот метод позволяет тренировать сосредоточенность на одной задаче и силу воли, качества, которые вместе приводят к хорошим результатам. Я же немного модифицировал этот метод. В отличие от оригинального метода, я использую 4 разных интервала: 15, 30, 45 и 60 минут. Перед началом работы над задачей я оцениваю задачу и мое состояние. Если задача сложная, требует много времени чтобы полностью в нее погрузиться и сделать, то я выставляю таймер на 60 минут. Если задача короткая, то мне может хватить и 15 минут. Я обязательно стараюсь закончить задачу, даже если будильник уже прозвенел, что позволяет мне немного сэкономить время, так как после перерыва мне не требуется время чтобы снова вникнуть в контекст задачи, над которой я уже работал. Также длительность интервала зависит от моего самочувствия: если я уставший, то я выбираю меньшие интервалы, если у меня всё в порядке с энергией, то я работаю использую более длительные периоды.  Если я во время интервала я отвлекся по какой-то причине, то этот интервал не идет мне в зачет, и я запускаю таймер сначала. Если перерывов не было, то в файле я отмечаю, что работал это время. В конце дня я подсчитываю суммарное продуктивное время и записываю его. Так как моя работа довольно разнообразная (я выполняю очень разные задачи), то POMODORO — это основная метрика моей продуктивности. Она показывает, сколько времени в день я провел в состоянии потока. В шаблоне недели у меня имеется модель только для одного дня (область плана на день). Так как соответствие даты и дня недели в каждый год разное, то мне требуется каждую неделю модифицировать шаблон. Если бы я не проставлял для каждого дня дату, то можно было бы сделать один шаблон со всеми днями недели и использовать его. Но мне важно видеть дату, так что я каждую неделю совершаю следующую последовательность действий. Сперва, в первой строке этой области ввожу дату понедельника. Для этого я использую комбинацию быстрых клавиш Ctrl+Alt+O T (или можно выполнить команду Org: Timestamp). Эта команда вставляет на место курсора текущую дату, например . После этого я выделяю всю эту область и дублирую этот блок 7 раз (используя Ctrl+Alt+DownArrow). После этого, я модифицирую даты дней используя горячие клавиши Alt+RightArrow (команда Org: Increment Context) и Alt+LeftArrow (команда Org: Decrement Context). После этих нехитрых действий у меня готова заготовка на неделю. Те же горячие клавиши для дублирования блока Ctrl+Alt+DownArrow и Ctrl+Alt+UpArrow я использую для того, чтобы продублировать заготовки для задачи. С использованием таких трюков, управление временем/задачами не отнимает у меня много времени. Хотя, возможно, в будущем я напишу какую-то программу, которая будет автоматически создавать все эти заготовки автоматически. В каждый момент времени, я хочу чтобы у меня перед глазами был список задач и привычек для текущей недели и месяца. Поэтому мое окно VSCode разделено на две части: в правой отображается список задач на месяц, а в левой — список задач на неделю:  Так как в плане на год у меня отражены больше цели нежели задачи, то у меня нет потребности в том, чтобы постоянно видеть их перед глазами. Я просматриваю этот файл время от времени, чтобы удостовериться, что я иду в верном направлении. К сожалению, расширение Org Mode для VSCode сейчас практически не поддерживается. Последний коммит был в апреле 2019 года. И хотя я не вижу критических проблем, которые бы мне мешали использовать это расширение, все же хотелось бы чтобы пару улучшений разработчики в него добавили. Первое, хотелось бы использовать улучшенный трекинг времени по задачам. Сейчас, когда начинаешь работать над задачей, можно нажать Ctrl+Alt+O Ctrl+I (или выполнить команду Org: Clock In) и расширение проставит временную метку начала работы над задачей. После того, как окончил работу, можно нажать Ctrl+Alt+O Ctrl+O (или выполнить команду Org: Clock Out), чтобы проставить метку окончания работы. После этого, если нажать Ctrl+Alt+O Ctrl+U (или выполнив команду Org: Update Clock Total), Org Mode автоматически рассчитает время работы над задачей. Таким образом, можно трекать сколько времени потрачено на определенную задачу. К сожалению, сейчас эта функциональность в VSCode Org Mode работает довольно криво. Например, нельзя определить суммарное время, если ты работал над задачей несколько раз. Более того, все еще остается неисправленным баг учета времени, если работа начата и закончена в разные дни. Второе, было бы прекрасно иметь возможность посчитать автоматически всё затраченное время по проектам и вывести статистику (насколько я знаю, в emacs это можно сделать). Третье, кастомные статусы задач сейчас отображаются с использованием одного и того же стиля. Хотелось бы, чтобы была возможность задавать свои стили для статусов. В начале статьи, я дал ссылки на репозиторий этого расширения, так что я бы был благодарен, если бы кто-то реализовал эти изменения. Если же кто-то их уже сделал, то дайте, пожалуйста, ссылку на обновленное расширение. Мне потребовалось очень много времени и попыток, чтобы прийти к этому решению, которое я теперь постоянно использую для управления временем/задачами. Поэтому я надеюсь, что мой опыт окажется для кого-то полезным и, глядя на этот пример, кто-то начнет заниматься планированием. Всем продуктивного времени суток! Исследователь