エンジニアリング組織論への招待
~不確実性に向き合う思考と組織のリファクタリング
http://image.gihyo.co.jp/assets/images/cover/2018/9784774196053.jpg
広木大地 著 Kindle
読了 2018/6/16
感想
マネジメントしている人、もしくはリーダーの立場である人のための本と言えるのかもしれないが、ソフトウェアエンジニアという仕事をしている上で、必ず向き合わなければいけない「不確実性(よくわからないもの)」に対して、どのようにアプローチしていくのかを説いている。ソフトウェアエンジニアという職業についている人間で「不確実性」に出会わない人はいないと思うので、マネジャーでなくても読んでいて損はないと思う、むしろソフトウェアエンジニアという職種に関わらず、マネージャーや部下を持つ人間でも読める。
エンジニアリングとは
それは「何か役立つ事を実現」すること。
それは誰かの曖昧な要求からスタートし、それが具体的で明確な何かに変わっていく過程が実現で、その過程のすべてがエンジニアリングという行為です。つまり、「曖昧さ」を減らし、「具体性・明確さ」を増やす行為が「エンジニアリングとは何か」という答えでもあるのです。
エンジニアリングで重要なのは「どうしたら効率よく不確実性を減らしていけるのか」という考え方なのです。
自己組織化された組織
「具体的で細かい指示」を必要とする組織を「マイクロマネジメント型」の組織といい、「不確実性」の削減をより多く行うことができる「抽象的で自由度のある指示」でも動ける組織を「自己組織化された」組織といったりします。
経験主義と仮説思考
問題を解くのに必要な情報が目の前にないのであれば、それを入手しなければ問題は解決できません。学力テストとは違って、教科書を見ても答えを誰かに聞いてもよいのです。情報を入手するために、行動を起こして、その結果を観察し、そこから問題解決を行う考え方を「経験主義」といいます。
わからないことは、調べるしかない。
この「不確実性」を確実なものにするには、未来を現在にすること、つまり、行動して確かめる以外の方法はないのです。そのような立脚点にもとづいた思想、考え方を経験主義。
わからないことを行動で突き止める もし何かの問題に直面し、それを解決しようと考え、今ある情報の中から、じっくりと考えてみたものの、答えが出ない。そんなときに理性主義的な発想では、「わからなかった」という事実から、次の行動への一手が浮かび上がってきません。そのため、「わからなかったのは、頭が悪かったからだ」と、何かミスがなかったかと考え、もう一度同じことを繰り返して、思考の袋小路に陥ってしまいます。 一方で、経験主義的な発想でことに臨めば、「わからなかった」あるいは「正解ではなかった」ということが重大なヒントになり、次の行動を生み出す。
また、限定された情報であっても、その情報から全体像を想定し、それを確かめることで少ない情報から問題解決に向かう思考様式を「仮説思考」といいます。
情報の非対称性
コミュニケーションの不確実性は、情報の偏りを生み出します。このことを経済学においては「情報の非対称性」といいます。
情報の非対称性とは、同じ目的をもった集団で、何かの情報を片方の人が知っていて、もう片方の人が知らないという状態です。上司が把握している情報を部下は把握していないとか、その逆に現場が把握している情報を、経営陣は把握していないなどの状態です。
限定合理性
自分と他人の利害が異なる場合に、それぞれがそれぞれにとって合理的な行動をとったとしても、全体として不合理な行動をとってしまうことを「限定合理性」といいます。
コミニュケーション能力
真に組織に求められるコミュニケーション能力とは、コミュニケーションの不確実性を減少させる能力のことだといえます。さらには、組織内において連鎖的に発生する不確実性のループを止めることができる能力ともいえます。それによって、集団に発生する「情報の非対称性」と「限定合理性」を極力低減させていくことができます。
情報の透明性
「情報の透明性」とは、意思決定と意思決定に関わる情報が、組織内に正しく整合性をもって伝達されるように継続して努力し、何かわからない決定があったとしても、それは隠そうとしたわけではなく、抜けてしまったのか、自分が聞き逃したのだから、直接聞いてみようという関係性をつくることです。情報公開が情報の透明性を作るわけではありません。「透明性」とは、つまり、継続したコミュニケーションや仕組みを通じて、コミュニケーションの不確実性を低く維持し、情報の非対称性が削減され、限定合理性の働きを弱められている状態のことをいうのです。
システム思考
「秩序だった複数要素の組み合わせ」「要素に分けても見られない性質をもつ関係性」という意味が生まれます。システムというと、現代においては無機質な機械式の仕組みというような印象があるかもしれませんが、むしろ有機的な生命現象を説明するためにこそ、使われるようになった言葉でした。一番わかりやすいたとえは、「生態系」(エコシステム)という語ではないでしょうか。個々の生き物の性質、たとえば、害虫だとか、益虫であるとかいった性質に注目して、害虫だから駆除して減らそうとか、益虫だから増やしていこうというような、個別の最適化が生態系全体に影響を与え、思いもよらないような変化をもたらしてしまうという現象があります。複数要素の関係性がもたらす性質は、要素を分解して、個々の物質の性質を突き止めるというような西洋の自然科学の歴史からは、長年意識されてこなかったことでした。
「個別最適化」が全体最適にならない問題を分析し、より本質的な問題解決を支援する「システム思考」というフレームワークが生まれました。
システムとは全体の関係性を捉えること
誤解を恐れない言い方をすれば、古代ギリシャ以来、西洋の自然科学は、「より細かい要素」に分解し、その要素の性質を知ることで、すべての自然現象が説明できると考えていました。このような考え方を「要素還元主義」的な思考といいます。それに対して、「細かい要素」に注目して、その総和としては、全体の性質がわからないだろうとする考え方を全体論(ホーリズム)といいます。
たとえば、漢方などの東洋医学を「ホリスティック医療」と呼ぶのを聞いたことがあるかもしれません。西洋医学が、患部を取り除いたり、症状を直接的に減らす処方をするのに対して、漢方では、体全体の調和を取り戻すために、個々人の状態に合った薬を調合し、提供するということで、体の自然治癒力を高めて治療するというものです。西洋医学が、要素還元主義的な思考に基づいているのに対して、東洋医学は、全体論的な思考に基づいているという説明がしばしばなされます。
要素の性質よりむしろ、要素同士の関係性に注目して、問題の構造を解き明かす考え方が「システム思考」なのです。
要素還元主義
- すべての要素はツリー構造になっている
- それらの要素は線形的な関係性(加減乗除/比例関係)を持っている
- 要素の総和として全体の性質がわかる
システム
- すべての要素はネットワーク構造になっている
- それらのようさは非線形な関係性を持っている
- 要素の総和では全体の性質はわからない
部分だけしか見ないことで対立が起こる
私たちが日々仕事を進めていくときに、一定の対立が発生するのは、なぜでしょうか。上司と部下、部署と部署、個人と個人など、多くの場合、その対立は、それぞれがそれぞれにとっての「部分」しか認識していないために発生することが多いのではないでしょうか。
このような局所最適解(システム全体の一部分において最適な答え)が、全体にとって最適な答えかどうかの判断がつかないために、局所最適解同士が争うことになります。
Xさんも、Yさんも、Zさんも同じ目的をもっていましたが、役割へのコミット意識によって、全体像を見失ってしまっていました。同じ目的をもった人々は、本来対立するはずがないのです。にもかかわらず、何かの対立が発生したときというのは、その対立の当事者全員が、少しずつ正しく、少しずつ間違っています。
良いプログラマ
極論すれば、あらゆる前提から逃れて「良い」プログラムというものはありません。拡張性があるとか、読みやすいだとか、ドキュメントが充実しているといった表面的な要素が、そのまま「良さ」を作るわけではありません。そのプログラムがある前提に基づいた問題解決策だから、その前提のもとに「良い」という判断ができるだけで、解決するべき問題の設定、そのモデル化、開発時の状況などによって、問題解決策は束縛されていて、前提とのマッチングによって、それが「良い」だとか「悪い」だとかが決まります。とはいえ、良いプログラマ・良いエンジニアというのは、確かに存在します。彼らは、確かに「良い」プログラムを書くのです。その彼らの何が「良くない」プログラマと違うのでしょうか。知識や経験でしょうか。同じような経験を積んでいてもその成長は大きく違います。地頭の良さでしょうか。それも関係はあるのかもしれませんが、抽象的で捉えどころがありません。筆者が考える決定的な違いは、「良い」プログラマには問題解決のための眼があるということです。
眼が経験を有意義にも無為にもします。眼が状況を判断し、自分がおかれている前提を正しく把握した設計を生み出し、良いプログラムを作り出します。この問題解決のための眼を養うことが、良いプログラマのための条件になるのではないでしょうか。問題解決のための眼、それは「視野」「視座」「視点」の3つに分類できます。「視野」とは、あるポイントからその問題を眺めたときに同時に把握できる領域の広さです。ある問題はある大きな問題に包含されていて、さらに大きな問題構造に含まれているといったことを把握できる、広い/狭いで評価するものです。「視座」とは、どこから眺めるか。高い/低いで評価されるものです。視野がいかに広くても、視座が低ければさらに次元の高い問題を認識できないし、視座が高すぎても抽象論に終始しミクロな解決策が浮かびません。社長が現場感覚を理解しようとしたり、平社員が部長の立場からものを見てみるといったようなことです。組織の階層だけではなく、問題をどのように受け止めるかといった姿勢といえます。「視点」とは、どの角度から見るか。鋭さ/凡庸さでとらえるものです。問題の構造を把握して、解決策の筋を刺すときに問題の捉え方によってはシンプルになることがあります。普段は見えない角度から本質をえぐり出すのが「視点」の力です。視座が拡大縮小なら、視点はどの角度にライトを照らすのか、そして、そのライトの照らす広さが視野です。人間はそもそも、完全な全体像を捉えることができないものです。できることは、自分は全体の一部しか把握していないことを受け入れて、そのうえで、視野、視点、視座を広く、鋭く、高く考えるように鍛えていくことが、大事なことです。
個人でなく関係性に注目する
私たちは、つい、何か問題が発生するとその原因を個人、とりわけ嫌いな誰かの責任として、押し付け、不毛な言い争いに時間を使ったり、その対立自体を恐れて、問題を温存したままで日々を過ごしてしまいます。様々な問題は、本当に個人の問題なのでしょうか。もちろん、個人の性質がその問題を大きくしていたり、問題を生み出していることはあるでしょう。
認知の歪み
人間は誰しも完璧ではありません。そのため、「未来」も「他人」のことも完璧に理解することはできません。そのことはすべての出発点です。わからないものがあったときに、人は「回避」するか「攻撃」するかを迫られる機能が本能的に埋め込まれています。その結果、正しく事実を見ることができずに認知が歪んでしまいます。どんどんと自分のことしか見えなくなり、思い込みが事実であるように考え、全体の関係性を見渡す力がなくなります。他人に完璧を求め、そうでなかったことが、思い込みを強化させていくのです。考えていれば、物事は理解できるはずと信じ、完璧を求め合った結果、物事は実現されず、エンジニアリングは失敗に終わるでしょう。
Chapter 2 メンタリング