Freigeben über


【案例分享】Olo 如何以行動 DevOps 來增強超過 150 家餐廳的訂餐 App

Olo 提供給顧客與員工使用的 Xamarin app 幫助餐廳的品牌傳遞更快更精確與更個人化的服務給它們的顧客,建立顧客忠誠度與改善餐廳的營運。擁有超過 150 個品牌與 25 萬用戶的業務量,行動 DevOps 對於 Olo 的行動策略至關重要,而 Xamarin 幫助團隊傳遞最高品質的體驗給他們全球的客戶。

今天我們邀請了 Greg Shackles,為 Olo 的首席工程師與長久以來 Xamarin 社群的成員,來分享他對於行動開發的經驗和他給立志作為 app 開發者的建議。

 

告訴我們一點有關你的公司與你所扮演的角色。什麼是 Olo 而誰是你們的客戶?

我是 Olo 的首席工程師,這也表示每件我們所做的事我都有參與一點。

可以把 Olo 視為餐廳與這變化快速的市場間的數位橋梁。不論是要外送、遞送或簡單的電話訂購,我們直接整合品牌現存的系統,包含 POS 系統與忠誠度管理系統,來將數位商務帶到他們現存的營運中。

我們一般與大型多據點的品牌合作,通常超過 40 個位置。如果您曾用過 Five Guys 的 app,撥打 1-800-CHIPOTLE,或在線上訂購 Wingstop,那麼您就用過 Olo。

 

告訴我們有關你們的 app。

我們為餐廳發布了完整品牌的 iOS 與 Android app,讓他們的顧客可以直接與他們的品牌互動,客製化訂購他們真正想要的東西,在任何他們想要的平台,按照自己的節奏,並確保餐廳能夠收到正確的訂單。

有了這個 app,顧客可以很容易地找到離他們最近的店面,兌換忠誠物獎勵,看菜單,查看最近的或最愛的訂單,提前預訂,當抵達時讓他們可以 Skip The Line®,或甚至讓他們的訂單送出。我們開放 framework 讓客戶的機構利用我們的 API,而我們已經從 Sweetgreen 看到。

 

行動通訊在你們公司策略中扮演怎樣的角色?你們的行動產品有隨著時間進步嗎?

打從一開始,並在過去的十年中,行動通訊一直是 Olo 的基礎。

Noah Glass 我們的創辦人與 CEO,厭倦了每天早上排隊等他的咖啡,他看見了行動通訊解決這個問題的潛力,並創建了 Olo。在 2005 年,我們推出了一般行動電話的簡訊訂購;記得那是在最初版的 iPhone 問世之前幾年,而直到今天行動通訊仍然是我們平台的基石。

而我們現在不再支援簡訊訂購,我們的客戶從很多不同的平台處理與接收顧客訂單,包含網站、iOS、Android、電話,或甚至 Facebook 與 Twitter 的聊天介面。

 

你為什麼會選擇使用 Xamarin?

Olo 的 app 平台並不總是用 Xamarin 建置的。原本是用其他的 Framework 搭配 JavaScript,好一段時間這樣就已經足夠,但最終還是讓我們陷入困境。我們發現我們自己要對抗 framework 在我們和平台間的抽象(abstraction),而有時它需要花幾個星期才可以完成一個簡單的功能。這對我們的開發人員來說非常挫折,但更重要的是,這代表我們不能傳遞我們希望給客戶的體驗。

任何工程師都知道重寫一個平台並不輕鬆,但選擇使用 Xamarin 來重建它是一個明智的選擇。我們已經是一間 .NET 與 C# 的店了,所以能夠將我們一些現有厲害的工程師帶到行動的世界,充分利用他們現有的技術,將會是一個非常棒的機會。有了新的平台,我們可以提供一個穩定、完全原生的體驗給我們的用戶,同時還能讓我們的工程師開心。

 

當你聽到「原生 app」你有什麼想法?

我覺得就是 app 完全利用原生底下的 UI framework,而不是抽象,提供這種用戶都習慣且期望在那平台的體驗。原生 app 需要感覺原生並執行起來也像那樣。它們需要可以使用讓每個平台很獨特和有趣,並不只是建置它們所有之中大眾所接受的。

Xamarin 同時提供我們最棒的兩個世界,讓我們可以直接使用全部的原生 API,並且還讓我們可以輸入我們自己的抽象以我們想要的方式。

 

你通常在平台共享多少的程式碼?Wingstop-1_nexus6p-portrait

這個問題有一個限定常常被忽略:多少應該被共享的程式碼被分享在平台?分享程式碼是很棒的事,但是這不代表你需要避免去寫非共享的平台特定程式碼,如果它可以讓你的 app 在平台上更完美。讓我們的 app 開發人員可以為我們用戶撰寫最佳體驗的程式碼是我們的職責。

