你是不是也遇過這種場面:產品會議上,PM 說「這功能 web 都做好了,手機就做個畫面接一下 API 吧」,然後你腦內警鈴大響,因為你知道接下來會發生三件事——時程被壓扁、責任變模糊、最後 bug 爆炸還要你背。
我先把結論丟桌上:把 mobile 叫做「frontend」會直接把 iOS/Android 的平台責任切掉,連帶讓預算、排程、招募、品質門檻一起下滑,最後你得到的不是「省事」,是「線上事故的機率變大」。
- 先問一句:你們的職稱/JD 會寫「Frontend Mobile Developer」嗎?
- 再問一句:誰負責 crash、ANR、cold start、離線、推播、深連結?有名字嗎?
- 現場驗屍:App Store/Google Play 卡審、分批上線、回滾,不是你按一下就有。
- 最常見誤判:把「UI」當成全部,忽略 lifecycle、電量、網路、權限、裝置差異。
- 最省吵架的做法:拿數字:啟動時間、崩潰率、ANR、掉幀、重試矩陣。
手機不是前端,是前線
行動 App 是獨立的平台工程工作流,不是把 Web 畫面搬進手機;iOS 與 Android 牽涉 App Store 上架、生命周期、裝置 API、效能預算與資安責任,所以「把 mobile 當 frontend」會讓範疇、時程與品質門檻一起失真。
講到「前線」我不是在喊口號啦,我是說:用戶下單、登入、付款、定位、推播、掃碼、拍照上傳——很多公司的營收入口就卡在手機那個小小的畫面裡。
你把它當「只是 UI」,就像把便利商店的收銀台當成「只是桌面」。
桌面壞掉,錢就收不到。就這樣。
具體一點:Web 的部署你可以自己掌控(上線、回滾、灰度、熱修),但 mobile 你要面對 App Store/Google Play 審核、分批釋出、版本滲透率、甚至使用者不更新。這不是情緒,這是流程。
而且手機還有一個很現實的東西:電量。
你在後台跑太兇,使用者只會記得「你這 App 很耗電」,然後刪掉。沒有第二句。
Web client 不等於 mobile app
Web app 是瀏覽器的應用,mobile app 是 iOS/Android 平台的應用;兩者可以共用後端服務與商業規則,但平台架構、生命周期、權限與效能限制不同,所以不能用同一個「前端心智模型」硬套。
你看 Netflix、Shopify、Facebook、WhatsApp 這種等級的產品,web、iOS、Android 各自有 client,後端可能共用一堆東西,但 client 端不會「假裝大家都一樣」。
因為一樣就會出事。
我在一些團隊看過那種「web 畫面做完了,mobile 跟著切」的節奏,前兩週看起來很順,第三週開始出現:
- 同一個畫面在低階 Android 掉幀,滑一下像在拖行李箱
- iOS 因為背景任務被系統殺掉,離線資料回來就亂序
- 深連結沒想好,推播點了進不去正確頁
- 權限彈窗順序不對,轉換率掉一截,還找不到原因
這些都不是「把 CSS 調一調」能解的問題。
為什麼一句 frontend 會害到你們的預算和權力
職稱與用語會改寫組織期待:把 mobile 稱為「frontend」會讓團隊被期待只做呈現層,進而被砍掉架構、效能、資安、可觀測性與發版治理的預算與決策權,最後手機端在規劃桌上拿不到位置。
這段有點像心理戰,但其實很機械:詞 → 期待 → 預算 → 人力 → 成果。
你去看徵才寫「Frontend Mobile Developer」或「Mobile UI Engineer」,聽起來好像只是描述工作內容,但它默默把責任切成「你只要把設計稿變成元件」。
那 crash 呢?
ANR 呢?
隱私同意流程呢?
都會變成「反正有人會處理」。然後沒有人。
標題會塑造期待,期待會塑造預算,預算會塑造你在會議室裡能不能說話。
在台灣的現場感:你只要去 104 或 LinkedIn 看一圈,就會看到「前端 + mobile」混在一起的 JD;然後公司又很愛說「我們要快」。快可以,但你得先承認流程不同。
再插一個小小的在地點:iOS 這邊你不只要過 App Store Review Guideline,那個隱私標示(Privacy Nutrition Labels)跟 ATT(AppTrackingTransparency)流程,你做電商、廣告、分析 SDK 的時候,真的會被問到。
Android 也一樣,Google Play 的政策更新不是擺設。
你不把這些算進「mobile 的工作」,那是誰的工作?
技術真相:mobile 會碰到一整串你躲不掉的東西
嚴肅的 mobile app 需要端到端工程能力,包含 CI/CD、發版列車、feature flags、崩潰門檻、併發與生命周期、離線同步、裝置 API、效能監控與資安合規,所以 mobile 工程不是單純 UI 實作。
我知道你可能會想吐槽:「有些 App 就是 webview 包一包啊。」
對,有。
但那是例外,不是你拿來當組織設計的基準。
把清單攤開:
- 架構與發版:CI/CD、SAST、release trains、feature flags、staged rollouts、crash-driven gates、App Store 限制、hotfix 通道
- 併發與生命周期:Swift Concurrency、Kotlin Coroutines、前景/背景切換、排程但不要把電量榨乾、不要卡 UI thread
- 資料與可靠性:本地儲存、衝突解決、offline-first sync、行動網路節流、backoff + retry 策略
- 體驗與系統 API:推播、in-app 通知、deep links、universal links、widgets、定位、藍牙、相機、生物辨識
- 效能與遙測:cold start / warm start 預算、ANR、記憶體壓力、disk I/O、trace 等級的可觀測性與隱私界線
- 資安與合規:Keychain/Keystore、device attestation、傳輸安全、PII 控制、同意流程、GDPR 類型的要求(你產品出海就會碰)
- 規模與模組化:feature modules、共享 design system、server-driven UI 但不踩爆效能與可及性
- 端上 AI:輕量模型、embeddings、推論的安全護欄、能不出裝置就不出裝置的資料路徑
你看,這哪裡像「只是前端」。
而且這些東西有個共同點:你不做,使用者會用一星評論幫你做「公告」。很快的那種。
風險矩陣:你把 mobile 當 frontend 之後,通常怎麼爆
把 mobile 定位成「frontend」最常引爆的是四類風險:時程失真、品質門檻失守、資安與隱私缺口、以及責任歸屬不清;這些風險會在上線後以崩潰率、ANR、轉換率下滑與緊急修版成本的形式回到你身上。
我不想用很玄的詞,我用一個表。
你可以拿去會議室放投影片,或直接貼到群組。
| 風險事件 | 觸發徵兆 | 影響範圍 | 嚴重度 | 機率 | 你可以立刻做的動作 |
|---|---|---|---|---|---|
| 時程被「web 速度」綁架 | 一句「UI 很快吧」+ 沒人提 App Store/版本滲透率 | 排程、跨團隊依賴、上線窗口 | 高 | 高 | 把「審核時間、分批釋出、回滾方式」寫進里程碑;沒有就不估 |
| Crash/ANR 被當成「使用者手機爛」 | 只追功能,不看崩潰門檻;上線後才開始裝監控 | 評分、留存、客服量 | 高 | 中 | 先定 crash-free users、ANR rate 的門檻,當成發版 gate |
| 離線與同步沒人認領 | API 成功就算完成;沒寫 retry/backoff;沒測弱網 | 交易、資料一致性、客訴 | 高 | 中 | 畫出 retry matrix:弱網、斷網、切換 Wi‑Fi/4G、重登 |
| 推播/深連結變成「最後再接」 | 需求文件只寫「支援推播」;沒定 deep link 路由與權限 | 行銷活動、轉換、追蹤 | 中 | 高 | 把推播 payload、deep link schema、fallback 行為定成規格 |
| 隱私與同意流程踩雷 | SDK 先加再說;ATT/隱私標示當成上架前 checklist | 上架、法遵、品牌信任 | 高 | 中 | 先盤點資料欄位與用途;同意流程與事件上報一起設計 |
| 責任邊界模糊,最後變成「誰都不是」 | 「這個應該後端做吧」vs「前端自己處理」吵不停 | 品質、速度、團隊士氣 | 中 | 高 | 畫 ownership map:sync、通知、deep link、design tokens、analytics |
拿得出手的證據:你在會議室可以直接用這些問法
當有人把 mobile 當「只是 frontend」時,最有用的是拿具體指標與邊界來問:cold start 預算、ANR、崩潰率、離線路徑、重試策略、發版流程與責任地圖;這些問題會把「語言降級」還原成「工程現實」。
我喜歡用「問問題」代替吵架。偵探那套。
你可以照抄:
- 延遲:「這畫面從點到看到內容,我們的 cold start / warm start 目標是多少秒?」
- 可靠性:「斷網、弱網、切換基地台時,這個流程怎麼走?重試幾次?間隔怎麼算?」
- 效能:「Android 的 ANR rate 我們要壓在多少?掉幀要怎麼量?」
- 資安:「登入 token 放哪?Keychain/Keystore?有 device attestation 需求嗎?」
- 發版:「今天 5 點出事,我們能不能立刻修?如果不能,最短路徑是什麼?審核要幾天?」
- 邊界:「sync、推播、deep link、analytics event、design tokens,誰負責?名字寫出來。」
你看,這些問題一問,大家就會開始安靜。
安靜不是因為你兇,是因為現實被搬上桌。
跨平台不是原罪,但不是免死金牌
跨平台方案可以是商業選擇,但一旦需求牽涉深度原生 API、複雜背景任務或嚴格效能門檻,就會產生明確的工程成本與限制;所以跨平台應該是架構決策,而不是用來壓縮 mobile 範疇的口頭禪。
這段我會講得很保守,因為太多人把它當宗教戰。
我不想。
你可以用一個很土但有效的判斷:如果你的產品需要「定位常駐 + 藍牙 + 背景同步 + 推播精準導頁 + 低耗電」,你還想用「反正一套打天下」去談,那多半會痛。
會痛在哪?
debug 痛、效能痛、最後排程也痛。
但如果你的 App 真的只是資訊展示、流程很短、裝置 API 幾乎不碰,那跨平台就可能是合理選項。
這不是立場,是條件。
不同族群怎麼選:你是誰,就用哪一套決策
Mobile 團隊要不要獨立成「平台」與「一等公民」,取決於產品是否依賴可靠性、效能、裝置 API 與發版治理;如果你的使用者情境越接近「即時、交易、推播、定位、弱網」,就越該把 mobile 當作核心工程而不是附屬前端。
好,這段我用群組聊天的口氣講,因為你可能只是想要一個「那我到底怎麼選」的答案 😅
- 如果你是外食族電商或即時配送:那個「下單成功」跟「定位準不準」會直接影響客訴量。你就別把 mobile 當 UI 了,離線、重試、推播導頁、地圖 SDK 的行為都要有人扛。
- 如果你是夜班或輪班工具:背景任務、通知可靠性、低電量模式的行為要先想好。不然使用者半夜收不到通知,你的產品就像沒插電。
- 如果你是親子族群的內容或學習 App:裝置限制、家長控管、登入切換、資料同步要穩。小孩不會跟你「稍後再試」,他會直接按叉叉。
- 如果你是銀髮族常用服務:字體縮放、動態字級、VoiceOver/TalkBack、按鈕點擊區域、流程不要繞。這些不是設計師單獨能解,工程要一起扛。
- 如果你只是活動頁或短期行銷包裝:那你可以用比較薄的 mobile 層,甚至 webview,但要誠實寫在需求與風險上,不要假裝「跟原生一樣」。
講到銀髮我突然想到一個很現實的點:在台灣,很多服務要接簡訊 OTP、金融驗證、或是政府相關的身分流程(你知道的,那些頁面偶爾長得很…嗯),手機端的可用性一爛,客服電話就會響到你懷疑人生。
好,拉回來。
我自己的偏見與一個小提醒
把 mobile 當「只是 frontend」不是省成本,而是把風險延後到上線後用更貴的方式付;真正省麻煩的做法是把 mobile 當獨立 workstream,提早定義效能預算、可靠性門檻、資安與發版流程,讓責任邊界清清楚楚。
我會承認我有偏見:我看到「就做個畫面」這句話就會想追問十個問題。
因為太常見了。
你以為你在省,結果是在買一張「之後一定要加班」的預付卡。
工具與標準這邊,給你幾個能落地的:
- Apple App Store Review Guidelines:上架審核與政策規則的那本,需求一碰到付款、隱私、追蹤就要翻
- Google Play policy center:Android 上架政策與資料安全相關規範,尤其是 SDK 與資料收集
- Android ANR 與啟動時間指標:你至少要能說出「我們要看哪個指標」而不是「感覺有點卡」
- iOS Instruments:抓啟動、記憶體、I/O 的工具,會用一次你就知道「原來卡在這」
- OWASP MASVS:如果你們產品碰到帳號、金流、敏感資料,這套行動資安驗證標準可以當共同語言
不要全做。
先挑一個你們現在最常被罵的點,建立「可量」的門檻。
Mobile 不是房子的油漆;它是門口、走廊、客廳,用戶三秒內就決定要不要留下來。
小挑戰:你今天就挑一個你們正在做的 mobile 需求,做一件事就好——把「誰負責 crash/ANR、誰負責離線同步、誰負責推播與 deep link」寫成三行字,貼到你們的群組裡。
不需要吵。
你只是在把責任照出來。
如果貼出去之後,大家開始問「欸那 ANR 是什麼」,那就更好了。案件有線索了 😉
