プログラマが知るべき97のこと/顧客の言葉はそのまま受け取らない
自分の希望を伝えるのを嫌がる顧客はまずいないでしょう。少なくとも私は会ったことがありません。ほとんどの人は、尋ねれば、詳しく希望を話してくれます。問題は、顧客がいつも本当のことを言うとは限らないということです。嘘をついているというわけではありません。ただ、顧客とプログラマとでは話し方が違うのです。顧客には顧客独自の用語とコンテキストがあります。私たちから見れば、非常に重要と思われることをまったく話さないこともよくあります。たとえば、その人が1つの会社で20年間働いているとします。そういう場合はつい、プログラマも同じ会社で同じくらいの期間、働いているようなつもりで話をしてしまいがちなのです。さらに厄介なのは、顧客の中にはそもそも自分が何を欲しいのかよくわかっていない人が多いということです。大まかなことくらいは把握している人もいますが、自分の希望の細部にいたるまで相手に正しく伝わるようにうまく話せる人はめったにいません。たとえ詳しい話をしてくれたとしても、実際には自分の希望をよくわからずに話しているので、話されたことをそのまま受け取るわけにはいかない場合も多いのです。では、自分の本当の希望を話してくれない人に対し、一体どうやってソフトウェアを提供すればいいのでしょうか。その答えは実に簡単です。顧客との関わりを密にすることです。
 
顧客には早い段階から、頻繁に疑問を投げかけ、説明を求めるようにします。言われた言葉をただ文字通り受け取ってはいけないのです。彼らは決して自分の希望を正確に言葉にしているわけではない、というのを常に忘れないようにしましょう。私はよく「顧客から言われたことを、言葉を換えて言い直す」ということをしています。そして相手の反応を見るのです。すると、たとえば「クライアント」という用語1つとっても、自分とはまったく違う意味で使っていることが判明して驚くことがあるでしょう。まったく意味が違うにもかかわらず、顧客はそれに気づかず、自分の思う意味に取ってもらえるはず、と信じ込んで話していることが非常に多いのです。プログラマの側も、言葉の意味が違っていることに気づかなければ混乱して話を正しく理解することができず、当然ソフトウェアを正しく作ることもできません。

そうした事態を防ぐには、顧客と何度も話し合う必要があります。すぐに相手の言うことを理解したと思い込んではいけないのです。同じ話を何度も聞いてはじめて理解できる、と思っておいた方がいいでしょう。一つ一つのことがらについて、相手の言ったことをこちらの言葉で言い直す、というのを2度3度繰り返すべきです。ある出来事について、それが起きる前と起きた後に話し合ってみる、というのも有効でしょう。そうすれば、相手が何をどんな言葉で話すかがよくわかるはずです。また、可能な限り、同じことを複数の人と、別々の機会に話し合ってみるべきです。すると、同じことを話しているにも関わらず、人によって全然話が違うということがよくあります。まったく無関係と思われていたこと同士に実は関係がある、と判明する場合もあるのです。同じことを二人に話してもらったら、内容が完全に矛盾するということも珍しくありません。開発するソフトウェアが複雑なものであるほど、そういった食い違いはできる限り事前に解消することが重要になります。

話し合う際には、図や絵などを利用することも大切でしょう。ホワイトボードに簡単な図を描くだけでもずいぶん違います。設計の早い段階で画面のモックアップを作るのも有効です。手がかけられるのなら、機能のプロトタイプを作るのもいいでしょう。話をする際に図や絵などがあると、聞き手の集中力が長く続き、話の内容も長く記憶されることが知られています。プロジェクトの成功のためには、是非とも人間のこの特性を活かすべきです。

私は以前、いわゆる「マルチメディアソフトウェア」の開発チームにいたことがあります。そのソフトウェアの画面は非常にカラフルで派手なもので、私たちは、ソフトウェアのルック&フィールについて、顧客の希望を事前に詳しく尋ねました。設計ミーテイングで全体のカラースキームについて話し合ったのですが、背景色は「黒」にして欲しい、ということでした。その希望を基に、グラフィックデザイナーのチームは、何百という数のマルチレイヤーグラフィックスファイルを作成しました。製品を完成させるまでには長時間を要し、労力も大変なものでした。しかし、大変な作業の成果を顧客に披露した時、私たちは驚くべきことを聞かされたのです。製品を見た顧客は背景色についてこう言いました。「ああ、私、「黒」って言いましたけど、あれは「白」っていう意味なんですよ…」よく「白黒をはっきりつける」という言い方をしますが、現実には白黒さえ、なかなかはっきりしないものなのです。