前面十三天寫的是交易的骨架:留言進來、庫存卡住、錢收好、貨出門。這章換一個視角——站在直播現場的人,看到的是什麼。講「後台」之前先劇透結論:這個系統裡沒有一個叫「後台」的東西,有的是一組角色介面,每個人打開的畫面,只做他此刻的事。
先看現場的分工。主播在鏡頭前喊 key、講價、跟廠商加貨——他沒有時間操作任何平台;所有平台操作都交給直播助理:商品資訊、起標結標、追加庫存。但主播不能瞎演:賣了幾件、誰在下單、多少人在看——這些數據他要即時看到,才抓得住直播的節奏——賣爆了現場加碼,冷場了趕快換品。
用劇場的話說:演員看提詞機,舞台監督控機關。這個分工直接決定了介面怎麼切:

主播的畫面沒有任何按鈕值得按——它是起手式裡那條 WebSocket 唯一服務的對象:留言即時推上來、賣了幾件、誰下了單、FB API 拉回來的觀看人數。全部只看。
兩個細節值得停:
助理 dashboard 是直播的操作台,按鈕跟著直播的分鐘級節奏走:商品資訊(支援事前建檔,也支援臨時開——主播現場拿到貨就要賣,系統不賭「一定來得及事前填」)、起標、結標、重新起標(重喊的 UI 殼)、追加庫存——庫存章那個熱列重試的現場操作者,就是助理。
營運的頁面是另外一組,節奏是檔期級的:結束檔期(大掃除)、運費設定、入庫單、配貨。同樣是「操作」,直播操作和檔期管理被拆成兩組介面——因為操作的節奏不同:一個以秒計,搶的是直播的當下;一個以天計,管的是檔期的收與放。把它們混在同一個畫面,快的會被慢的擋路。
工程師自己的介面是 Django admin,而且只有工程師能用——第一個理由很樸素:直接改 DB 太危險,admin 是一層不會手滑的安全操作台,順手管 Celery task 排程。
第二個理由值得一整節:admin 是不確定需求的試驗場。需求進來,做好要花時間、但沒人確定它是不是真需求——最貴的兩種錯誤是「花兩週做一個沒人用的漂亮介面」和「直接拒絕、錯過真需求」。當年的第三條路:用部分 admin 功能拼一個不是很好用的半成品,先讓需求活著:

真需求會被抱怨「這個好難用」——抱怨就是畢業申請,值得升級成自建介面;偽需求就安靜地死在 admin 裡,成本趨近零。回頭看,「每天上線十幾個 feature」的另一面就在這:不是每個 feature 都做到好,是每個 feature 都花了恰如其分的成本。
這章的當年設計,重來幾乎全部保留——角色分工、成熟度光譜、看與操作分離,都是對的。只補兩件:
外部客人一天用你的系統三分鐘,助理和營運一天用八小時;客人遇到卡頓會離開,助理遇到卡頓,主播的節奏就斷在鏡頭前。內部工具的每一秒延遲、每一次誤觸,都在直播現場被放大成真金白銀。這個團隊從第一天就把內部工具當產品做(身分章講過它的出身),而我後來的體會是:內部工具的品質,決定的不是「員工爽不爽」,是整個營運的反應速度——它是組織的神經傳導速度。
admin 試驗場教我的事:做產品的本質是管理不確定性,而介面是最貴的下注方式之一。把每個需求都做到好看,等於對每個未經證實的假設下重注;試驗場讓下注額度跟著證據走——半成品的「難用」不是品質問題,是刻意保留的畢業門檻:願意忍受難用還一直來用的,才是真需求。工程師的自尊常常受不了自己交出半成品——但恰如其分的粗糙,比不合時宜的精緻更專業。
主播的畫面一顆按鈕都沒有,助理的畫面全是按鈕——這不是巧合,是任務決定介面:看的介面要的是掃一眼就懂(資訊密度、即時性、不打擾),做的介面要的是不出錯(明確的動作、可預期的結果、防呆)。多數難用的後台,病根都是把兩者揉在一起——要看的人繞過一堆按鈕,要做的人在圖表裡找入口。切介面的判準從來不是「這些功能相不相關」,是**「這個人此刻的任務是什麼」**——一個畫面,一種任務,一種節奏。
明天講一段誠實的失敗:權限,我們改了三次。
本文改寫自我的部落格系列《Re:從零開始做直播代購電商平台》,本篇完整版:https://blog.aidan.tw/blog/rezero-console/