リソースを使い切らない
余白の価値についてはなんとなくわかったけど、やることが明確に定まっていて変化しないなら、リソース効率を突き詰めたほうがよいのでは? と疑問を持たれるかもしれません。
では、あなたが開発しているシステムで考えてみましょう。もしシステムのリソースを100%使い切るとしたらどうでしょうか。
CPU使用率でも考えてみましょう。サーバーのCPU使用率が常に100%に張り付いていたら、新しいリクエストが来ても処理が追いつかず、タスクは待ち行列に積み上がっていきます。結果としてレスポンスは遅くなり、利用者から見ると「動かないシステム」になってしまいます。
メモリについてはどうでしょうか。プログラムが必要以上にメモリを確保し続けると、やがてガーベジコレクション(GC)が発生しやすくなります。GCは健全性を保つために不可欠な仕組みですが、発動が多すぎればパフォーマンスは大幅に落ちます。
人間の脳とコンピュータは同一ではありませんが、処理能力には上限があり、上限付近で使い続けると、待ちや切り替えのコストが急増するという点は類似しています。情報や予定を詰め込みすぎると、切り替えや整理に余計なエネルギーを使わざるを得ず、本来の仕事に割けるリソースが減ってしまうのです。心理学のタスク切り替え研究では、作業を切り替えた直後に反応が遅くなり誤りも増えるスイッチコストが繰り返し観察されています。
この切り替えコストが増えると、1日の総作業時間が同じでも、成果物に変換できる時間が削られます。タスクAからBに移るたびに再理解・再計画・再探索が発生し、その分だけ純粋な前進が減るためです。結果として、単位時間あたりに終えられるタスク数、つまり実効スループットが下がりやすくなります。スループットが低下するため、結果として「待ち」が増えやすくなります。
待ち時間と仕掛の関係を捉える近似として、行列理論で有名な「リトルの法則」があり、
平均来客数(L)=到着率(λ)×平均滞在時間(W)
という非常にシンプルな式で表されます。これは、系が安定していて長期平均が定義できるときに成り立つ関係です。
銀行や病院の受付をイメージするとわかりやすいでしょう。1時間あたり10人が来る(λ=10)窓口に平均で30人(L=30)が滞留しているなら、一人あたりの滞在時間(W=3)は3時間になる、という具合です。
この法則は、広い条件下において行列の形や分布に依存せず成り立つ関係式として知られています。だからこそ、様々な分野に応用されています。エンジニアの仕事に近い形に言い換えると、
平均滞留時間=平均仕掛数÷平均スループット
となります。
「平均仕掛数」は並行して抱えているタスクの数、「平均スループット」は単位時間あたりに処理できるタスクの数と考えられます。つまり、WIP、同時進行のタスクが多ければ多いほど、1つのタスクが終わるまでにかかる時間は必然的に長くなるのです。逆に仕掛を減らせば、平均滞留時間は短縮されます。
これが「タスクを抱え込みすぎると全体の進みが遅くなる」理由です。そして、あえて余白を残し、仕掛数を制御することが、結果としてスループットを最大化することにつながるのです。
人間が予定を詰め込みすぎてしまうと、CPUに常に100%の負荷をかけ、タスクを待ち行列に積み上げるのと同様に、待ち時間や切り替えコストの増大を招きやすくなります。余白を残すことでWIPを減らし、スムーズなフローを取り戻すことができます。
今回の抜粋記事はここまでです。続きは書籍を確認いただけますと幸いです。ぜひ6月24日の発売日に書店でお手に取ってみてください。


