「我們是一家牛肉麵店的IT部門」,iChef共同創辦人兼技術長何明政從連鎖餐廳麻膳堂為起點,選擇使用iPad作為終端介面,搭配iOS打造餐廳的雲端POS解決方案,從2012年創辦至今,在臺灣、香港已經超過1,000家餐廳使用iChef,而海外據點也擴展到新加坡、香港。
何明政表示:「iChef從餐廳的角度出發,思考什麼元件對產品最重要」,他會如此表示,是因為iChef的成立,跟麻膳堂的內部作業流程改革有密切關係。
當時,麻膳堂想擺脫傳統的收銀作業流程,正苦於找尋於適合的POS系統。剛好,麻膳堂創辦人認識了在國外從事資訊工作的何明政,對他透露了這個煩惱。何明政因此開始思考能否打造以iOS為基礎的餐廳POS,最後決定一同創辦了iChef。
何明政觀察,過去15至20年中,POS系統沒太大的改變,大部分產品多沿用工業電腦作為解決方案。不同於一般臺灣新創多聚焦於消費者端的應用產品,iChef一開始就想做「企業級解決方案」,主要客戶不是一般的消費者。
在開發iChef的過程中,何明政認為,最重要功能是前端功能,尤其「POS產業是高度客製化需求的產業」,何明政表示,iChef開發團隊每天都會收到新挑戰,如企業要求開發新報表功能、操作方式。但是,從創立iChef第一天起,「我們決定不做任何客製化」,而是將所有功能整合在單一產品中,打造一套到處適用的統一平臺。
但這也意味,iChef必須盡可能地整合每家餐廳各式各樣的需求,開發更多通用功能至POS產品中。
但是,iChef開發團隊只有6個人,為了扛起1,000家餐廳所用的POS系統,「沒有多餘的力氣處理後端的維運工作」,因此,何明政開始導入AWS,「讓開發團隊可以更專注在產品上。」
用Docker、ECS解決部署問題
因為不斷加入新功能,開發團隊不只頻繁地修改程式碼,甚至還經常改變資料架構(Data Schema),但這也讓程式部署變得越來越困難。例如,iChef用使用資料分析函式庫Pandas及Python擴充程式庫NumPy來設計報表功能,但這兩個函式庫需同時部署許多相依元件,使用EC2虛擬機器來部署報表功能的後端系統時相當費工,若遇上程式碼或Schema有異動時,維運負擔則更是雪上加霜。
所以,iChef進一步改用EC2容器服務(ECS),將所有需要的映像檔打包成Docker映像檔來簡化部署,「部署時,就不需要擔心程式的相依性問題。」何明政表示。
靠AWS Lambda搞定日常維運工作
儘管擁抱Docker,仍然不足以解決所有的維運問題,iChef開發團隊仍然會受到日常瑣事的干擾。「最困難的是就是工作排程」,何明政解釋,新創公司永遠都會把產品開發放在第一順位,其次,才是處理日常維運工作。可是,對IT來說,無論如何都得有人負責維運,怎麼辦?
5月報稅季就經常發生一些說大不大,但iChef又必須幫用戶解決的小事,尤其是電子發票格式、系統對帳等問題。身兼業務、客服和應用工程師的第一線人員儘管有能力解決問題,但要更新這名客戶的資料,得接觸後端資料庫,第一線人員沒有權限,得尋求內部IT的協助。可是這些日益增加的維運瑣事,又恐拖累IT團隊開發新功能的速度,「開發團隊得想辦法抄捷徑,快速解決問題。」何明政說。
像是iChef最近就碰到發票編號處理的問題,何明政不希望開發團隊花時間為此手動存取資料庫,也不想要為這樣的需求,特別開發一支後端系統來解決問題,「得找出更簡單的方法,讓一線人員具備自行排除問題的能力。」他說。
後來,iChef團隊利用內部慣用的通訊軟體Slack,在上面用腳本程式寫了一個軟體機器人(Bot)小程式,稱為「發票小精靈」,可以將發票處理SQL指令,透過AWS的無伺服器服務Lambda API,轉發到後端系統的資料庫服務中執行,再將處理結果拋回Slack。
例如,第一線人員需要查詢特定發票編號的資料時,只要在Slack特定討論頻道中,發出查詢這批發票的SQL指令,發票小精靈能自動擷取將這串指令,透過HTTPS通訊送給Lambda API,再由有權存取內部VPC環境的Lambda,呼叫AWS RDS資料庫服務來執行這段SQL指令,RDS傳回查詢結果後,同樣透過Lambda API將資料送到Slack的發票小精靈,發布到同一個討論頻道中,彷彿就像是發票小精靈作完了查詢工作後,將結果回覆給第一線人員一般。
「雖然這是簡單的資料庫讀取流程」,但何明政認為,這些簡單、小量的日常客服工作實作為腳本程式後,的確大幅簡化了iChef每日的營運工作。
他坦言,雖然iChef目前沒有穩定的DevOps工作成員,但是利用AWS、Slack拼湊的內部解決方案,連非IT團隊的成員也能夠使用,「因此仍然能夠繼續前進。」
加速公司營運,IT團隊要當領頭羊
何明政表示,維運工作的目的,是減輕企業內部的維運成本,但是新創公司往往會降低例行公事的優先順序,「永遠不會有人重視這些基本但重要的工作」,無形中逐漸累積的維運工作,回過頭來又讓開發團隊無法投入全部的力氣開發新產品。
更重要的是,何明政認為,企業要快速成長,就算開發團隊導入Scrum敏捷式工作流程,單靠IT團隊還是不夠,需要與其他部門一同協作。
「協助其他部門找到敏捷工作方式,是IT團隊的責任」, 就像是發票小精靈,不只降低IT部門的額外負擔,還可以幫助非IT部門快速處理例行瑣事的小幫手,就是一舉兩得的好例子。
身兼共同創辦人及技術長的何明政,自言「這兩個角色很極端」,身為技術長的角色,他想專注於開發而非解決瑣事,但作為創辦人,他必須確保iChef運作正常,「如果IT團隊替其他部門多著想,這是改變企業文化很好的出發點。」
自製軟體機器人「發票小精靈」
負責客服的第一線人員,只要在Slack特定頻道(圖中為Special-command)下達查詢發票的SQL指令,發票小精靈會自動擷取發言內容,呼叫Lambda API來完成查詢,並將結果自動回覆到對話中。
發票小精靈Lambda概念架構
客服人員在Slack中下達特定SQL指令後,會驅動發票小精靈Bot,將SQL指令透過Lambda API傳給內部VPC環境的RDS資料庫執行,RDS也透過Lambda API回傳結果給發票小精靈,自動發布到Slack中。