這次卻不一樣。我們看到的不是「繼續觀看」按鈕,而是「開始免費試用」。
我心想,這沒什麼大不了的。信用卡資訊一定是因為不同步了。
串流服務需要綁定信用卡。我們在那裡登記的卡片最近剛過期並換了新卡。有些供應商對此會比較寬容,或者能夠自動更新卡片資訊——但這次可能不行?
一切都奏效了……大概五分鐘後 🤨
我們剛看完「上一集回顧」,播放就暫停了,然後又出現了令人討厭的「開始免費試用」訊息。
有疑慮時,就再關掉再重新打開一次。
我們的精彩電視節目被令人沮喪的除錯過程取代,我變得非常煩躁。
我不太喜歡打電話。更不喜歡打給客服。但我的煩躁感給了我力量,讓我拿起電話撥打了信用卡客服專線。
我就這樣在信用卡公司和串流供應商的客服之間被來回推託。
他們將我升級到更高級別的客服人員。我耐心地等待,然後向每一位新的客服人員詳細重複了整個故事。
每一方都聲稱、堅持、發誓問題不在他們那邊。一切都很正常!問題肯定在另一邊?
這些都是有效的除錯步驟。它們出現在客服腳本裡是有充分理由的!我相信它們能解決許多人的問題。但這裡不行!
那是一個星期五晚上,我卻花了大把時間在電話裡和客服溝通。
我只想和家人一起看電視。
這時,已經很晚了——即使一切神奇地恢復正常,也太晚開始看節目了。
但你知道那種揮之不去、讓你無法入睡的煩惱嗎?
是的。我睡不著。我的腦子一直在轉!
我登入了銀行網站,將帳戶從串流服務中解除連結,然後就去睡了。我睡得像個嬰兒!
我屏住呼吸,等待了五分鐘……十分鐘……十五分鐘。沒有取消郵件!
顯然,我無法證明到底發生了什麼。
但我之前有一些處理棘手系統問題的經驗。常讀者可能還記得,我曾解決過「只有下雨天才有效的 Wi-Fi」的問題。我也弄清楚了為什麼 Safari 會在第二次造訪時才封鎖某些網頁。
我透過思考、做出預測並進行測試來解決了這個問題。奏效了,所以我對我的理論很有信心!
在深入探討之前,先簡要回顧一下事實:
用一句話來說:「建立是同步的,解除連結是非同步的。」這是一個競合條件!
從我的角度來看,我先解除了帳戶連結,然後才重新連結。銀行系統也觀察到了相同的順序!但串流供應商卻觀察到了相反的順序:彷彿是先連結帳戶,然後在幾分鐘後解除連結。
銀行和串流供應商之間的帳戶連結是一個同步過程,(至少大部分是——使用者可觀察的部分是同步的,但背後很可能還有額外的非同步工作。)無論是出於技術還是使用者體驗的原因。例如,讓使用者盡快獲得存取權是有道理的!「點擊這裡即可完成」感覺很好,「點擊這裡,我們會在幾分鐘內發送電子郵件給你」則不然。為了實現這一點:
解除帳戶連結是非同步的,這同樣是出於技術和使用者體驗的原因。一個部分同步、部分非同步的工作流程比一個完全屬於某一端的更難建構。在這裡,純粹的非同步比純粹的同步更有意義:
非同步工作流程的延遲通常比同步的要高。非同步工作負載的彈性通常需要更繁重步驟,例如將資料持久化儲存在磁碟上。
在解除帳戶連結的情況下,也沒有業務上的壓力需要優化延遲。只要它能正常工作,就沒問題——五分鐘和五秒鐘在這裡的品質是相同的。通常是這樣!
串流供應商的政策是要求提供有效的信用卡,即使是透過信用卡優惠獲得的免費會員。
回想一下,我的家人和我已經在那裡觀看了幾個月的節目。所有這些麻煩都發生在我們登記的信用卡到期時!
最有可能的事件順序(我在這方面的信心遠不如在另一部分……)與以下情況押韻。
我們的電視應用程式注意到我們的帳戶已不再處於良好狀態——我們登記的卡片已過期。這違反了政策,因此在繼續之前需要糾正。
真實世界很複雜,所以好的系統很難建構!
我講述這個故事,並不是為了將建構者推到比喻的巴士底下,而是懷著一種孩童般的驚奇感,驚嘆於像這樣的案例是例外而非規則。
如果我打開電燈開關,燈就會亮起——但我不需要知道那些電子是從哪裡來的,也不知道它們是如何到達這裡的。太神奇了!!
只有在事情不起作用時,我們才會注意到手邊的系統。抱怨服務中斷意味著預設情況是事情就是這樣運作的!
在複雜的世界裡,「正常運作」並非自然狀態!這證明了許多人的共同努力和技能,才能建構並維護好系統,使其運作得足夠長久,以至於變得無形。
一個悄然變得無形的系統應該受到讚揚。這就是為什麼這篇文章存在的理由。