最小の仕様、十分な品質

未熟だ。

アジャイル開発手法、特に XP の特徴である「未来に向けた設計をしない」というプラクティスをどうも、長い間誤解していたようだ。
「必要最小限の実装でとどめる」ことを信奉し始めたきっかけは、ずるずると締め切りなどお構いなしに、自分の作りたいものを作り続けて、それがじゃまされると烈火のごとく怒ったり、無口になったりする人を多く見たからだ。彼らは優秀なチームにも、そうではないチームにも存在して、至極もっともなことを言っては、「品質」だとか「こだわり」だとかいう言葉を振り回す。それは、言い訳にすぎない。特に大きなチームになると彼らは増える傾向にあるようだ。チーム全体が危機に陥っても、罪悪感など感じていないように見える。そのくせ、空気を読むことだけは上手で、黙々と作業を続けるふりをしている。本当は、彼らはエディターやUMLツールと向き合う時間よりも、Webブラウザと向き合う時間の方が長いのに。そして、うまくいかず追いつめられると「難しい」、「自分にはできない」と居直る。
彼らの気持ちはよくわかる。彼らは僕の心にかつて住んでいたし、未だに隠れて生き延びているからだ。だからこそ、僕は彼らが嫌いなんだと思う。納得いくまでものが作りたければ、世捨てでもしていつまでも一人でやっていればいい。予算があり、締め切りがあるのだ。「未来に向けた設計をしない」は自分に対する戒めでもある。

だが、これが裏目に出た。品質を生むのは実装量であり、時間であると思う。品質を生むには技量とそれを得るための労力が必要だ。何かの機能があって、それが最低限何とか使える程度で止める必要がある場合、僕はいつも悩んできた。ある時はその実装を指示し、別の時はそれを止めさせたりした。僕のこういった場合における指示はいつも一貫性を欠いていた。どこまでも作りすぎてはいけない。しかし、品質は確保しなければならない。それは、小さなクラスや関数でも言えることだし、開発用の小さなツールでも言えることだ。しかし、これらユーザーの目に触れないところは特に品質を犠牲にしていた。使いづらかったり、穴があったりしたのだ。

XPが言わんとする「未来に向けた設計をしない」の意図するところは、「最小の仕様、十分な品質」であると思う。事前にスパイクや設計を入念に行い、オンサイト顧客から要望をきちんと聞き、「最小限の仕様」を絞り込む。これによって作りすぎ防止を確保した上で、「見積もり」を行う。それをオンサイト顧客に提示し、オンサイト顧客がタスクの優先度を決定する。ユーザーによる要求があり、なおかつ作りすぎの懸念がなくなった状態で、「十分な品質」を実現する。

iPod shuffle はこの好例だと思う。

  • 最小の仕様
    • シャッフル再生しかない
    • ボタンは数個しかない
    • 液晶ディスプレーもない
  • 十分な品質
    • デザイン
    • 「シンプルさ」として売りにすらなっている少ないボタン
    • 軽さ
    • バッテリーの持ち

ターゲット層にとっての優先度をよく調べ、仕様を絞り込んだ上での品質の追求。おそらく、ユーザーにふれることのない関数、クラス、ツールにこれほどまでの品質は必要ないと考えられる。用途、場面、状況に応じた「十分な品質」が必要なのだと思う。「未来に向けた設計をしない」というプラクティスはそれを否定するものではない。

こんなことに、今頃気づいてしまった。どこかの本に書いてあるのだろうか?最近、この分野の勉強が足りないことに気づいた。