銀の銃弾についての続きです。
今回は愚痴ではないので、新たにリスク・マネジメントというカテゴリーを作る事にしました。

銀の銃弾を信じている人たちは、視野が狭いという共通項を持っているように感じます。たいていの技術にはメリットとデメリットが存在しているものですが、そのメリットしか見ていないので銀の銃弾に見える、という事です。


たいていの技術には、と書きましたが、殆どの場合メリットとデメリットは必ず存在します。時と共にデメリットが緩和されていき、一見してメリットしか存在していないように見えるものもありますが、あまり多くないでしょう。メリットしか見ない、というのは良く言えばとても前向きな姿勢ですが、翻ってデメリットを見ないのは、リスクを見ないようにするという事で、これは大きな落とし穴を自分で掘っているようなものです。


特定の技術のメリットを享受しようとした場合、当たり前ですがデメリットへの対策をしておく事が必要ですし、非常に重要です。場合によってはデメリットを吸収しきれるリソースが無い為、見送った方が良いという判断があり得るかも知れません。エンジニアな視点で考えればこんな選択はあり得ないかも知れませんが、あくまでソフトウェア開発も営利活動の一つなのでリスクとコストの折り合いが付かなければこういう判定もあります。
銀の銃弾を信じるという事は、こういう判断をしないという事です。


例えば、

非常に簡単でさくさく画面を作れるColdFusionMXという技術があります。
CFMLは簡単で、しかも高機能なタグが多いので小さな社内サイトを作る程度であれば、UI定義だけしてざくざく作ってしまっても結構いけるかも知れない、と思えます。
環境さえ揃ってしまえば、10画面程度の小さいシステムなら実装からテストまで1週間とかで完成させられるかも知れません。

・・・と、ここで、次のプロジェクトはColdFusionMXを使わなきゃ!と思考停止させた場合、ColdFusionMXはそのプロジェクトでの(もちろん、狼男に向けて発射される弾丸のことではなく、そんなものは存在しないという前提を揶揄した意味での)銀の銃弾になります。

CFMLはスクリプト言語なのと、ColdFusionMXが対応しているオブジェクト指向プログラミングとはあくまで擬似的なものなので、変更に強い設計にするのは難しいです。
また、ColdFusionMXのRuntimeは基本的に完全に隠蔽されていて公開されていないので、CFMLのタグの中でいったいどんなことが行われているのか、実際に作って動かしてみるまでわかりません。
また、10画面程度の小さいシステム、実装からテストまで1週間という、機能数もなく、データ項目数もなく、ただ1週間で完成させられる、という威勢の良い表現しかないこの情報が、本当に参考にして良い情報なのかどうか分かりません。(この数字は自分が霊視した結果です。)
.NETやJavaで有名なxUnit系のテストツールも無いので、ひたすら画面を叩くか、xUnit風モジュールを自作する必要もあります。
もちろん、「次のプロジェクト」のお客様はC/Sを望んでいらっしゃるかも知れず、ColdFusionMXの出番なんてそもそも無いかも知れません。

以上のひねくれた思考は、

  • 「既に作り終わった機能に変更が発生した場合」
  • 「ColdFusionMXの挙動に違和感を感じた場合」
  • 「メリットとして提示された情報そのものが間違っている場合」
  • アジャイル開発プロセスでの使用を想定した場合」
  • 「今回のビジネスに適したものかどうか」

こういった視点でデメリットとなりうる可能性を考えてみた結果です。ですが、こうやって別の視点でその技術を考えてみることで、メリット以外のものが(目を瞑っていないなら)見えてきます。


銀の銃弾を信じるという事がどんなリスクを見逃す事になるのか、プロジェクトによって違うでしょうから具体的にこうとは言えませんけど、一度見逃したリスクが顕在化するのは大概取り返しが付かないタイミングです。その時いくら慌てても、プロジェクトはもう失敗しているようなもんです。

最初に自分が「視野が狭い」とやや過激なことを書きましたが、視野を広く持って今回書いたようなリスクを少しでも軽減するようにする事こそが、リスク・マネジメントなんだと思うです。

要約すると、リスクを恐れて技術の導入に消極的になるのは、それはそれで無能っぽい事なので、きちんとメリットとデメリット、リスクとリターンを見極めて使おうよ、と。