スイッチングコストについて真剣に考えてみる

2023/02/03に公開

はじめに

この記事は、プログラマーなら誰しも悩んだことがあるスイッチングコストについて私なりに考察した見解を述べ、読者に微妙な雰囲気のままブラウザバックしてもらうことを想定して書いている。
特に何かしらの答えを導き出しているわけではないのでご注意。

スイッチングコストとは?

ある作業Aをしていて、割り込み作業Bが発生したとき、再度作業Aに戻り、元の作業の流れを取り戻すまでに時間がかかる。一般的に20分程要するらしい。この時間のことをスイッチングコストと呼ぶ。
一言で言うと「その作業に対するエンジンがかかるまでの時間」とも言える。

これがスイッチングコストの一般的な意味だが、もう一つスイッチングコストだと思うものを紹介する。

例えばあなたはプログラマーで、あるプロジェクトに携わっているとする。
そんなあなたの午後からのスケジュールが次の画像で表されたとする。

そのとき、あなたの思考は?

  • 「合間の1時間だけでも集中しよう!」
  • 「頑張っても1時間しか集中できないなあ・・・」

私は断然後者だ。
こうなるとモチベーションが下がってしまう。
この中途半端な予定のせいで発生する、微妙に集中できない時間作業に集中するまでの時間がスイッチングコストだと考えている。

会議が終わってさぁやるぞ、でエンジン全開フルスロットルでバリバリコーディングできる強者には出会ったことがない。(そんなことないという人は是非その思考術を教えてほしい)
エンジニアにとってスイッチングコストとは、もっとも避けなければならない作業効率ダウンの要因の1つである。

なぜこんな思考になるのか

プログラマーではない人にとっては、この思考に「あるある」と共感できない人もいるのではないだろうか。
恐縮だが私の下手な例えを出させて頂くと、センター試験の英語科目の長文問題を想像してほしい。(今はセンター試験じゃなくて共通テストと呼ぶ?)
前半にある単語問題はその場その場で解いていけるが、長文問題はある程度時間をかけて臨まなければ解答することは難しい。長文問題を解くとき少し気合が必要なあの感覚。あの感覚が割とスイッチングコストの感覚と似ている(気がする)。

つまりプログラマーは長文問題に挑み続ける生命体な訳だが、彼らはよく思考の海に潜る。
プログラムは基本的に結果は同じでも、そこに辿り着くための道はいくつもある。その道を歩んだ時に発生するであろうエラーや、保守のしやすさ、最適なコードで実装できるかを一つ一つ考えていく。
この状態になればあっという間に時間は過ぎていく。
こうして思考を張り巡らせることで手戻りやバグの沼にハマらない様に気を付けており、深く深く潜った先で掴み取った唯一の答えを実装し終わった後に「仕様変更」という指示を聞いて特級呪霊に成りかけるなんてのはよくある話・・・いや、あってはならない(真顔)

つまり?

スイッチングコストがなぜ効率ダウンの要因なのか。つまりはこの思考の海に潜る時間が短くなる、あるいは無くなることに起因する。

1時間あったとして、思考の海に潜り始める前に全体像を把握、そして今すべきことが分かり、モンスターを買うかレッドブルを買うか悩み、思考に潜るための気合い溜めで20分、その後30分で思考がまとまったとしても、残り10分しかない。
思考がまとまって最高にボルテージがブチ上がっているたった今!手を動かそうと思いきや、会議室に移動し始める同僚や上司を目の端で捉えてしまったときには、そっとコメントアウトで考えを記しておくことしかできないだろう。
会議が終わって戻ってきても、先ほどのボルテージを取り戻すことはできないのに加え、どこまで考えて何から始めようとしていたかを思い出さなければならない。

そして一旦冷静になると先ほどの思考に穴があることに気づき、考え直すハメになることもしばしば・・・

どうしたらいいの?

私が聞きたいくらいである。
予定を入れているのが自分であれば調整し放題だが、そんな人はほとんどいないだろう。
仮に自分で予定を立てられたとしたら、最初に出した画像のスケジュールを、次のように調整すればスイッチングコストは最小限に抑えられる。

スイッチングコストについて調べていると良い記事があったので共有しておく。
開発するには半日単位のまとまった時間が必要とのこと。
https://www.blockchainengineer.tokyo/entry/makersschedule

まとめ

とはいえコーディング前に必ず思考するかと言えばそうでもなく、結局コーディングしながら考えることも良くあることだ。
最近スイッチングコストに悩むことが多かったので書いてみたが、文字ばかりで読みにくい内容になってしまった。

ところで、この記事を最後まで読んだ読者を微妙な雰囲気のまま見送ろうと思ったが、もしスイッチングコストに悩んでいたらこの記事を他者に共有し、プログラマーのスイッチングコストを理解してもらうための教材にして頂きたい。
ひいては全人類がスイッチングコストについて理解し、集中させる気が全く感じられないスケジュールがこの世から消え去ることを願って、終わりの言葉とする。
ありがとうございました。

Discussion