主播與營運後台:沒有一個叫「後台」的東西

· tech

#war-story#live-commerce#internal-tools

📑 目錄

前八章寫的是交易的骨架:留言進來、庫存卡住、錢收好、貨出門。這章換一個視角——站在直播現場的人,看到的是什麼。講「後台」之前先劇透結論:這個系統裡沒有一個叫「後台」的東西,有的是一組角色介面,每個人打開的畫面,只做他此刻的事。

一場直播,是一場演出

先看現場的分工。主播在鏡頭前喊 key、講價、跟廠商加貨——他沒有時間操作任何平台;所有平台操作都交給直播助理:商品資訊、起標結標、追加庫存。但主播不能瞎演:賣了幾件、誰在下單、多少人在看——這些數據他要即時看到,才抓得住直播的節奏——賣爆了現場加碼,冷場了趕快換品。

用劇場的話說:演員看提詞機,舞台監督控機關。這個分工直接決定了介面怎麼切:

主播 只看,不操作 留言流 (帶黑名單標籤) 販賣數量 下單的人 觀看人數 (FB API) 用數據抓節奏 直播助理 直播的操作台 商品資訊填入 (事前填/臨時開) 起標・結標 重新起標 追加庫存 替主播動手 營運 另外的獨立頁面 結束檔期 運費設定 入庫單 配貨 管檔期的節奏 客服 處理例外 調整購物車 清除購物車 多重綁定 接住殘量 工程師 Django admin 安全操作台 Celery task 花式需求 (半成品試驗場) 不確定的先住這 底下是同一套事實與 API——同一份資料,五扇不同的窗
沒有一個叫「後台」的東西:每個角色打開的畫面,只做他此刻的事。

主播 dashboard:數據是節奏感

主播的畫面沒有任何按鈕值得按——它是起手式裡那條 WebSocket 唯一服務的對象:留言即時推上來、賣了幾件、誰下了單、FB API 拉回來的觀看人數。全部只看

兩個細節值得停:

  • 留言流上帶著黑名單標籤。 系統層面,黑名單的留言 batch 根本不處理;但介面層面,主播看得到這個人是黑名單——喊單現場的人肉決策(這位的單口頭跳過、不留貨)有了即時情報。風控不只是過濾器,還是遞到決策者手上的一張情報卡,這條線(連同 batch 怎麼快判黑名單)風控章會收回來。
  • 數據的組成是「自家事實+平台數據」的混搭。 賣量、下單人來自自己的帳本,觀看數來自 FB API——主播不在乎來源,他在乎的是「現在場子熱不熱、貨走不走得動」。儀表板的組織原則是使用者的問題,不是資料的出處——這跟我後來在 Grafana 系列寫的「一個 panel 回答一個問題」是同一件事,只是當年沒有這些詞彙。

助理與營運:操作台的兩種節奏

助理 dashboard 是直播的操作台,按鈕跟著直播的分鐘級節奏走:商品資訊(支援事前建檔,也支援臨時開——主播現場拿到貨就要賣,系統不賭「一定來得及事前填」)、起標、結標、重新起標(重喊的 UI 殼)、追加庫存——庫存章那個熱列重試的現場操作者,就是助理。

營運的頁面是另外一組,節奏是檔期級的:結束檔期(大掃除)、運費設定、入庫單、配貨。同樣是「操作」,直播操作和檔期管理被拆成兩組介面——因為操作的節奏不同:一個以秒計,搶的是直播的當下;一個以天計,管的是檔期的收與放。把它們混在同一個畫面,快的會被慢的擋路。

admin:不確定需求的試驗場

工程師自己的介面是 Django admin,而且只有工程師能用——第一個理由很樸素:直接改 DB 太危險,admin 是一層不會手滑的安全操作台,順手管 Celery task 排程。

第二個理由值得一整節:admin 是不確定需求的試驗場。需求進來,做好要花時間、但沒人確定它是不是真需求——最貴的兩種錯誤是「花兩週做一個沒人用的漂亮介面」和「直接拒絕、錯過真需求」。當年的第三條路:用部分 admin 功能拼一個不是很好用的半成品,先讓需求活著:

需求:不確定 確定・高頻 admin 半成品 醜,但便宜・工程師代操 需求在這裡證明自己 被抱怨= 畢業申請 自建角色介面 被證明的需求住這裡 好用是標配 高頻到 極致 dashboard 連操作都省掉 只留下「看」 介面的投資額度 = 需求的確定度
半成品不是恥辱,是策略:真需求會用抱怨替自己申請畢業,偽需求便宜地死在 admin 裡。

真需求會被抱怨「這個好難用」——抱怨就是畢業申請,值得升級成自建介面;偽需求就安靜地死在 admin 裡,成本趨近零。回頭看,「每天上線十幾個 feature」的另一面就在這:不是每個 feature 都做到好,是每個 feature 都花了恰如其分的成本

重來會補什麼

這章的當年設計,重來幾乎全部保留——角色分工、成熟度光譜、看與操作分離,都是對的。只補兩件:

  1. 後台操作的 audit log 全面化。 入庫單、配貨當年就有紀錄,但起標結標、追加庫存、運費變更這些操作也該一律留痕(誰、何時、改了什麼)——它是對帳章的證據鏈,也是權限章的地基。
  2. 追加庫存走調整帳。 庫存章提過的 adjustments ledger——受益者就是那位在直播現場按到失敗、只能重按的助理。

反思

內部使用者,是你最重的 power user

外部客人一天用你的系統三分鐘,助理和營運一天用八小時;客人遇到卡頓會離開,助理遇到卡頓,主播的節奏就斷在鏡頭前。內部工具的每一秒延遲、每一次誤觸,都在直播現場被放大成真金白銀。這個團隊從第一天就把內部工具當產品做(身分章講過它的出身),而我後來的體會是:內部工具的品質,決定的不是「員工爽不爽」,是整個營運的反應速度——它是組織的神經傳導速度。

半成品是策略,不是恥辱

admin 試驗場教我的事:做產品的本質是管理不確定性,而介面是最貴的下注方式之一。把每個需求都做到好看,等於對每個未經證實的假設下重注;試驗場讓下注額度跟著證據走——半成品的「難用」不是品質問題,是刻意保留的畢業門檻:願意忍受難用還一直來用的,才是真需求。工程師的自尊常常受不了自己交出半成品——但恰如其分的粗糙,比不合時宜的精緻更專業。

為「看」設計和為「做」設計,是兩種專業

主播的畫面一顆按鈕都沒有,助理的畫面全是按鈕——這不是巧合,是任務決定介面:看的介面要的是掃一眼就懂(資訊密度、即時性、不打擾),做的介面要的是不出錯(明確的動作、可預期的結果、防呆)。多數難用的後台,病根都是把兩者揉在一起——要看的人繞過一堆按鈕,要做的人在圖表裡找入口。切介面的判準從來不是「這些功能相不相關」,是「這個人此刻的任務是什麼」——一個畫面,一種任務,一種節奏。