暫緩發布後的第二天,承遠收到一封主旨只有四個字的信。
「鬆餅不見了。」
寄件人是一位叫林倩如的母親。她和女兒去年去過一次短短的旅行,故事書封面是一盤不太漂亮的鬆餅。她在信裡說,照片已經重新出現,但其中六段文字仍是空白。
其中一段,是女兒對早餐的回答。
承遠記得那本故事書。測試時,他曾看過封面縮圖,也記得母親在備註裡寫:她本來以為孩子只記得飯店早餐,後來才發現不是。
他立刻打開備份。
資料庫裡還有日期、照片與文字長度,卻沒有那句話本身。像書架上的標籤仍寫著「這裡曾經放過一封信」,信卻真的不在了。
承遠查了兩個晚上。
第三天,他請朋友再查一次。
第四天,他終於承認,那六段文字無法從任何備份復原。
他打電話給林倩如。
電話接通後,他先說了自己的名字,接著說明發生什麼事。他沒有用同步、索引、寫入失敗或任何可以把責任包起來的字。
「我們把你寫過的六段文字弄丟了。」
電話那頭沉默很久。
「你們不是說要幫人把記憶留下來嗎?」她問。
「是。」
「那你知道這跟購物清單不一樣吧?」
「知道。」
「購物清單不見了,我可以再寫。她那天說的話,我現在不確定還記不記得一模一樣。」
承遠握著手機,想起自己小時候那張只剩「宜蘭,暑假」的照片。
他說:「我沒有辦法把原來那句話還給你。」
那是他做TripTales以來,最難說出口的一句話。
他提供退款、資料匯出與人工協助。林倩如都沒有立刻回答。
「我現在很生氣。」她最後說。
「你應該生氣。」
「你不要把我寫成一個最後會感謝你的使用者。」
承遠愣了一下。
「好。」他說。
掛電話後,他坐在書房裡,第一次真正想把TripTales關掉。
不是因為沒有人使用,也不是因為做不下去,而是因為產品最核心的承諾被它自己違反了。它原本想保護那些差點消失的句子,現在卻成了讓句子消失的東西。
以晴坐到他旁邊,沒有說「至少照片還在」,也沒有說「誰都會犯錯」。
「你準備怎麼辦?」
「把能找的都找回來。」
「找不回來的呢?」
承遠看著那六個空白欄位。
「我不知道。」
「那就不要假裝知道。」
隔天,他在測試版本裡加了一個暫時的頁面。頁面不叫「復原」,而叫「重新想起」。它會把仍然存在的照片、日期與地點放在一起,再問幾個簡單的問題:那天誰坐在你旁邊?你們為什麼笑?有沒有一句話,現在還記得大概的意思?
頁面最上方寫得很清楚:這不是原始紀錄。這是你們今天重新說出的版本。
承遠把連結寄給林倩如,沒有要求她使用。
一個星期後,後台出現一筆新內容。
照片仍是那盤鬆餅。
女兒的回答只有兩句:
「我記得媽媽把最後一顆草莓給我。因為她以為我沒看到。」
下面是母親補上的一句話:
「原來她記得的不是早餐,是我。」
林倩如另外寄了一封信。
「我還是很生氣。這次我們重新說了一遍,不代表原來那句不重要。」
下一段才寫:
「但謝謝你沒有假裝把它修好了。」
承遠把兩句話一起印出來,貼在書房牆上。他沒有只留下比較好看的那一句。
App因此延後了六十三天。
四十三個測試家庭裡,有十二個離開。有人不願意再把資料交給它,有人只是失去耐心。承遠沒有挽留,也沒有把流失數字藏在另一張報表裡。
他和朋友重做備份、匯出與復原機制,每一個家庭都能把自己的照片與文字完整帶走。產品不再要求別人相信它永遠不會出錯,而是必須先讓使用者知道:即使有一天它不存在,你的故事仍然屬於你。
公司那邊,周總監取消了承遠帶領跨國發表的安排。
「這不是處罰。」周總監說,「你現在沒有容量。我要保護團隊,也要保護你不要再承諾一個做不到的版本。」
承遠看著會議名單上被換掉的名字,心裡仍然痛了一下。
那是他努力很多年才等到的位置。
「我理解。」他說。
這一次,他沒有說自己可以再擠。
TripTales重新上架那天,沒有安排發布會。承遠、以晴和兩個孩子坐在餐桌旁,按下按鈕後繼續吃晚餐。
子澄問:「這次如果有人東西不見呢?」
「先停止,先說實話,再想辦法。」承遠回答。
子衡問:「你有寫進流程嗎?」
「有。」
「有測試嗎?」
「有。」
「誰測的?」
承遠指向他。
子衡這才點頭。
第一個真正的使用者,不是那個寫信感謝他的人。
是那個有權生氣、有權離開,而他仍然必須好好聽完的人。