ほいで、仕様に対応する概念として、ぼくはよく「挙動」という言葉を用います。
正常系では「アクションAとアクションBを経てビューCにアクセスする」という操作フローがあったとして。いろいろをすっ飛ばしていきなりビューCにアクセスされたらどうなるか。ウェブのECでいえば、何も買わずに購入完了ページにアクセスするような話。
設計の段階で、そういった例外的な操作に対して一切の考慮がなされなかったり(誰もそういった状況を想像できなかった場合)、そういった操作は思い浮かんでいたけれど「レアケース」として切り捨ててその場合のふるまいについて相談と合意形成をしなかったりすると、そこの操作については「仕様が定義されていない」ということになると思う。
ただ、ソフトウェアなので、試しにそういった操作をしてみれば、なにかしらの挙動にはなるはずだ。例えば Internal Server Error が発生する、といった挙動になるかもしれない。
このときに、もしチームメンバーから「エラーになるのは仕様ですか?」と問われれば、ぼくは「挙動です」と答えたくなる。仕様については、いっしょに考えましょう。実装と挙動については、開発者である以上は、包み隠さず説明します、という気持ち。
ここで「レアケースなんで、エラーになるのは仕様です」と言ってしまうと、まるで意図してエラーを返している、というようなことになるので、ぼくはなるべくそうは言いたくない。仕様であれば、事前に関係者間で合意が取れているはずだし、ユーザから見てもある程度は納得しやすい挙動になっているはずだ。「これは仕様ですか?」と聞かれてしまうようなシーンの何割かは、単に挙動に対して質問されているのだと経験的には感じる。