読者です 読者をやめる 読者になる 読者になる

社会システムや業務の改善にソフトウェア開発的思考を用いる

ソフトウェア開発、すなわち、アジャイル開発プロセスアーキテクチャ設計、UXデザインなど、における発想をソフトウェア開発以外に用いても役立つことは多い。

少し前になるが、ある事業の相談を受けたことがある。ここではそれを架空のコンビニ事業に置き換えて説明しよう。架空なので、現実的ではない部分も多いが容赦願いたい。

コンビニ各社は店舗で買い物するのが出来なかったり、店舗を訪れるのが面倒に感じる顧客のためのデリバリーサービスを持っている。このデリバリーは実際はいわゆる通販であり、宅配ピザのように短時間で配達されるものではない。だが、ここでは例として、コンビニがある特定の商品に限っては極めて短時間で配達するというサービスを展開していると仮定する。また、(出来るだけソフトウェアとは遠い処理の例にするため)注文はコールセンターで電話で受けるものとする。

この短時間での配達を約束している特定商品を「アルコール飲料A」とし、配達サービスエリア内であれば5分で配達することをコミットしているとする。5分でなくても、3分でも10分でも良いのだが、普通に考えると実現が難しいような時間を想像して欲しい。

おそらく普通のオペレーションはこうだ。

  1. 顧客がコールセンターに電話をかける。
  2. コールセンターのオペレーターが電話を受ける。ここから5分以内に配達を完了させるというタイマーがスタート。
  3. オペレーターはコンビニデリバリーのコールセンターであることを伝え、顧客の住所や氏名を確認する。
  4. オペレーターは顧客からの注文を受ける。
  5. オペレーターは顧客に注文を再確認する。
  6. オペレーターは顧客との電話を終了し、注文をシステムに入力する。
  7. 注文に「アルコール飲料A」が含まれていた場合は、その商品だけを別便で至急届けるように、店舗または配達員に通達する。
  8. 配達員により顧客宅へ配達される。

わざと少し冗長にしたが、まったく最適化をしていない場合はこのようなオペレーションになっていてもおかしくない。

このコールセンターと顧客との対話やコールセンターからシステムへの入力、さらにはシステムから配達員に連絡され、配達が完了するまでの流れは、ウェブシステムにおけるブラウザとサーバー、そしてバックエンドからDBにデータがエントリーされ、処理が完了するまでと極めて類似性が高い。

処理速度が最優先されるシステムであれば、多少のコストは許容される。となると、少なくとも次のような最適化は考えられる。

オペレーターは顧客の住所を確認するのと同時に、「アルコール飲料A」が含まれているかどうかを確認する。ここで、もし含まれていた場合には、それをシステムに入力し、その地域の配達員に短時間配達のリクエストが入ったことを伝える。配達員はその商品の手配と顧客宅までの最短ルート確認、場合によっては実際に移動を始められる。その後に、オペレーターは氏名や他の注文を確認すれば良い*1。もしかしたら、その後の顧客とオペレーターとの対話で注文が取り消されるかもしれないが、処理速度を最優先する場合にはこのくらいの無駄は許容する*2

この高速化技法はブラウザのプリフェッチの処理と同じだ。見ているウェブページにURIが埋め込まれていたら、それらをバックグラウンドでDNSプリフェッチ*3し、ユーザーがクリックする前に名前解決は済ませておく。Chromeでは検索結果からの表示の場合にはバックグラウンドでレンダリングまで済ませておくこともある*4。もしユーザーがそれをクリックしなかったならば無題になる処理であるが、高速化がそのコストよりも優先される場合にはこのような選択がされるのだ。

配達がどのように行われるかは、在庫をどこに置くかと、配達員がどのように配置されているかに関係する。簡略化のために、配送センター → 店舗 → 配送車または配送バイクという流れで商品は流れていくものとする。配送車が担当エリアを常に回遊し、必要な在庫を常に積んでいることがもっとも速く配達を完了することに繋がるが、この設計はキャッシュヒット率を高め、ディスクのシーク時間を短くすることと同じだ。配送車の配置と店舗により在庫を補充するタイミングが鍵となるだろう*5

このような最適化は机上でシミュレーションすることも可能だ。その結果を見て、さらに最適化の余地が無いかを考えると良い。実際、GoogleChrome OS/Chromebookを発表した際に、蓋を開けてから10秒でインターネットにアクセスできるようにすることを宣言したが、そのためにはファームウェアからChromeの起動プロセスに至るまで多くのところでマイクロ秒の最適化を積み上げて、その10秒を実現した。

社会システムや業務においてもこのようにソフトウェア開発的思考が活かされることは多い。ソフトウェア開発経験のある人は、開発以外の身の回りのオペレーションもソフトウェア開発的視点で見直してみよう。もっと最適化できるところもあるだろう。

*1:間に合えば、他の商品の配送も配達員に伝えれば良いし、そうでなかったら別便とする

*2:投機的実行

*3:DNS プリフェッチの制御 | MDN

*4:インスタントページ - Google Japan Blog: 検索をもっと便利に、もっと速く

*5:ここには宅配業者にすでに確立されたノウハウもある