ふと興味があって「組織戦略の考え方」という本を読んだら、これがまた非常に面白い。エッセー的な文体で、組織で発生する問題を描いていて、「あるある」的に面白がることもできる本である。
同じ著者の別の本も買ってしまった。こっちの方がカタい本であるが、網羅的な感がある。
私が読んで面白いと感じた理由はそれだけではない。
組織設計の方法論と、ソフトウェア設計の方法論が非常に似通っている点が面白いと感じた。
組織の構造/設計の方法論について、以下のような指摘が書籍ではあるのだが、これらはソフトウェア設計の方法論だと考えても全く同じではないか。
- 組織設計の基本は官僚型組織である
- 階層構造、ピラミッドである。
- 上では抽象的な方針を、下へいくほど具体化されていく
- 下では処理できない例外を、上の階層に上げて処理をする。それでも処理できない場合は更に上に上げる
- 組織の分け方は、大きく言えば機能別に分ける方法と事業(ドメイン)別に分ける方法の二つがある
- 具体的には…
- 機能別(例. 営業/開発/生産/品質保証etc)
- 事業別(例. 白物家電/黒物家電/パソコンetc)
- ソフトウェアでも似ている。
- 機能別(View/ViewModel/Model, 文字列操作/コレクション/データベース操作/etc)
- 対象/ドメイン別
- 具体的には…
- 組織の基本は「分業と調整」である
- 分業 : 専門化, 特定の範囲の仕事しかしない代わりに習熟させる
- 調整:分業された全体をまとめてアウトプットにつなげる
- ソフトウェアにおいても
- クラス分け/パッケージ分け : 特定の範囲しか考えないようにして、作りやすくする
- 統合:それらの部品をつなぎ合わせて、要求を実現するためのモジュールが存在する
なぜこのような類似性が生まれるか?と考える。
その理由は「コミュニケーションはコストである」からだと思う。さらに言えば「コミュニケーションパスが増えるほど、コストは加速度的に増加する」という点も、類似性の根本にある原因だろう。
コミュニケーションとは平たく言えば、「他者とつながって情報をやりとりすること」だと言える。そして、それは増えれば増えるほどコストがかかる。コストがかかるとは、金がかかる/時間がかかる/複雑なので認知的負荷がかかる、等であろう。
コミュニケーションはコストであり、パスが増えるほどコストは加速度的に増加する。この点が、組織においても、ソフトウェアにおいても同じだから、当然、設計の原則も似通ってくるのだと思う。コミュニケーションの相手が、人であろうと、組織であろうと、クラスであろうと、ライブラリであろうとサービスであろうと、同じなのである。
コミュニケーションはコストであり、つながりが増えるほど加速していく。だから、コストを抑えるために分ける、分割する必要がある。
ではどこで分けるか?それが設計である。分ければ、ある種のコミュニケーションは強くなり、別のコミュニケーションは弱くなる。どこを強くして、どこは弱くしてもよいのか。向き合っている問題に照らし合わせて見極める。唸りながら考えて、考えて、ぼんやりと浮かんできた点線に従って切れ目を入れて分割する。
余談だが、組織にいると、「ウチの会社はヨコのつながりが弱いんだよな」とか「○○と△△は同じようなことやってるんだから、一緒にやればいいのに」みたいな声が聞こえてくることがある。こうしたコミュニケーションの弱さは、他の部分のコミュニケーションを強くするために、意図的に捨てるように設計された部分かもしれない。全部強くしたらコストがかかりすぎるし、同じコストで弱さを強化すると、別のところがまた弱まるのだと思う。この辺の力学が見えてないから、文句というのは気軽に言えてしまうのだと思う。