本ページでは、オライリーの「エニジニアのための時間管理術」の内容をまとめる。 メルカリだと3桁で買えた。
対象読者は、IT技術者やシステム管理者などの、特にキャリアの浅い人となっている。 ただし、プログラマは別種の問題を抱えているので、プログラマの人は参考程度にする。
本文では、システム管理者(以下SA)特有の時間管理についての問題と解決策を述べており、具体的には以下のような内容を扱っている。 そのほかにも人生の長期的な計画や文書化、自動化などについても触れているが、本ページでは割愛する。
IT産業に従事する人にとってのタイムマネジメントは非常に難しい問題である。 プロジェクトを進めるためには作業に集中しなければならないが、集中を阻害する割り込みが絶えず発生するためである。(特にSAは)
割り込みは、作業の中断により生産性をひどく低下させる。 中断した作業を再開する際に、なにをどこまでやっていたのかを思い出す必要があり、また、このときに思い出し忘れるとアウトプットの品質を低下させかねない。
このような割り込みを鎮静化するために、同僚と相互不可侵協定を結ぶことで、集中しなければならないときには他の人へ割り込みへの対処を委ねることが有効である。
SAにとって、タイムマネジメントでは次の原則が重要になる。
邪魔なものを取り除き、割り込みに効率よく対処することで、作業に集中できる環境を作ることができる。
割り込みとは他人が自分の時間を支配することであり、タイムマネジメントにとっての敵である。 また、割り込みによって中断した作業を再開する際には、ミスを引き起こす可能性がある。 そのミスによって作業時間が本来よりも伸びる可能性も否定できない。
集中するためには、以下の施策が有効である。
人が訪ねてくるなど、それでも割り込みが発生した場合は、次のいずれかを使ってできるだけ早く時間の主導権を取り返す。
ただし、要求者との関係悪化を防ぐために、次のことに注意する。
また、要求は必ずオーガナイザに記録する。 決して記憶に頼ってはならない。 仮に要求を完璧に記憶できたとしても、その頭脳はもっと重要なことに使うべきである。
著者は割り込みとは話しかけられることを想定しているようだが、リモート勤務のときのslack通知などは基本的には作業中の割り込みは無視で良いと思う。
ルーチンとは「一度だけ考えて、何度も実行する」ための手段である。 繰り返し発生するタスクについて、いつやるのか、何をするのかなどの情報を事前に決定することで、そのタスクをルーチンとすることができる。
仕事、プライベートを含めて、日常のタスクをルーチン化することで、手間を省き、決断を下す時間を短縮することができる。
ルーチン化の例としては、以下のようなものが挙げられる。
ルーチンを作ることを検討するべき事柄の種類を以下に示す。
遂行能力とは、すべての要求を記録して、完了または拒否まで運ぶ能力である。 顧客やマネージャは遂行能力を高く評価する。
要求は頓挫させてはならない。 必ず、完了または拒否まで運ぶ必要がある。 顧客にとって、依頼したことが忘れられることほど腹立たしいことはない。
要求はオーガナイザーに確実に記録する。 要求を受けた時に手元にオーガナイザーが無いのであれば、メールやチケットなどを通じて要求を送信するように依頼しなければならない。 これにより、要求を忘れないようにする責任は顧客に転嫁できる。
サイクルシステムとは、筆者が長年かけて編み出した時間管理術の名称である。 全ての要求を記録して、それらを終了まで見届けることで、膨大な数の要求を整理、掌握することができる。 サイクルという名前は、毎日繰り返し実行され、1日の出力が次の日の入力となるようなシステムであることに由来する。
サイクルシステムで用いるオーガナイザーには、次の要素が必要である。
サイクルシステムの鍵を握るのは、1日毎の作業リストである。 全てのタスクを1つにまとめた「増え続ける破滅の作業リスト」は気が滅入ってしまうし、プロジェクトごとに分けてしまうとリストだらけになってしまう。 1日単位でリストを作り直すことで、1日の終わりに全てのタスクを処理したという達成感を得ることができる。
サイクルシステムでは、1日を1サイクルとして、それを毎日繰り返す。 1サイクルの内容を以下に示す。
1日の最初の10分は、必ず計画に使う。 出勤してまずやるのは、手順1,2,3の計画である。 電子メールやニュースサイトのチェックなどをしていたら、あっという間に数時間が経過してしまう。
以降では、オーガナイザが紙である場合について説明している。
まずはカレンダーを基に、今日のスケジュールを作成する。 1時間の会議が15時からあるのであれば、スケジュールのその部分を塞ぐ。
カレンダーの内容を全て反映できたら、塞がれていない時間の合計、つまり今日の作業時間を計算してみる。
作業リストに今日やるべきことを書き込んでいく。 リストの順番や、優先順位、所要時間の列は気にせず、タスク内容だけを書き込む。 他人に見せるものでもないので、説明は自分が思い出せる程度に書く。
作業のリストアップができたら、それぞれの所要時間を時間列に書き込んでいく。 合計が今日の作業時間を超えた場合は、次のステップで対処する。
以下に作成した作業リストの例を示す。本の引用ではなく、自分で適当に作ったものです。
済 | 優先順位 | 時間 | 項目 |
---|---|---|---|
15m | sdk update | ||
1h | ビルドエラー修正 | ||
30m | マウス動かぬバグ解析 | ||
5m | satou3 slack reply | ||
1h | 機能X実装 | ||
1h | GUIライブラリ調査 |
作成した作業リストの各項目について、優先度を割り当てる。 ただし、作業の優先度はこの世には次の3つしかない。
作業リストの合計時間が今日の作業時間を超えてしまっている場合は、次のいずれかのアクションを取る。
優先度A,B,Cの順に取り組んでいく。 同じ優先度同士の作業については、リストの上の方の作業から消化する。 リストの上の方の作業は昨日後回しにした作業であることが多い。
作業の前に会議や約束の時間を知らせるアラームを設定しておき、全能力を1つの作業に集中させる。
1つの作業が終わったら、続けて次の作業を開始する。 次の作業は優先度とリストの順番だけによって決定される。 リストを吟味して次に何の作業をしようかと悩んではいけない。
作業リストの項目が全部完了することは滅多にないが、その日中に作業リストの項目は全て処理されなければならない。
就業時間の30分前になったら、残っている項目を以下のいずれかのアクションを取ることで処理する。
これにより、すべての項目を処理することができる。
作業リストの全ての項目が処理されたため、達成感を感じながら帰ることができる。
毎日決まった作業時間をチケットの処理に充てることで、サイクルシステムとリクエストトラッキングシステムとの共存を可能にする。 これは、作業リスト作成時に、優先度Aの「チケット」という項目を追加するだけである。
同様に割り込みについても、作業リストに「割り込み」という項目を追加する。 これは単なるバッファであるため優先度はBであり、また、誰からも邪魔されなければ突っ立っている必要はない。
奇跡が起きて何もすることがなくなった場合は、自分にご褒美を与えなければならない。
プライベートの用件についても、作業リストに含めておけば、忘れなくて済む。 ただしプライベートな項目は、作業リストの下の方にまとめたり、カテゴリ分けしたりしておく必要がある。 そうでなければ、帰る前に全項目を処理したという達成感を感じることができなくなってしまう。