プロジェクト炎上は避けられない - 「歴史は『べき乗則』で動く」を読んで

プログラミングの話題につながる事柄だとしても、SE論とかソフトウェア開発プロジェクトについて書くつもりはなかったのだが、最近読んだ本の感想を兼ねて少し。

常識的に考えて、そんなことはとっくにの昔にわかってると言われそうな、なにを今さらな話ではある。


歴史は「べき乗則」で動く

世の中は自己組織化臨界状態だらけ

マーク・ブキャナン著「歴史は『べき乗則』で動く ---種の絶滅から戦争までを読み解く複雑系科学」(水谷淳訳、ハヤカワ・ノンフィクション文庫)を読んだ。2009年発行だから今ごろ読むなんて出遅れもいいところ、徳川秀忠もびっくりの大遅参である。

まあいいじゃないの。秀忠だって勝ち組だ。

本書は、地震・森林火災・生物の絶滅・株価変動・都市発展さらには歴史の展開を例に挙げながら、それらの現象に共通してみられる「べき乗則」と、背後に横たわる「近くのもの同士の相互作用を通して影響を伝播させる集団のふるまい=自己組織化臨界状態」について、平易な語り口で説明している。

もっともわかりやすく典型的な例が、文中にたびたび登場する砂山の崩壊だ。上から砂粒を1粒ずつ落としていくと、どんどん積み重なって、やがて砂山ができる。

しかし砂山はどこまでも高くなり続けるわけではない。ある時点で落とした砂粒が引き金となって雪崩(?)が発生し、山は崩れてしまう。

雪崩が小規模で済めば大した問題ではないのかもしれない。そのような小規模な雪崩は実際、頻繁に発生するが、砂山を壊すほどの影響は及ぼさない。

予測不可能な大崩落

だが稀に、砂山全体に及ぶような大規模な雪崩が発生して、砂山は激しく崩壊する。歴史に残る「大崩落」だ。こうした大崩落を引き起こした砂粒は何が他と違って特別だったのだろうか? ものすごい根性を持った粒だったとか、特別な魔力を備えていたとか?

そうではない。砂粒自体は他と変わらない。たまたま落とされた場所が砂山の傾斜が急だったり安定の悪い位置だっただけなのだ。

1つの砂粒が、落とされた位置に安定して留まることができずに砂山の斜面を転がり落ちると、その動きに押された別の砂粒もつられて転がりだす。それに押されたさらに別の砂粒も…という具合に、影響の連鎖が生じる。連鎖が広範囲になったとき大崩落となる。

現実に砂粒の着地する精密な位置や各瞬間の砂山の正確な構造を知ることができない以上、連鎖の規模は読めない。次に発生する雪崩が小規模に留まるか、大崩落となるかは全く予想もつかない。大崩落がいつどこで起きるのかを予言することはできない。

べき乗則の発見

しかし最新の物理学研究は、一見どうにも手のつけようがない予測不可能な砂山崩壊の中に、興味深い規則性を見出した。

発生した雪崩の規模と発生頻度をグラフ上にプロットしてみると、きれいなべき乗則に従うことがわかったのだ。具体的には雪崩の規模(転がり落ちた砂粒の数)が2倍になると発生頻度は約2分の1になる。

この事実は、雪崩に典型的なサイズがないこと、したがって大崩落に特有の特別な原因は存在しない…大崩落も小崩落も同じような原因から生じる…ことを示唆している。

一つ注目すべきことは、このようなべき乗則と予測不可能性をもたらす状況が、砂粒を1つずつ落とすという、ただそれだけのことから「ひとりでに」生じてくるということだ。いったん砂山が崩れた後でも、粒を落とすことを続ける限り、次の崩壊に向けた状況がまたおのずと準備されてくる。

ああおそろしや。

そして同様の特徴を持つ自己組織化臨界状態は自然や社会のあらゆるところに普遍的に見られるというのだ。


ソフトウェア開発にあてはめてみる

てんやわんやの集大成=砂山

自己組織化臨界状態の考え方はいろんなところに応用できそうだなあと思った。

ここからは証拠も検証もない、ただの言いっ放しになるが、しばしばSE残酷物語だのプロジェクト炎上だのといった切り口で語られるソフトウェア/システム開発の失敗って、つまりはこれじゃないの? という気がしてきた。

砂粒にたとえられるのは何らかのイベントだ。仕様の追加・変更、納期の変更、人員の増減、予算の増減、工程の組み替え、懸案事項の先送り、技術上の問題、営業上の問題、政治的な問題、etc。これらが時々刻々と降ってくる。

たいがいはうまく処理できる。やり過ごせる。砂山は崩れることなく、高く積み上がっていく。高くそびえる砂山はプロジェクトの歴史そのものだ。山を見上げる誰もがみずからのマネジメントに自信を深め、「まだいける、まだいける」と砂粒を落とし続ける。

砂山はいつか崩れる

ときおり砂山が崩れることはある。要件が膨らむとか、仕様に矛盾が生じるとか、船頭が多くなってきたとか、星一徹ばりのちゃぶ台返しとか。しかしほとんどの崩落は小規模に留まるから、「まだいける、まだいける」と砂粒を落とし続ける。

ときおりレビューやリスク管理と称して、砂山の傾斜が急に見える箇所を補強することもある。…ふう、よし、もう安心だ。さらに自信を持って「まだいける、まだいける」と砂粒を落とし続ける。

どうにか無事であることがさらなる砂粒を(もしかしたらもっと激しく)落とす根拠にされる。…うまくやりくりできているように見える裏では自己組織化臨界状態がすでに準備されているのだが。

そしてあるとき、砂山の一箇所で崩落が発生する。最初は「今回もすぐに収まるだろう」と気楽に構えていた。しかし崩落が次の崩落を引き起こし、次の崩落がまた次の…気がつけばプロジェクト全体に致命的な影響を及ぼす大崩落に発展する。

はいそれまでよ。炎上。

やっぱり「べき乗則」で動く

炎上の原因はいろいろ挙げられるだろう。たいがいは引き金となった出来事を非難する。中にはもっと的確な指摘があるかもしれない。だがいずれも歴史の記述と同じで本質的には後講釈にすぎない。

本書に沿うなら、炎上は特定の邪悪な出来事のせいではない。予測を拒む構造がひとりでに組織され、いつなんどき、なんら特別ではない出来事が引き金となって致命的な崩壊につながってもおかしくない臨界状態を導くような、相互作用する集団の非平衡系に内在する性質ということになる。

えー、そんなのどうしようもないじゃん。残念ながら解決策を示すことはできない。少なくとも影響の連鎖を予測できないことは無能の証ではない。

幸いプロジェクトには終わりがある。我々にできることは、小さな雪崩に日々対処しながら、今回のプロジェクトが大崩落を迎える前に完了することを祈るだけだ。

だからせめて混乱の中に隠された規則性の美しさを慰めにしよう。発生したトラブルに対し、なんらかの尺度で測った規模と発生頻度を誰かグラフに表してほしい。きっと見事にべき乗則に従っているんじゃないだろうか。