トレードオフ可能な品質仮説
2011年2月21日
私はよく、「経営陣はより多くの機能を求めており、品質を気にしない」ことに不満を抱いている開発者に遭遇します。これを聞くと、いつも悲しくなります。なぜなら、開発者、経営陣、そして彼らの顧客がすでに負けていることがわかるからです。彼らの敗北は、状況をトレードオフ可能な品質仮説という観点で捉えてしまったことが原因です。
人生の多くの側面において、品質はコストとのトレードオフとなるものです。より良い車はより高価になるため、私たちは憧れのフェラーリを諦めて、より安価な車を選ぶかもしれません。ターナーズで本当に新鮮な魚に余分にお金をかけるべきか、それともスーパーマーケットに行くべきか?そのため、私たちは品質にはコストがかかるという考えに慣れています。時には喜んでお金を払うこともあれば、時にはより安価な選択肢を選ぶこともあります。
時々、この概念がソフトウェア、特にソフトウェア設計に適用されているのを耳にします。汚れたコードをリファクタリングするには時間がかかるため、代わりに機能を追加したいと考えています。ここでの根本的な前提は、品質はトレードオフ可能であり、品質を下げることで、コスト、スコープ、またはスピードといった他の側面で利益を得ることができるということです。
この仮説を検証する際には、まず品質とは何を意味するのかを考える必要があります。品質は人によって異なる意味を持ちます。ソフトウェアのコンテキストでは、品質をユーザーインターフェースの使いやすさ、欠陥の数、またはソフトウェアの設計の良さとして定義することができます。
私はケント・ベックに従い、内部品質と外部品質を区別しています。ユーザーインターフェースの使いやすさと効果は、システムのユーザーが認識できるものなので、外部品質です。これは、トレードオフに妥当に含めることができるものです。機能Aを使いやすくするために追加の作業を行うべきか、それとも機能Bを追加するべきか?
しかし、ソフトウェアの内部構造は、ユーザーが直接認識できるものではありません。プログラムを使用するだけでは、その内部がうまく構築されているかどうかはわかりません。したがって、内部品質はより隠れた属性です。より多くの機能を構築するためにシステムの設計品質を低下させるべきだと言う人がいる場合、その人はトレードオフ可能な品質仮説を内部品質に適用しています。
これを行う際の問題点は、内部品質がトレードオフ可能であれば、内部品質に努力を注ぐ意味が全くなくなるということです。優れた設計が機能の追加を阻害し、ユーザーに何のメリットも提供しないのであれば、なぜそれを行うのでしょうか?
人々が内部品質を気にする理由は、別の仮説、つまり設計体力仮説が適用されると考えているからです。この仮説では、内部品質を低下させると開発速度が低下するため、内部品質はトレードオフ可能ではありません。設計に注意を払わないことで短期的にはスピードアップが可能になることは事実ですが、これは非常に短い期間に限定されます - ほとんどの人が考えているよりもはるかに短い期間です。
しかし、悲劇的なのは、内部品質をトレードオフ可能と捉えた途端、負けが決まってしまうことです。人々は品質がトレードオフ可能であることに慣れているため、最良の状況であっても、それを克服するのは難しいでしょう。品質を向上させるために新機能の追加に費やす時間を減らす必要があると言うことは、まさに棺桶に釘を打ち込むようなものです。
代わりに、内部品質の真の価値、つまりスピードを実現するものであることに焦点を当てることが重要です。内部品質の目的は、より速く進むことです。もちろん、これは両刃の剣であり、リファクタリングに時間を割くことでどのようにスピードアップできるかを理解する必要があることも意味します。そうでなければ、リファクタリングを行うべきではありません。
ちなみに、これは、ソフトウェアクラフトマンシップのメタファーに対する私のもう1つの懸念事項です。人々に「クラフト」と言うと、彼らは精巧な仕上がり、革張り、滑らかな接合部、そしてその結果としてより高いコストを想像します。「クラフト」という言葉は、トレードオフ可能な品質仮説を強化します。そして、それは、スピードには優れた設計が必要であることを知っている私たちにとって、致命的な欠点です。