2008年11月1日土曜日

[37signals] future creepに気をつけよう

(原文:Beware of future creep

そう、君は今や scope creep について理解し、feature creep についても理解した。けれども私は最近、future creep と呼ばれる小さなグレムリン(小悪魔)について考える事が多くなった。

future creep とは君の製品に機能を追加する事とは関係ない。少なくとも直接の関わりはない。むしろ君の製品の基盤部分に、あとになって拡張する(かもしれない)機能についてあらかじめ準備しておくことと関わりがある。将来をみこして、というやつだ。

こいつは全くずるい奴で、というのも製品の機能リストが確定したときでさえ(もしくは確定した特に必ずと言っていいほど)発生するからだ。今回のリリースについてはもう何の機能も追加出来ない状態なのに、そのうちXという新機能を追加するよという話が出てきて、そこで君は今あるコードを、こことここ、たぶんここも、というかんじでちょっとづついじくることになる。Xという機能を追加する事自体はもっと簡単に出来るのにだ。

Xとは何の事であっても良い。API だったり、ドラッグアンドドロップのユーザインタフェースだったり、要素のカテゴリ分類だったり、データのインポート・エクスポートだったり、バッチ処理だったり、なんでもありなんだが、なかでも「すぐに実装するつもりはない」のに「いつか追加するかも」とまわりが言いふらしているだけの事があてはまる。

実装するという響きそのものは悪くない、けどそれは割に合うのか? 実際のところ積極性に富み称賛に値する響きではある。そしてもしXが時流に合っていて、君の意図にきちんと沿ったものであれば、君が将来を見越して実装した事が賞賛されるだろう。

しかしだ

最も単純な機能でさえ実装にはいくつものやり方がある。何も実装しないというのもそのひとつだ。君が「将来のため」に「もしこうだとしたら」とか「見た目だけでもいれとこう」と、いかにして現状のコードを将来入れる機能に適合させるのがベストかを考えるにはあまりにも少ない前提知識のもとでとりくむ数時間(数日にわたるかも!)が無駄に終わる事になるだけで済めば、それはまだ上々だと言える。

より悪いケースになると、それは死んだコード、つまりだれも片付けようとせず、なぜそこにそのコードがあるのかをだれも思い出せないまま何年も放置されるような、アプリケーション内の腐臭のもととなるコードになってしまう。

最悪なのは、その時点では良いアイディアに思えたものが、どんどん悪い方向へと事態を運んでいくかもしれないということだ。後先考えずにただただその機能を実装するという方向に入り込んでしまったり、他の実装すべき機能をすっきりとしたかたちで追加することを妨げる事になる。

解決策は?といえば、3つある。

第一に、きみが必要とする以上の実装を決してしないこと。アリとキリギリスの話に比べると不快に聞こえるかもしれないが、これは例外なのだ。手を抜けという事じゃなく、君の理解している事だけをやれということだ。実装すべきは今作業している機能についてであり、いつかやりたいと希望する機能についてではない。単純、最小限、そして現実的であることをキープせよ。

第二に、理解の範囲を超えてプランを深めない事。「うん、その新機能は来月やるかも」とか、だれもが確定事項のように話しているかもしれない。でも予定は未定であり、ふらふらころころ変わる。次のリリースでの追加機能とかいうことでもない限り、実装するな。積極的になるなと言ってる訳じゃない。真に必要な実装アイテムについて積極性を注げということだ。

第三に、現実的でない作業要求を恐れるなということ。だれかが新機能についてきみに言ったとする。うん、それこそが現実的でない作業要求というものだ。もし君が誠実であれば、その機能がどんな負担をもたらすかについては全然わからないのだということを認めるだろう。よくあることだが、山ほどの作業が必要だと思っても、実は単純な解決方法があると判明するものだ。(君が誠実というよりは率直だとしても同じ事だ)。プロジェクトを進めるのに必要な情報を入手するまでは、そういった現実的でない事は放置することだ。現実的でない作業要求がもたらす恐怖は君を現実的でない解決方法へと導くからそうならないように。

プロジェクトの方針から外れないようにすることだけを目指していると、簡単にこういった罠にはまる。不要な作業から君を守るどころか、さらに仕事が増える事になる。future creep には気をつけよう。

以上述べたことは11月5日にオーランドで行われる RubyConf でのプレゼンと関係している。タイトルは『Recovering from Enterprise: Ruby の慣用句を身に付け、悪い習慣に別れをつげるには』。会場に来る事が合ったら呼び止めて自己紹介してくれ。

0 件のコメント:

コメントを投稿