見出し画像

コンピューターサイエンスに学ぶ!タスク管理が上手い人になる秘訣

我々もコンピューターもできるだけ効率的にタスクを完了させなければならないという部分において似通った立場にあります。

そしてコンピューターは、より多くのタスクを短時間でこなすために開発された技術の結晶です。

アルゴリズムの仕組みを紐解いてみると、タスクを効率的に処理するためのさまざまな工夫や知恵があり、それらは私たちのタスク管理に応用できるものでした。

タスク管理が上手くなりたいと考えている方々(私も含めて)の参考になれば幸いです。


コンピューターにもタスク管理が必要

1997年、NASAがディスカバリー計画の一環として探査機を火星に送り込みました。火星探査機は約1万6000枚もの写真と大気や岩石のデータを大量に送信することに成功します。

しかし、すべてが順調というわけではありませんでした。

探査開始から数日後、探査機がシステムのリセットを繰り返すようになりました。大量のタスクを一度に実行しようとしたことが原因です。システムにはスケジューラという機能があり、処理の負荷を分散させる役割があります。

つまり、人間よりも圧倒的な処理能力を持つコンピューターでさえ、スケジューラ(タスク管理の仕組み)がなければ、作業が進まなくなるのです。

生産性を上げるために、コンピューターのアルゴリズムにはさまざまな工夫が加えられています。それらの工夫は、私たちが普段行っているタスク管理に活かせるものばかりでした。


タスクは優先順位よりもまず減らす

タスクを書き出したら優先順位をつけましょうというアドバイスをよく見かけます。しかし、タスク数が膨大な場合に限ってはそうではありません。

なぜなら、タスクの実行スケジュールや順番を考える時間が爆発的に増加していくためです。思考に時間が取られて、作業時間がどんどん短くなってしまいます。

2003年、Linux(WindowsやMacといったOSの一種)に同様の問題が起きました。スケジューラーというアルゴリズムが各タスクに割り当てる処理時間を見積もっていましたが、見積もりの方がタスク実行よりも時間がかかってしまい、処理が進まないことが原因でした。

この手の問題をQuadratic time complexity O(n2)と言います。インプット(タスク数)に対して処理時間が2乗で増えていくような処理のことです。

例えば、男女のマッチングを考えてみてください。マッチングの組み合わせは「男性の人数×女性の人数」になるため、男女のカップル数に対して組み合わせ数は2乗で増えていきます。

Quadratic time complexity
指数関数的に増加していく

私たちが普段行っているタスク管理にも同じことが言えます。人間の脳はコンピューターよりも柔軟ですが、処理スピードに劣ります。タスクAとタスクBどちらを優先すべきかをいちいち考えるのはけっこう負担がかかるものなのです。

これは実体験なのですが、タスクがありすぎて優先順位を考えるのも面倒なときは、「今日入ってきた仕事は明日やる」というスタンスで仕事をすると非常に楽です。

【考えすぎないMy仕事術】
1. 今日やるタスクを書き出す
2. 依頼できるものはパス(デザイナー制作等)
3. すぐ終わるものから手をつけていきタスク数を減らす
4. 今日発生したタスクはリストに追加して明日以降に実施
※但し、上長やクライアントに関わるタスクはすぐやる

まずはタスク数を減らすことを最優先にすることで、仕事が前に進んでいる感覚が得られ、モチベーションも高まります。タスクに振り回されがちな人(過去の自分)にはかなりオススメです。


割り込みタスクはなるべく待たせる

タスクの中断や割り込みは生産性を阻害するど真ん中ストレートな課題です。なぜなら、割り込みタスクに必要な情報を調べ直すなどの作業コストが発生しますし、タスクを切り替える際に集中力も切れてしまうからです。

コンピューターもタスクの割り込み(中断)でパフォーマンスが低下します。重要なポイントは、即応性と生産性はトレードオフの関係にあるということです。「これやっといてくれない?」に即座に対応してくれる人の評価は確かに高いでしょう。しかし、対応してくれた人の生産性は確実に犠牲になっているのです。

つまり、他人からの依頼をホイホイ受けていると、重要なタスクがどんどん後ろ倒しになり、最終的に自分が全体のボトルネックになってしまうということです。良かれと思ってやっているのに世知辛いですね。

コンピューターはこの問題に対応するためInterrupt coalescingと呼ばれるテクニックを使っています。要するに追加タスクを一定時間待たせることで、目の前のタスクに集中して取り組むというものです。具体的には、タスク量が一定量貯まるまで待つとか一定時間別のタスク割り込み禁止といったものがあります。

その中でも現実的だと思ったやり方は、割り込みタスクをどれだけ待たせられるかでグルーピングすることです。例えば、急ぎではない割り込み(例:確認作業など)は待たせる(後でやる)、逆に上司やクライアントからの依頼は割り込ませるといった具合です。

即応性と生産性どちらかを犠牲にするのではなく、どちらも許容範囲内に収まるような中間点を探してみてください。きっと良い結果につながると思いますよ!


気になることは頭に留めない

私が注意散漫の罠と読んでいるものがあります。「返信していないメールのことを思い出し、すぐ取り掛かる」「調べもの中、別のおすすめ記事が目に入り、なぜか読んでしまう」など、反射的に他に気を取られることです。

