開発進捗会議の時の話です。

先日、ある開発チームの会議の際に、『予約のキャンセルと予約取り消しって同じですよね?』といった話題がありました。
『そんなの、あたりまえでしょ』とつっこみが入るかも知れませんが、本日はこの話題を。

ある予約システムの仕様を検討するプロジェクトチーム内の会議でのできごとです。
(キャンセル機能と、予約取り消し機能をどうするか?の仕様詰めの会議)

会話の流れとして、
・キャンセルはユーザーが行う操作
・予約取り消しはユーザーからキャンセルの電話連絡があって事務局が行う操作
という機能に対する会話でした。
予約の取り消しについて、どのように実現しようか?をみなで検討していた時のこと。

会議に参加し、一部始終を横で聞いていた若いプログラマーのA君が、
『予約のキャンセルと予約の取り消しって同じですよね?』と横から指摘がありました。
(なんでそんなことに悩むの?と、心の声が聞こえてきました)

私:『どこが同じなの?』
と聞き返すと、
A君:『キャンセルボタンが管理画面にあるか予約画面にあるかの違いだけでしょ?』
   『キャンセル処理自体は同じだと思います。』
私:『ごめん、そんなことはわかってますよ。』
A君:『???』
私:『運用を想像してみて』
A君:『???』
私:『このお客様は、きめ細やかな対応をモットーとして、電話コミュニケーションを大事にする!という話だったでしょ?』
  『ということは、エマージェンシー的な機能でなく、日常業務で使う機能。』
  『電話応対しながら、速やかに予約を特定、内容確認、キャンセル、だよね?』
  『って想像したら、キャンセルに行きつくまでの操作、大事でしょ?』
  『あと、予約者からのキャンセル以外に、天候等でのイベントも中止あるでしょ?』
  『その場合のキャンセル処理はどうする?』
  『中止とキャンセルは分ける?一緒にする?』
  『この打合せで、整理したいんです。』
  『何が最も効果的(ユーザーにとっても、我々開発側にとっても)か?を。』
  『機能実装する前には、処理でなく、具体的な運用を想像して考えてください。』
  『そのうえで同じなら問題ないですけどね。』
A君:『・・・』
   『はい』 (でも?が飛びまくって、納得してないような顔)

私:『はやくこのことを納得できるようになってください!』…と心の声
という話でした。

プログラマーは、深く掘り下げて緻密に作り上げていく必要があります。
だからこそ、作る前に、
『この機能は何の目的で必要なのか?』
『どういったことができないと駄目なのか?』
『どういう使われ方をするのか?』
等を考えて欲しいです。
そのためには、できるだけ全体を眺める(俯瞰する)ようにし、
仕様をきっちり整理した上で実際に作り込んで欲しいです。

プログラミングは、最後の最後にやる作業としてとらえて欲しいです。
とにかく、
『先に手を出すな!まずは運用を考えなさい!』
だと思います。