ある研究者の手記

セキュリティとかゲームとかプログラミングとかそのへん

自動化するときに考えるべきこと3つ

自分の経験を元にメモ書き。

1. 自動化の目的は「属人性排除」「ヒューマンエラーの除去」「高速化」のいずれか、もしくは全てである

属人性排除

「この作業は○○さんしかできないから」みたいなものをなくすのが属人性排除。 これは自動化することによって作業の一部、あるいは全てをほかの人でもできるようにすることで達成される。 職場における人の入れ替わりで秘伝の技が途絶えてしまったり、引き継ぎの労力を少なくすることによって 組織としての靭性を高めることができる。 また自動化する過程で、ある人物しか理解していなかったロジックや、そもそも作業をしている本人ですら説明できないような手順や理論を解き明かし、再現性のある形へ落とし込めるという副次的な成果がある。これが手順書という形だと解釈の違いによる間違いなどが発生する可能性があるが、コードによって自動化されていることで誤解を生む可能性を極小化する。(ただし0になるわけではない)

ヒューマンエラーの除去

プログラムによって自動化された作業でも当然例外やバグによって思わぬ挙動をすることがあるが、人間も言うに及ばずしょっちゅう間違いをおこす。 しばしば「集中力が足りない」「もっと注意する」「気合」などの精神論で解決できると信じている人がいるが、個人的な経験則でいうと、どれだけ注意深く作業したとしてもだいたい最低0.01〜0.1%程度の確率でミスをする。プログラムのバグの発生も同程度、あるいはもっと高い確率かもしれないが、最大の違いは(バグ修正すれば)プログラムは同じ間違いを二度起こさないことである。人間の場合、同じ人物が同じミスをしてしまうこともあるし、作業者が入れ替わると同じミスを起こすかもしれない。

高速化

単純作業やロジックが決まっているものについては、それを得意とする機械にやらせるべきである。

2. 自動化の目的は「コスト削減」であってはならない

よく「自動化によってコストが削減されます」という言い方がされているが、だいたいの場合こういうプロジェクトは失敗する傾向が強い。 これは、この文脈ででてくる「コスト」とはすなわち「人件費」のことであり、「コスト削減」といは「人員整理・リストラ」につながるからである。 多くの場合、自動化するためには今その仕事をしている人物から作業のロジックやノウハウを教えてもらわなければならないが、 プロジェクトの最終目的がリストラだとすると、教えてもらう人たちがまさのその対象になるわけである。 これでは協力してノウハウを教えてもらうどころか、その人達が抵抗勢力になってしまうため、プロジェクトが進まなくなってしまう。

結局のところ自動化とは人間の作業を機械にやらせることになるので、コスト削減が最終目的ではないとしても少なからず上記のような問題を引き起こしやすい。ただし、以下のようなケースでは比較的スムーズにすむ。

  1. 他にやるべき作業があるにも関わらず、現在は自動化対象の作業に業務時間が圧迫されている場合
  2. 全てを完全に自動化できず、最終的に人間の判断などが必要な作業の場合

(1) は例えば、目先の作業に振り回されてしまって先行投資的な作業に取り掛かれていないような状況である。(2) は例えば現実世界や人物間の文脈をもとに最終的な判断しなければいけない作業だったり、一定確率でしか正解が導かれるが外した時の影響が大きいので人間が責任を負う必要があるようなケースである。こういう類のものは結果が導かれるまでの過程を正しく理解している人物が必要になるので、単純に機械を人に置き換えられるものではない。

3. 自動化は「熟練の作業者」ではなく「未熟な作業者」に対して効果が高い

なぜか自動化の話がでると「専門家(熟練の作業者)」「それ以外」という登場人物しかでてこなかったりすることが多いのだが、現実にはその中間たる「未熟な作業者」がいる。最初の目的に挙げた「属人性排除」「ヒューマンエラーの除去」「高速化」は、もちろん熟練の作業者に対しても有効だが、それ以上に「未熟な作業者」に対してはより大きい効果を生みやすい。これは作業を完全自動化するわけではなく、未熟な作業者がとりかかる一部だけでもその効果がでやすいという観点もある。(熟練の作業者の一部の作業を置き換えると、逆に効率が下がってしまうことがしばしばある)ただし、先述した判断が必要な作業などもあるため、自動化された作業について無知でよいというわけではない、ということについては注意が必要である。