なにかの要望を受けてコードを書くとき、仕様を明確にするために極端な例や、反例を挙げて境界を確認するのはよくあると思うけれど、下手すると、文化に不馴れな人からは極端な考えを持っているとか消極的だと思われるし、Twitterでやると反例指摘クソリプ野郎になってしまう。
— だーい(*Д*) (@daaaaaai) 2019年3月13日
ソフトウェア開発では仕様を明確にするために極端な例を考えることが役立つ場合がある。
例えば、自動販売機をつくることになったとき、お金を入れることができる、という要求だけでは仕様をつくるに不十分で、いくらまで、あるいは硬貨何枚まで入れられることができるか考える必要がある。このとき、硬貨100枚は入れられないですよね、と問うことで、どこかに境界があるはず、と考えてみたり、記念硬貨は使えないですよね、どこまで使えるようにしますか。と考えることで2000円札を使うかどうか検討することにつなげる。極端な例を歓迎できる空気は、アイデアが生まれることにもつながる。ブレインストーミングの方法のひとつでもあるし、お昼ご飯を食べる場所のアイデアが出ないときに、マクドナルドにする?と提示することで呼び水となってアイデアが出るというマクドナルド理論(出典不詳)に近いかもしれない。
仕様の守備範囲を明確にすることで、問題に事前に対処できたり、開発のスコープを明らかにしてコストを守ることにもつながる。
ソフトウェア開発以外の例だと、環境問題への対処を考えてみる。そもそも環境問題がなんなのか明らかにするために、「人間が滅びれば解決する?」と極端に問うてみることで、それは本末転倒で、人間あっての環境だろう、と条件がより明らかになったり、とはいえ人口が環境問題の大きな因子なので、平和的に人口増加を抑えるためのリプロダクティブ・ヘルスライツの普及なんかが環境問題に有効かも、と議論できると建設的。ここで、人間が滅びれば解決など虚無主義者は出てけ!となってしまうともう建設的な議論はできなくなる。
この方法は、大学の研究室や、信頼関係ができている開発チームなどでは、自然に使われていることも多い気がする。
しかし、こうした議論になれていない人がいる場合には、極端なことを言って話題を脱線させたり揚げ足取りばかりするネガティブな人間だと思われてしまいかねず、環境問題の例でみたように信頼関係を失ってしまう危険がある。
たとえば、スマフォで決済するサービスがあって、マーケターが、予算をたくさんとってきたからお客さまが購入したときにランダムにX%くらいのひとには100%ポイントで還元させよう!ユーザ増やすぞ!これから各所調整していくぞ~ってテンション高くやってきたときに、エンジニアがそれって仕様大丈夫?お客様が還元に当選するまで返品繰り返したら大丈夫?とか、加盟店とグルになって当選狙ったりしたらどうなる?とか悪い例を質問し続けていったら、これから各所と交渉していこうとやる気に満ち溢れていたマーケターの人の勢いを挫くことにもなりかねない(もちろんこのお金を扱うビジネスの場合、そういう慎重さは絶対必要ですが)。そうして、一緒にサービスに取り組むべきマーケターとエンジニアのチームであるべきなのに、マーケター対エンジニアみたいな構図になってしまう(かなり簡略化して話しているので寓話だと思ってください。当然事業責任者とかプロダクトマネージャーとか法務と一緒にやる)。
そういう対立する構図になるのを避けつつ、前向きに、いい仕様をつくっていくために、チームに合わせたコミュニケーションが必要。
特に、すぐれたチームに長くいて、コミュニケーションコストが低い環境に慣れてしまった人ほど、チーム外の慣れていない人にすっと極端な例を使ってしまい危険かもしれない。
さらに、昨今話題になりがちな、Googleが生産性高い組織は心理的安全性がある!ということを半端に聞きかじった人がやらかしがちかもしれない。率直にものを言える環境であることが善、と信じ、そういう議論になれていないひとにもあまりに率直にものを話してしまい、傷つけたり衝突したりしてしまう。
自身もそれなりに知識がある分野なら、ヒアリングしたあとに、仕様を明確化するために、おそらくこうですけれどあっていますか?、とか判断を交えることで柔らかく伝えられるけれど、自身にとって土地勘のない分野にて、その分野に詳しいけれど仕様を明確化すること(システム開発とか)には不慣れな人*1に質問するときには、そういう知識に頼った配慮がしにくく難しい。
これは、メールの定型文のようで、冗長だけれど、例えば「仕様を明らかにするためにあえて極端な例を挙げるんですけれど・・・」と前置きをするとかはひとつの方法だろう。
なにかいいやり方・考え方があれば教えてください。
・
・・
・・・
ソフトウェア開発だと、まだ関係者が限られていて楽かもしれない。
利害関係者の多い、おおきな制度設計だとより難易度が上がる。社会問題への対策も、大義があることをやろうとしているのに細かいことばかり気にされて、本質ではないと反感をもってしまう人も多い。
小さな会社内のルールなら、モラルを期待できるけれど、行政がつくる制度では隙間をつかれないように注意する必要がある。けれど、あまり議論に時間をさけずに、なあなあですませるための妥協的制度になって、例外規則が増えて運用の負荷が増えたり換骨奪胎されてしまう。軽減税率のことです。
関連する話題
Twitterでの、人のたんなる感想や思い付きに対して、反例を挙げて論理的に間違っていると断罪したり、揚げ足をとる人々もこの一種なのではと思ったりもするけれど、別の根深さがあるので触れないでおきます。
この記事は、3/14の深夜にタルトタタンを焼きながら書きました。タルトタタンも定義がいろいろあってさまざまなレシピがある。