我們從共享大量的程式碼受益在多個不同的層級。在底層,一個核心的可攜式類別函式庫包含了應用程式的真正內涵:服務、資料庫存取、網路與呼叫 API、應用程式的流程、每個畫面背後的邏輯等等。在這層我們有很許多的單元測試,有辦法執行這些測試在個別的平台來確保相容性。

在這上面,我們實作了我們共享的 iOS 與 Android 層當作共享的程式專案,讓我們定義所有用來驅動 app 在每個平台的平台特定元件,相容於任何特定品牌。

對於一個特定品牌的 app,我們擁有大量的模具在建置與鷹架 (scaffolding) 管線上頭,讓我們可以產生獨特的專案們。

 

描述一下你開發的過程 – 你如何使用行動 DevOps / CI?

一個像我們這樣要維護這麼多不同 app 的平台,自動化與 CI 非常重要。每個提交在每個分支建置每一個專案,執行單元測試,與建置品牌專屬的 app,確保這整個流程是保持穩固的。

我們可以透過 HockeyApp ,點擊一個按鈕來部署任何品牌的 app 版本到任何我們的環境。我們有自動化的流程在應用程式商店 provisioning、打包與憑證,而且也使用 Xamarin.UITest 來自動生成螢幕截圖。

 

你如何測試你的 app?為什麼行動品質很重要?

就如同自動化,測試也很關鍵。我們非常自豪在傳遞不僅是原生和高性能,而且又極致穩定的 app。不像網頁,你可以很快送出修改,而用戶只要重新刷新就會看到,要發布 app 更新的障礙是較高的。所以在 app 送到用戶手上之前能查出越多問題越好。

我們從單元測試取得眾多的勝利。因為太多我們的 app 是從那層驅動,我們可以寫執行很快與測試 app 特定部分行為的測試。不用在 UI 上打轉,我們可以從網路呼叫來定義 app 的流程從一個畫面到另一個畫面來測試每一個東西。

我們也喜歡使用 Xamarin.UITest 與 Xamarin Test Cloud 來確定東西都運作正常。單元測試是很棒,但最重要的還是使用者體驗。

我們已經經歷了一些大的設計改變在最近幾個月,而且有辦法執行我們的 app 在 Xamarin Test Cloud 來看看不同的裝置如何處理(或不處理)那些較無價值的東西。我們有辦法快速輕鬆地抓出那些我們有可能沒找到的問題在任意的 Android 裝置。

 

你如何使用 HockeyApp?

我們使用 HockeyApp 純粹用來發布 beta 版,同時對內與對外。至於分析的部分,我們使用蠻多不同的技術,從像是 Google Analytics 與 Google Tag Manager 到我們自己設計用來檢視我們 app 表現的工具。

在 Xamarin Evolve 2016 我的部分提到我們怎麼來即時監控 app 在用戶端的性能表現。像 Olo 這樣的平台有一件有趣的事,就是我們有辦法看到廣大的品牌與用戶是如何與我們的 app 互動,而這也給了我們一個優勢,來學習與持續改善我們的流程與整體的用戶體驗。

 

你們的顧客與他們的用戶對你們的 app 有什麼看法?

我們一直都在追蹤顧客給我們的回饋與進行用戶測試。整體來說回饋都是非常正面的。每次只要有人留下對於我們 app 的評論,不管好的還是壞的,都會送到 app 團隊在 Slack 上的聊天室讓大家都能看到。

當一個品牌與我們合作推出 app 而他們的顧客為之瘋狂,是很讓人興奮的事。如果你想要知道我是什麼意思,到 Twitter 上搜尋 「Wingstop app」。

And on a Tuesday, God said, "let there be a #Portillos app!" #Dope

— Ricky Orozco (@RealRickyOrozco) 2016年8月9日

 

你有什麼建議要給剛開始投入於行動開發的開發者?有什麼很棒的資源?

部落格、影音服務像是 Pluralsight,與 Xamarin 官網的文件,有太多內容可以取得了。雖然這很棒,但是對於一個剛加入的開發者來說,可能會感到有點不知所措。

我給新加入的行動開發者一個最主要的建議就是從小處開始。不要一開始就丟一堆抽象到你與平台間,像是大的 MVVM framework 添加很多價值,還有許多魔法。無法否認的是像是 iOS 與 Android 這樣的平台,雖然它們有很多共通點,但是他們終究還是不同的。一開始先花一些時間來學習基本的操作,然後再深入一些抽象層,只要你了解了它們到底在做什麼。

您可以在 Xamarin Customers webpage 與 Microsoft’s Mobile DevOps Solution 了解更多有關我們的客戶如何轉換與顧客的關係與驅動內部的生產力.

 

本文翻譯自 How Olo Powers 150+ Restaurant Ordering Apps with Mobile DevOps


若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922