あるとき、出発直前に航空券を予約したことがある。
支払いに成功しました。お金は口座から差し引かれました。
でも「予約が成功しました」と表示される代わりに、画面には短い1行だけが出ていた:
「処理中です。」
そのとき最初に思ったのは、システムが遅れているんだということだった。
やるべきことはすべて終わっていた。
じゃあ、ほかに何を待つ必要があるの?
あとになって気づいたのだが、たぶんシステムは本当に遅れているわけではない。
そのtransactionをすぐに完了させたくないだけだ。
変に聞こえる。
私たちはしばしば、決定には可能性が2つしかないと思ってしまう。許可されるか、許可されないか。
しかし、実際にはもう一つ別の選択肢がある。
許可はされる。でも今ではない。
これを読むと、@NewtonProtocolについてかなり深く考えさせられる。
私が面白いと思うのは、ポリシーが“allow”か“deny”かを答えることではない。
さらに小さな疑問がある:
正当なexecutionは、要求された時点で必ずすぐに起きる必要があるのか?
必ずしもそうだとは思わない。
許可するかどうかだけが、決定の価値を決めるわけではない実行がある。
それに加えて、システムがそれを“本当に”実行すると決めるタイミングの問題でもある。
このとき、「待つ」ことはもはや遅いシステムのサインではない。
それは、決定そのものの一部になり得る。
それが、私がかなり違うと感じるポイントだ。
通常、私たちは時間をただ「ボタンを押してから完了するまでの距離」だと思いがちだ。
でも、その一方で、時間がauthorizationのパラメータになることもある。
実行が間違っているからではない。
だからといって、実行が正しい=すぐに起こるべきだ、ということにはならない。
反論してやる。
あるポリシーが常に安全のために延期を選ぶなら、体験はすぐに不快なものになる。ユーザーは、明確な理由がないのに、あらゆる操作が遅いと感じ始める。
しかし、ポリシーのデフォルトが「すべての正当なexecutionは即時に実行されなければならない」と決めているなら、システムは「allow」と「deny」の間にある、とても重要な処理の一部を自ら失ってしまう。
@NewtonProtocol から見て取りたいのは、意思決定を下す能力だけではない。
つまり、ポリシーが「いつ実行を今すぐ行うべきか」と「もう少し待ってから行うほうが合理的か」を定義する方法のこと。
私にとって、良いauthorization layerは、何が許可されるかを決めるだけではない。
それは、場合によっては“ちょうどそのタイミング”こそが、その決定の一部であると理解していることでもある。
