個人的時間管理術

本ページでは、自分の時間管理術をメモしておく。 基本的には「エンジニアのための時間管理術」をベースに、中身を自分流に改造したものになっている。

対象読者は、残業したくないエンジニア向け。 このページを読む前に、「エンジニアのための時間管理術」まとめを読んでおくことを推奨する。

1日の最初には必ず計画を立てて、必ずその計画に従う。 全ての計画外の行動は、「計画を立てること」「計画を変えること」だけにする。

予想外の事態が発生して、計画がうまくいかなくなりそうな時は、まずは計画を変更する。

計画は記憶するのではなく、記録する。 自分の脳を信用してはならない。

また、記録媒体は必ず1つにまとめる。 分散してしまっては記録媒体の存在自体を忘れる可能性がある。

集中を要する作業は、適切な時間帯に、適切な長さで実行するようにする。 集中している時間は、エンジニアにとって最も価値の高い時間であるため、うるさい通知はあらかじめ全て切っておく。

適切な時間帯や長さは人によって変わる。 自分の場合は、一番集中できるのは深夜なので、勤務時間中には適切な時間帯の恩恵を受けられない(泣)。 ただし、1つの作業のはできるだけ見積もり時間が30分以下になるように分割している。

休憩は必ず取り組んでいる作業が終わってから行う。 ミスの原因になるため、作業を途中で中断してはならない。 作業時間が集中時間よりも長い場合は、作業を分割することを検討する。

時間管理術という技術はゲームのRTAなどと同様で、パフォーマンスの改善に終わりがなく、常に改善していかなければならないものである。

改善するためには現状を把握して、改善点を見つける必要がある。 そのために、各作業の計画のみならず、何時何分に開始して、何時何分に終了したかという実績を記録しておく。

ここで紹介する時間管理術では、次の3つのツールを使用する。

  • カレンダー: 過去の作業実績と過去&未来のイベントを管理する
  • ガントチャート: 長期的な作業計画を記録する
  • 毎日の作業リスト: 1日の作業の一覧を記録する

カレンダーは、開始時刻と終了時刻が定まっているものを記録するのに適していることから、過去&未来のイベントと、過去の作業実績を記録するのに相応しい。

イベントとは、予め開始時刻と終了時刻が定まっている約束事であり、MTGなどがこれにあたる。 カレンダーにゴミがたまらないように、定期的に未来の不要なイベントを削除したり、出ない会議にNOを記しておく。

また、作業が完了した時には、ある程度時間をかけた作業を普通のイベントとは異なる形でカレンダー内に記録する。 これにより、作業実績を記録することができ、1日の仕事内容を消費時間と共に振り返ることができる。 また、退勤する時にぎっしりと詰まったカレンダーを見ることで達成感を得られる。

自分はGoogle Calendarを使っている。 iCalの購読リンクを登録することで、プライベートのカレンダーも一緒に表示できるようにしている。

ガントチャートは、週単位の作業計画の記録に用いる。 複数のプロジェクトが並列で進行していたりすると各プロジェクトの進捗や計画はカレンダーだけではとても管理できないので、ガントチャートが必要となる。

ここで使うガントチャートは以下の要件を満たさなければならない。

  • 進行中プロジェクトの全ての未完了のタスクを同時に表示できる
  • 横軸(時間軸)の最小単位は1日として、各タスクを何日にやるのかということを明確にできる
  • 1日ごとに割り当てられているタスクの合計見積時間を表示できる

今週については、1日ごとの合計見積時間がなるべく正常で均等になるように計画されていなければならない。 ただし、それ以降の週については合計見積時間は気にせず、タスクが実行順序通りに配置されていれば良い。 あまり先の計画まで緻密に立てても、計画はどうせ変わるので無駄。

自分はjiraのstructureを使っている。死ぬほど使いにくい。

ガントチャートの例

プロジェクトタスク名見積時間7月
01020304050607080910
ProjectA機能AXを実装する4h2h2h
機能AYを実装する2h 1h1h
テストする1h 1h
ProjectB機能BXを実装する5h1h1h2h1h
機能BYを実装する3h 1h1h 1h
テストする2h 2h
合計時間3h3h3h3h2h 3h

今日の作業計画や、明日以降の単発作業(ガントチャートにないタスクの作業)の計画を記録するために、毎日の作業リストを用いる。

