Yuichi Murata's Engineering Blog

グローバル・エンジニアリング・チームをつくる

ソフトウェア開発とは戦争である

最近、週末に閉じ籠るようになって本を読む機会が増えた。特に興味を持っているトピックとして戦略論や戦史の話を読むのだが、つくづく「ソフトウェア開発は戦争である」と思う。とても類似点が多いのである。戦争について勉強すると、ソフトウェア開発で修羅場に遭遇したときにどう立ち回るべきかというヒントを得ることができる。

戦争・戦略理論の古典として有名なのは東洋の「孫子」、西洋の「クラウゼヴィッツ」である。戦史関係の本を呼んでいると、この二冊に行き着く。

クラウゼビッツの「摩擦」と「天才」

クラウゼヴィッツは戦争の本質を捉えて理論化している。その本質の一つが「摩擦」という概念である。戦争においてはありとあらゆる不足の事態が発生し、それらが積み重なることによって大きな誤算となってあらわれる。これを摩擦と呼んでいる。

戦争においては、すべてが単純であるが、きわめて単純なことこそが困難なのである。こうした困難が積み重なると、戦争を経験したことのない人には想像もつかないような摩擦が生じる。……計画時にはまったく予想できなかった無数の小さな出来事が重なることで、すべてが当初の見込みを下回り、所定の目標のはるか手前までしか達しないのが常である。

戦略の世界史(上) 戦争・政治・ビジネス 戦略の世界史 戦争・政治・ビジネス ローレンス・フリードマン貫井佳子

まさにソフトウェア開発プロジェクトではないかと思う。どうでもいい依存関係のライブラリのビルドが突然原因不明のエラーを起こし、同僚に依頼していたはずの依存モジュールの仕様は自分の想定と全く異なる。開発が走りだしてから新たなビジネス要件が発覚して、QA チームはおもいもよらないコーナーケースを突いてくる。そんなランダムな事象に振り回されてソフトウェア開発プロジェクトはたいていうまく行かない。

ではそうした「摩擦」をどう克服するべきか。クラウゼヴィッツは「天才 (Military Genius)」という才能によって「不確実な事象」に上手く対処した陣営が勝つとしている。ではその天才とは何なのかというと、簡単に言うと「勘」である。

この場合の高度の知力に求められるものは、非凡な知的見識にまで高められた統一性と判断力である。また、凡庸な知性では苦労してようやく解明の糸口を引き出しそれで疲れ果ててしまうような何千のあいまいな現象を、これに触れるや否や直ちに解決してしまう能力である。

孫子・戦略・クラウゼヴィッツ--その活用の方程式 守屋淳

ソフトウェア開発プロジェクトでは、経験豊かなエンジニアが成功を左右する局面に遭遇する。経験則だが、彼らに共通するのは大抵「修羅場をくぐってきた」ことにあるように思う。戦場経験が豊富なのである。それ故に勘が良い。細かなことをいちいち検討しなくても、「なんとなくヤバそう」という職人的勘でプロジェクトの炎上どころを見分け懸命に避けていく。そうしたエンジニアは組織で重宝され、重要だけれども問題の発生したプロジェクトの問題解決にひっぱり凧にされる。

孫子の不敗

孫子の理論の内もっともクラウゼビッツと対照的なのは「戦争を如何に避けるか」を説いている点である。孫子は戦争において勝つことよりも、負けないこと、つまり「不敗」を重視した。

孫子はいう。およそ戦争の原則としては、敵国を傷つけずにそのままで降服させるのが上策で、敵国を討ち破って屈服させるのはそれには劣る。(中略)こういうわけだから百たび戦闘して百たび勝利を得るというのは、最高にすぐれたものではない。戦闘しないで敵兵を屈服させるのが、最高にすぐれたことである。

新訂 孫子 (岩波文庫) 金谷 治

若い頃は、新たなプロジェクトの立ち上げはワクワクしたものだった。新たな挑戦をすることができる。自分ならもっと上手いシステムに置き換えることができる。エンジニアとして貴重な経験を積み、履歴書に魅力的なキャリアを加えることができる。

ソフトウェア開発プロジェクトをマネジメントする立場になると、新たなプロジェクトの立ち上げは頭痛の種である。新たなプロジェクトの立ち上げは、既存のシステムの開発・運用からメンバーを引き抜くことを意味する。ただでさえ大変な開発・運用がもっと大変になる。そんなわけだから、不要な案件を落とし、優先度の低い案件を代替サービスやパッケージソフトで済ませる。本当に大事な、成果につながる案件に大事な人材を重点投資する。

ソフトウェア開発プロジェクトと経営者視点

最後に孫子の有名な以下のフレーズを上げておく。

君命には従ってはならない君命もある。   ──君命に受けざる所あり

孫子・戦略・クラウゼヴィッツ--その活用の方程式 守屋淳

上司の命令には従ってはいけない時があるという、単純な反骨精神や不服従と混同してはいけない。 孫子とその理論は戦争を「政治の延長」として捉えたところにその特徴がある。戦争が政治の延長であるのなら、それは政治家のしごとの両分と言うことになる。一方で、戦争には専門的な知識と経験が必要になり、不要な口出しが現場に不要な混乱をもたらしうる。

この軍事と政治の乖離をどう処理すれば良いのか。孫武が考えたのは、政治的に何が求められているかを完全に理解する将軍に、全件を委任してしまうことだった。

将軍というのは、君主の補佐役である。補佐役と君主の関係が親密であれば、国は必ず強大となる。逆に、両者の関係に親密さを欠けば、国は弱体化する。   ──それ将は国の 輔 なり。 輔周 なれば、則ち国必ず強く、 輔隙 あれば、則ち国必ず弱し。

孫子・戦略・クラウゼヴィッツ--その活用の方程式 守屋淳

ソフトウェア開発プロジェクトに置き換えるのであれば君主=経営者、将軍=シニアエンジニアだろうか。経営者にソフトウェア開発について理解してもらうのは難しい。だから、シニアエンジニアこそ経営者の視点(=政治の視点) をもって経営を行うべしといったところになるのではなかろうか。

愚者は経験に学び、賢者は歴史に学ぶという。戦史やそれらに支えられた戦略論は、まさに現代の戦争たるソフトウェア開発における大事な学びを教えてくれる最高の教材である。

新訂 孫子 (岩波文庫)

新訂 孫子 (岩波文庫)

  • 発売日: 2000/04/14
  • メディア: 文庫