まずタスク管理には二種類あります。チームレベルのタスクを皆で管理するチームタスク管理と、単に自分のタスクを自分で管理する個人タスク管理です。本記事では個人タスク管理の話をします。以降ではタスク管理 = 個人タスク管理と考えてください。
タスク管理を行うには、何らかの「整然としたフレームワーク」が必要であり、かつそれに愚直に従う行動力も求められます。とても難しいことです。エンジニアに限らず、社会人の 95% には到底できないことです。
たとえば GTD® を思い返してください。GTD は、言ってしまえば「9 個の箱」と「6 つの視座」を使い分けるフレームワークです。上手く使えれば日々のタスクから人生の長期的な目標、はたまた己の哲学から「やりたいことリスト」まで、すべてを死角なく、整合性を持って管理できます。しかし、解説本は数百ページにもなりますし、そもそも®であってオープンでもありません。こんなものを習得するのはほぼ不可能ですし、できたとしても、実際に毎日実行するには相当な体力とメンタルを要します。
タスク管理は難しいのです。ですので、現実的には、私たちは忙しい環境に身を置いて、環境の流れに従うだけでうまくいくようにします。これほど技術と方法論の整った現代であっても、未だに出社回帰が叫ばれるのも、まさにそういう理由です。余談ですが、これを 雰囲気リマインド(Atmosphere Remind) と呼びます。環境がもたらす雰囲気が、次何するかをリマインドしてくれるわけです。
そこで、できるだけ軽量にして、少しでも実践しやすくすることを考えます。それが 軽量タスク管理(Light-weight Task Management) です。
軽量タスク管理では、かんたんなフレームワークと目安だけを与えます。あとは利用者の運用に任せます。
一番わかりやすい例はポモドーロ・テクニックでしょう。実は結構重量のあるメソッドなのですが、軽量にとらえることもできます。キッチンタイマーを用意して、25分でセットして作業をし、その後 5 分をセットして休憩する――。このサイクルを繰り返すだけです。細かい運用は、皆さんの側で調整すればいい。たとえば私は、2~3サイクルごとに、長めの休憩を入れます。
本記事では、軽量タスク管理の一つである HQRST を紹介します。
これは私がナレッジ・アーキテクトとして開発したものであり、基本的なデータ構造を使います。エンジニアの皆さんであれば容易に理解できるはずです。
HQRST では、タスクに応じて以下の 5 つの構造を使い分けます。
| 構造 | 用途 | |
|---|---|---|
| Hash | 観点ごとの入れ物を用意する。入れ物はフラットに並べる | よく使う情報の整理 |
| Queue | 先に入れたものが先に出てくる | 緊急性はないが、必ずやりたいタスクの処理 |
| Random | 情報を一つの箱に詰める。取り出すときは常にランダムに一つずつ | 正解がないときの取っ掛かりを探す |
| Stack | 先に入れたものが後に出てくる | 割り込みタスクの処理 |
| Tree | 階層 | たまに or 稀に使う情報の保存(アーカイブ) |
よく使うものは Hash として、フラットに持ちましょう。それ以外は Tree としてアーカイブ的に扱います。
よくあるアンチパターンは「よく使うものを Tree で階層的に管理したがること」 ですが、これは完全に非効率的です。しばしば整理が目的になったり、後々ノイズになります。Hash で十分です。観点ごとに入れ物を用意して、入れ物はフラットに並べる。これで十分です。これで処理できないとしたら、それはあなたの処理能力の限界だということであり、仕事量自体のコントロールに手をいれるべきです。
Must なタスクはよくあります。タスクには Must も Want も Should もすべて含まれますが、仕事においては「やると決めた」こと、つまり Must なタスクだけがタスクであると扱われることも多いです。
さて、Must なタスクは、どのみちやらないといけないのですから、シンプルに管理して優先順位をつけて漏れなく行うのがベストです。Stack と Queue で十分です。
具体的な運用を見ていきましょう。
基本的には先着順が望ましいです。つまり Queue で管理します。しかし、割り込んでくることがあるので、Stack に入れて管理しましょう。Stack は LIFO なので、後から割り込んできたものが先に対処されることになります。
問題はここからです。Queue と Stack をどう組み合わせるかは、腕の見せ所です。システム設計に携わる人なら日常的な作業でしょう。
以下は比較的単純な例です。
--> Stack1 --+--> Stack2 (High-prio)
|
+--> Queue1
|
+--> Queue2
経験則として、思っているよりも単純にした方がいいです。このシステムを動かすのは人間である私たち自身なので、煩雑だと形骸化します。
残る一つが Random ですが、これは言ってしまえばくじ引きです。日本ではガチャ(ガチャポン)の概念があり、ランダムに何か一つ出てくるという体験は極めて日常的でありながら、ソシャゲ(ソーシャルゲーム)にも取り入れられているように巨額の富さえ生みます。
Random はただの集合(Set)構造ですが、取り出すときは常に一つずつ、かつランダムに取り出されます。
タスク管理では役に立たないと思いがちですが、締切や正解がないような状況で、かつ多数の「やりたいこと」や「ネタ」がある場合に重宝します。つまり、Random にネタを入れておいて、引けばいいのです。くじを引くみたいに。
実は HQRST に相当する製品は ありません。
ご自身でつくってください。本記事では個人タスク管理の話をしていますから、ウェブアプリやスマホアプリほど本格的に開発する必要もありません。コマンドラインツールで十分ですし、手作業を許容するなら VSCode + Markdown ファイルなどで原始的に管理してもいいでしょう。もちろん、Tree や Queue についても、OS デフォルトのファイラーか、あるいはクラウドストレージで十分です。
タスク管理は人類の「未解決問題」でもあるため、事業化前提で HQRST のアプリをつくるのもアリかもしれません。私はオープンなので、HQRST の権利は主張しません(クレジットを出していただけると嬉しいですが)。どうぞご自由にお使いください!
軽量タスク管理として HQRST を取り上げました。
といっても単純な話で、Stack や Queue、Tree や Hash などエンジニアにはお馴染みのデータ構造の使い方を少し述べただけです。
私はナレッジ・アーキテクトとして、このような実用的な概念(ナレッジと呼びます)をつくっています。他にも様々な概念をつくっているので、よろしければ見に来てください。