毎日の作業リストには、今日以降の1日ごとについて、その日の作業リストを記録できるような媒体を使う。 リストの1項目の情報として最低限、優先度、見積時間、1行程度の作業概要の3つを記録できなければならない。

自分はsuperProductivityを使っている。改善の余地はある。

毎日の作業リストの例

2024/07/07の作業リスト 2024/07/08の作業リスト 2024/07/09の作業リスト
優先度見積時間作業概要 優先度見積時間作業概要 優先度見積時間作業概要
A1hバグを修正するA5m竈門さんに返信の催促をするA5m部品を発注する
B30m佐藤さんに返信する

実際の1日の流れとしては、次のようになる。

  1. 1週間の計画を立てる (月曜日のみ)
  2. 1日の計画を立てる
  3. 計画を実行する
  4. 未処理の作業を明日へ持ち越す

もし今日が月曜日ならば、まずは今週やることを決める必要がある。 これにはガントチャートを用いる。

まず最初に、ガントチャートの今週の1日ごとの合計見積時間を確認する。 もし自分の総作業時間よりも大きい日があれば、その日のタスクを次の日にずらすことで、今週の全ての日の合計見積時間が総作業時間内に収まるようにする。 できるだけ関係者が少なく、期限がない、もしくは期限が遠いタスクをずらすようにする。

ずらすことでタスクが来週へ持ち越しになった場合は、そのプロジェクトの来週以降のタスクも全てずらす。 このとき、プロジェクトやマイルストーンの完了がデッドラインを超えそうなのであれば、今日の作業リストに「プロジェクトの関係者に遅延する可能性を連絡する」を追加する。

ずらしを繰り返して今週の全ての日の合計見積時間が総作業時間内に収まったら、今週の計画は完成となる。

今週の計画が完成したら、次は焦点を今日1日に絞って、さらに詳細な計画を立てる。 ここでは、カレンダーやその他様々な情報源からの情報をもとに、今日1日分の作業リストを次の手順で作成する。

  1. 作業を追加する
    1. カレンダーを確認し、事前準備が必要なイベントがある場合は、事前準備作業をリストに追加する
    2. ガントチャートを確認し、今日のタスク全てについての作業をリストに追加する
    3. slackやメールなどを確認し、対応が必要ならば、それを作業としてリストに追加する
  2. 優先順位などを鑑みて、優先度が高い作業がリストの最初に来るように並び替える
  3. 優先度の高い作業から順番に作業時間を見積もる
    1. 見積時間が自分の連続集中時間を越えるのであれば、作業を分割する
  4. 見積の合計時間が今日の総作業時間を超えた時点で、それ以降の作業を次の日の作業リストへ移動する
    1. 今日中に終わらせなければならない作業を移動させる場合は、関係者に遅れることを連絡する

作業を分割する時には、時間単位で分割するのではなく、自分の連続集中時間に収まるような作業の節目を見つけて細分化を行う。 時間単位で分割してしまうと、中途半端なところで作業を中断してしまうことになり、作業再開時のミスが増える可能性がある。

今日の総作業時間を保証し、突発的なイベントによる作業時間の減少を防ぐためには、計画の段階で、Google CalendarのFocus timeのようなイベントを今日のスケジュールに配置しておくと良い。

今日の作業リストが仕上がったら、下図のフローチャートの通りに計画を実行していく。

作業を行う前には、slackやメールなどの通知は全てOFFにする。 ただし、カレンダーのイベントの通知だけはONのままにしておく。 YESを返答したイベントは、欠席してはならないし遅れてはならない。

note:time-management-workflow.png

上のフローチャートには、退勤の文字が書かれているが、残念ながら私はこのフローを実践していて、まだ退勤に到達した経験はない。 なぜなら作業リストを空にする前に定時がやってくるためである。

仕事よりプライベートの方が大事なので、定時がやってきたら作業リストの残りの作業は明日へ持ち越す。 そのために、残っている作業を明日の作業リストへ移動させ、必要に応じてガントチャートを更新する。

もし今日中に終わらせなければならない作業が作業リストに残っているのであれば、次の2つのオプションを検討する。 基本的に、1日の計画の時点で作業リストの並べ替えが正しくできていれば、このようなことにはならないはず。

  • 関係者に遅延することを連絡する
  • 残業する (プライベートを犠牲にする最悪の選択)
  • Last modified: 3 weeks ago