それらをグッと堪えて、目の前のタスクに意識を向けてもいいのですが、頭の中にそれらの思考が渦巻いていると集中できないこともあります。

コンピューターにも似たような問題としてメモリ不足があります。多くのアプリケーションを同時に動かすと、タスク実行のための作業スペースが手狭になり、処理速度が極端に低下することがあります。

メモリ不足の応急処置として仮想メモリが用意されています。仮想メモリとはコンピューターのストレージ(HDDやSDD)の一部をメモリとして代替することで、パフォーマンス低下を防ぐことができるというものです。

タスク管理における仮想メモリはポストイットやメモ帳に相当します。アプリでもいいですが、サッと使えるのが理想です。仕事中に思い出したことやアイデアなどの”雑念”は、一旦何も考えずにメモし、後で時間があるときに整理します。瞑想したかの如く頭が整理され、スッキリするのでぜひ試してみてください。


タスク情報を参照しながらチャット

チームのタスク管理をしているとき、地味にストレスに感じていたことがあります。それは、「プロジェクトAの○○タスクのことなんですけど…」と毎回チャットに前置きを書く必要があることです。

私は普段、チャットアプリでタスクの依頼やフィードバックをしているので、過去のチャットを引用したり、必要なデータを引っ張ってきてリンクを貼るという作業は常に発生します。

課題の本質は、連絡や議論する場(要はチャットやメールなど)に必要なデータが揃っていないことです。タスクの進行管理をするスプレットシートや議事録、チャット履歴などがそれぞれ別の場所に散在しているため、毎回わざわざデータを取りに行かなくてはなりませんでした。

ビッグデータの世界でも同様の問題が発生します。データは分割されて複数のコンピューターに分散して保存されているので、ネットワークを介して「大容量の分散データを取得→結合」という処理が毎回行われることになります。これだとネットワークに負担がかかりますし、処理結果を得るまで時間がかかってしまいますね。

データ取得からの処理だと時間がかかる
データ取得からの処理だと時間がかかる

この問題を解決する概念がdata localityです。data localityとは、データをわざわざ自分の手元に持ってくるのではなく、データの近くで処理しようという考え方です。

具体的には、プログラム処理を記述したデータをデータベース側に送り、データベース上で処理を実行します。これだとネットワークの負荷が少なくて済みますし、処理結果もすぐに手に入ります。まさに逆転の発想と言えますね。

プログラムをデータベースに送ることで処理時間を大幅に短縮できる
プログラムをデータベースに送ることで処理時間を大幅に短縮できる

この発想はタスク管理にも応用できるのではないでしょうか?データの近くでコミュニケーションを取ることができれば、データを確認しに行く必要がなくなります。実際に私はNotionを使っていました。

タスク管理のデータベース上でタスクの進捗状況を管理しているのですが、各タスクには詳細ページがあります。タスクの要件や資料、期限などの情報をすべて1ヶ所にまとまっています。

さらに詳細ページにはチャット機能もついているため、タスクの依頼や修正のやり取りはそこで行っていました。この方式を採用してからは「○○タスクの件ですが…」といった前置きが省けるため、タイピングが劇的に楽になりました。

タスク情報の集約とチャットは同じ場所で行う
タスク情報を参照しながらチャットができる

チャットの待ち時間を仕組みで解消

地味に大きな間接コストと言えば社内チャット。私はマーケティング担当だったので、キャンペーンやサービス内容についての質問が他部署からも多く寄せられていました。

質問してもらうのは構わないのですが、質問の意図が分からなかったりすると余計にチャットの往復が発生するので、なるべく効率化したい業務ですね。

文句はそのへんにして、この手の質問系タスクについて考えてみましょう。タスク完了のボトルネックは”待ち時間”です。なぜなら、チャットやメールは自分の好きなタイミングで返信できてしまうためです。

実はITの世界でも”待ち時間”は大きな問題です。もしYouTubeが動画データをダウンロードしてから視聴開始する形だったらどうでしょう?視聴までかなり待たされますよね?

これはデータを先に読み込むことで解決しています。ダウンロードしながら再生すれば、待ち時間を大幅に削減できるからです。具体的にはPrefetchingやBufferingと呼ばれる技術が該当します。

質問系タスクも必要情報を事前に”読み込めば”良いのです。具体的には、社内問い合わせフォームに質問を投げてもらう形にします。質問項目を用意しておけばコミュニケーションの抜け漏れがなくなるため、うまく行けば1往復でやり取りを終えることができるはずです。

【社内問い合わせフォームの項目例】
・件名
・求めていること/困っていること
・質問の背景を教えてください
・いつまでに回答が欲しいですか?

実体験をお話すると、とあるエンジニアチームのリーダーは他部署からの質問を受け付けるワークフローを用意しており、質問の詳細を前もって聞き出してから処理していました。質問する側は多少大変ですが、どうせ聞かれるので良い仕組みだと思います。


面倒に感じている日々の業務を教えてください

コンピューターは人間のように柔軟には働いてくれません。そんな機械を効率的に動かすためにさまざまな工夫や知恵がアルゴリズムという形で実装されています。そしてそれらの仕組みには、タスク管理のヒントが溢れていました。

当ブログはこれからも生産性アップのための知見を新しい切り口で提供してきます。タスク管理やプロジェクト管理についての課題をシェアしていただけると今後のモチベーションにつながります!今後とも引き続きよろしくお願い致します!

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?