本ページでは、自分の時間管理術をメモしておく。 基本的には「エンジニアのための時間管理術」をベースに、中身を自分流に改造したものになっている。
対象読者は、残業したくないエンジニア向け。 このページを読む前に、「エンジニアのための時間管理術」まとめを読んでおくことを推奨する。
1日の最初には必ず計画を立てて、必ずその計画に従う。 全ての計画外の行動は、「計画を立てること」「計画を変えること」だけにする。
予想外の事態が発生して、計画がうまくいかなくなりそうな時は、まずは計画を変更する。
計画は記憶するのではなく、記録する。 自分の脳を信用してはならない。
また、記録媒体は必ず1つにまとめる。 分散してしまっては記録媒体の存在自体を忘れる可能性がある。
集中を要する作業は、適切な時間帯に、適切な長さで実行するようにする。 集中している時間は、エンジニアにとって最も価値の高い時間であるため、うるさい通知はあらかじめ全て切っておく。
適切な時間帯や長さは人によって変わる。 自分の場合は、一番集中できるのは深夜なので、勤務時間中には適切な時間帯の恩恵を受けられない(泣)。 ただし、1つの作業のはできるだけ見積もり時間が30分以下になるように分割している。
休憩は必ず取り組んでいる作業が終わってから行う。 ミスの原因になるため、作業を途中で中断してはならない。 作業時間が集中時間よりも長い場合は、作業を分割することを検討する。
時間管理術という技術はゲームのRTAなどと同様で、パフォーマンスの改善に終わりがなく、常に改善していかなければならないものである。
改善するためには現状を把握して、改善点を見つける必要がある。 そのために、各作業の計画のみならず、何時何分に開始して、何時何分に終了したかという実績を記録しておく。
ここで紹介する時間管理術では、次の3つのツールを使用する。
カレンダーは、開始時刻と終了時刻が定まっているものを記録するのに適していることから、過去&未来のイベントと、過去の作業実績を記録するのに相応しい。
イベントとは、予め開始時刻と終了時刻が定まっている約束事であり、MTGなどがこれにあたる。 カレンダーにゴミがたまらないように、定期的に未来の不要なイベントを削除したり、出ない会議にNOを記しておく。
また、作業が完了した時には、ある程度時間をかけた作業を普通のイベントとは異なる形でカレンダー内に記録する。 これにより、作業実績を記録することができ、1日の仕事内容を消費時間と共に振り返ることができる。 また、退勤する時にぎっしりと詰まったカレンダーを見ることで達成感を得られる。
自分はGoogle Calendarを使っている。 iCalの購読リンクを登録することで、プライベートのカレンダーも一緒に表示できるようにしている。
ガントチャートは、週単位の作業計画の記録に用いる。 複数のプロジェクトが並列で進行していたりすると各プロジェクトの進捗や計画はカレンダーだけではとても管理できないので、ガントチャートが必要となる。
ここで使うガントチャートは以下の要件を満たさなければならない。
今週については、1日ごとの合計見積時間がなるべく正常で均等になるように計画されていなければならない。 ただし、それ以降の週については合計見積時間は気にせず、タスクが実行順序通りに配置されていれば良い。 あまり先の計画まで緻密に立てても、計画はどうせ変わるので無駄。
自分はjiraのstructureを使っている。死ぬほど使いにくい。
ガントチャートの例
プロジェクト | タスク名 | 見積時間 | 7月 | … | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | ||||
ProjectA | 機能AXを実装する | 4h | 2h | 2h | |||||||||
機能AYを実装する | 2h | 1h | 1h | ||||||||||
テストする | 1h | 1h | |||||||||||
ProjectB | 機能BXを実装する | 5h | 1h | 1h | 2h | 1h | |||||||
機能BYを実装する | 3h | 1h | 1h | 1h | |||||||||
テストする | 2h | 2h | |||||||||||
合計時間 | 3h | 3h | 3h | 3h | 2h | 3h | … |
今日の作業計画や、明日以降の単発作業(ガントチャートにないタスクの作業)の計画を記録するために、毎日の作業リストを用いる。
毎日の作業リストには、今日以降の1日ごとについて、その日の作業リストを記録できるような媒体を使う。 リストの1項目の情報として最低限、優先度、見積時間、1行程度の作業概要の3つを記録できなければならない。
自分はsuperProductivityを使っている。改善の余地はある。
毎日の作業リストの例
2024/07/07の作業リスト | 2024/07/08の作業リスト | 2024/07/09の作業リスト | … | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
優先度 | 見積時間 | 作業概要 | 優先度 | 見積時間 | 作業概要 | 優先度 | 見積時間 | 作業概要 | |||
A | 1h | バグを修正する | A | 5m | 竈門さんに返信の催促をする | A | 5m | 部品を発注する | |||
B | 30m | 佐藤さんに返信する | |||||||||
… |
実際の1日の流れとしては、次のようになる。
もし今日が月曜日ならば、まずは今週やることを決める必要がある。 これにはガントチャートを用いる。
まず最初に、ガントチャートの今週の1日ごとの合計見積時間を確認する。 もし自分の総作業時間よりも大きい日があれば、その日のタスクを次の日にずらすことで、今週の全ての日の合計見積時間が総作業時間内に収まるようにする。 できるだけ関係者が少なく、期限がない、もしくは期限が遠いタスクをずらすようにする。
ずらすことでタスクが来週へ持ち越しになった場合は、そのプロジェクトの来週以降のタスクも全てずらす。 このとき、プロジェクトやマイルストーンの完了がデッドラインを超えそうなのであれば、今日の作業リストに「プロジェクトの関係者に遅延する可能性を連絡する」を追加する。
ずらしを繰り返して今週の全ての日の合計見積時間が総作業時間内に収まったら、今週の計画は完成となる。
今週の計画が完成したら、次は焦点を今日1日に絞って、さらに詳細な計画を立てる。 ここでは、カレンダーやその他様々な情報源からの情報をもとに、今日1日分の作業リストを次の手順で作成する。
作業を分割する時には、時間単位で分割するのではなく、自分の連続集中時間に収まるような作業の節目を見つけて細分化を行う。 時間単位で分割してしまうと、中途半端なところで作業を中断してしまうことになり、作業再開時のミスが増える可能性がある。
今日の総作業時間を保証し、突発的なイベントによる作業時間の減少を防ぐためには、計画の段階で、Google CalendarのFocus timeのようなイベントを今日のスケジュールに配置しておくと良い。
今日の作業リストが仕上がったら、下図のフローチャートの通りに計画を実行していく。
作業を行う前には、slackやメールなどの通知は全てOFFにする。 ただし、カレンダーのイベントの通知だけはONのままにしておく。 YESを返答したイベントは、欠席してはならないし遅れてはならない。
上のフローチャートには、退勤の文字が書かれているが、残念ながら私はこのフローを実践していて、まだ退勤に到達した経験はない。 なぜなら作業リストを空にする前に定時がやってくるためである。
仕事よりプライベートの方が大事なので、定時がやってきたら作業リストの残りの作業は明日へ持ち越す。 そのために、残っている作業を明日の作業リストへ移動させ、必要に応じてガントチャートを更新する。
もし今日中に終わらせなければならない作業が作業リストに残っているのであれば、次の2つのオプションを検討する。 基本的に、1日の計画の時点で作業リストの並べ替えが正しくできていれば、このようなことにはならないはず。