Sunday, June 29, 2014

PLATE點餐系統 開發手札

PLATE團隊負責人 Heron Yang 筆

PLATE點餐系統於2014年春天在交通大學第二餐廳運行一個月,累計約600位同學下載,數百位同學在系統上點餐,是由自發性、興趣與熱情驅使的在校同學共同開發15個月完成。
官方網站:http://plate.tw/,粉絲專頁:http://fb.com/plate.tw


Part 1 - 開發

2013年春,有位社團學長知道我對於專案開發有興趣,同時過去也有幾個小作品,於是找我參與他們已經有兩個人的小團隊。當時我第一個反應:「應該和先前好幾個團隊一樣,說比做還多,不會成功的」;然而第一次我們在一個借用的社團裡面見面,發現大家都很有熱情,紛紛把自己想做的題目丟出來腦力激盪,這成為了PLATE這趟旅程的起點。
蹲在社團的白板前,三個人輪流寫出自己想做的題目:Tim想做個股票相關的應用,Fucxy想做吃飯相關的應用,而我想做穿戴式裝置相關的應用;最終我們共同發現一個需求:「吃飯時候,總是不知道要吃什麼!」於是開始思考用Machine Learning整理餐點資訊後,提供點餐建議的應用,也開始構想怎樣的服務是每當吃飯時候就會想使用的;所以,我們有了一個大致的專案定位:想做一個餐飲的平台,而凡是吃飯時間,大家就會上來選餐、被推薦餐點。
當時我們在網路上做了些調查,看到Food Panda、EZTable、摩斯漢堡等類似服務,也閱讀了Peter的午餐大王夢文章,甚至實際拜訪了某個小公司的老闆,談論是否合作建制餐廳地圖。那時候我們第一次像是大人一樣的奔波,談論似乎跟商業有關的事業。
記得當時有一天,在我前往上課的路上,看到邵家健老師路過,而我知道老師在以往課堂上一直很支持學生的專案與創業,於是我便向前跟他討論起PLATE的構想,他十分激動,也告訴我們他的研究室有個相關的研究,認為這樣的應用很有需求,於是我們專案成為了老師底下的專題之一,回想起當時若乖乖去上課,而沒有為了自己想做的事情翹課的話,接下來一年半的PLATE應該壽命會更短。當我們確定目標之後,除了要有勇氣去追求,也要有勇氣去放棄。
從三月份我開始參與計劃,四月份準備開始執行開發,找了一位同學當設計(綽號Bass),幾次至半夜三點的會議決定出Logo與配色,也決定第一期開發使用者會有的功能:「查看推薦與點餐、查看列表、餐點與社交、查看點餐記錄、設定」,租了一台Linode機器,申請了PLATE.tw網址。團隊成員每個都以很高度的熱情投入,Tim把Coursera的Machine Learning在一週內啃完,而我則是把Stanford的iOS App Development的課程上了七成,也跟著寫了數個練習程式。
暑假期間,團隊一週有三天齊聚在社團開發PLATE App,每天八小時,相當高的效率也讓我們在暑假結束之前,有了一個Demo版本的iOS App可以展示,甚至還拍攝了一個介紹影片
回想起這段時間,是我們生產力最高的時期,早上構想的程式,下午能在分工下就完成並測試,那時的我認為動手做遠遠勝於嘴上談兵,每當一個想法浮現,花在討論與規劃上的時間並不多,而是埋頭寫程式,讓東西在最短時間內被生產出來。然而,也因為如此,這段時期雖然大家熱情最高,但也是做錯決定最多的一段時間,我們在往後的階段丟棄了幾乎所有這時候做出來的東西。

Part 2 - 團隊組成

時間來到九月,在與老師溝通之後,團隊極力想安排與資工系的會議,原因是我們的作品必須在更多人的檢視與支持下才合適拿到餐廳裡使用。然而,這場會議讓團隊整整等了一個多月遲遲沒有開成,我們寄了超過三封的郵件,甚至直接印出報告書投交到辦公室。當時團隊氣氛低迷,Fuxcy在一次意見不合的會議中離開了,而我和Tim則在牆上,開始畫著規劃圖,內容是會議若是開不成的Plan B、開不成也營運不成的Plan C、…,我們一路寫著至年底最壞情況的計劃。
這時Anthony加入團隊,負責Android程式這部分,也就是接寫Fuxcy原先的東西,但是當時我們並沒有持續開發,反而是找了與原本題目相關的其他小程式實作,原因是PLATE這個東西很大部分在運行上需要透過系上或學校的允許,而在會議遲遲沒開成的情況下,大家對於開發PLATE沒有明確的預期效果,怕任何的持續投資會做錯更多的事情。反之,大家對一些有趣的應用感到興趣,例如讓餐點在盤子上旋轉的特效,這也成為之後我們專題報告時的部分內容,確實滿有趣的。
終於,到了十月,系主任的信終於寄到團隊手上: “The team has my support.” 而我們接著與系上計算機中心談論伺服器與網址的問題,於是團隊又開始忙起來、回到正軌,當時的每個會議我都會演練五到十次,並很認真思考聽者想聽到的內容;雖然偶有不足,但回頭看,PLATE從最開始至今的會議並沒有失敗過。
由於PLATE也是資工系的專題之一,我們多了一個與人分享的機會:專題課。我們把影片與構想在台上報告,第一次報告結束之後,Sidney學姊前來聊天,她表示她在另外一門課的專題想做類似的系統,所以認為可以合作。雖然事後我們開過幾次會與她的團隊溝通,但最後並沒有實際的合作方式,反而寒假時,Sidney加入我們幫忙宣傳方面的事情。
而第一次在系館大廳跟Sidney溝通時,同班的Jackson恰好在一旁聽,事後Jackson表示對於我們做的東西很有興趣,也曾經構想過類似的作品,認為這確實是未來的方向,於是乎一陣子之後,Jackson加入PLATE,幫忙行銷公關的部分。一次次的機緣連成機會與可能。
當時Bass因為個人方向不同,所以漸漸離開團隊,往自己有興趣的另外一個方向走,我們開始很積極的在交大尋找可負責設計的人。先在人社一館貼了傳單,也到處詢問;最後,在人社一館的某面牆上看到一個頗不錯的App設計海報,便敲門問附近老師得知這海報的製作人Jessie,於是我們多了一位設計。我仍記得與Jessie見面時,Jackson嘗試說服她加入時候的情緒,很單純相信PLATE是一個能夠讓生活更好的平台,而且我們是那群能夠完成它的人。

Part 3 - 溝通與定位

接著,我們與學校第二餐廳的經理溝通,規劃PLATE系統營運的方式與細節,經理是這次專案中非常支持團隊的人,也表示他個人很想有這樣的系統給同學更方便的用餐環境,一直到更後期遇到困難的期間,經理也都是一樣的態度協助著團隊。反之,團隊也見了總經理,他的態度則是認為這樣的系統對於他的幫助不大,覺得在交大運行單純只是做善事幫助同學,意願並不高。
而與系上、系計算機中心、餐廳經理等的溝通過程中,團隊繼續開發第二期的App,我們把原先五個「查看推薦、查看列表、餐點與社交、查看點餐記錄、設定」功能修正後只剩下一個功能:「點餐」。團隊認為點餐是提供所有吃飯相關服務的基礎:透過點餐,我們能夠知道所有人對於餐點的喜好,未來得以推薦餐點;透過點餐,我們可以與Facebook結合,分享餐點引起話題,同時協助商家廣告自己;透過點餐,我們得以擁有使用者對餐點喜好最正確的資訊,夠過分析之後可以提供給商家,以做顧客市場分析。
同時,我們也曾在暑假把PLATE的構想與學校外圍的商家分享討論,發現大部份的商家對於這樣系統並沒有太大意願使用,首要原因是它預期帶來的負擔大過於獲利,其次則是上頭充滿太多的未知數,甚至一開始系統上並沒有使用者。於是,團隊認為應當從學校開始,透過系上老師的指導,並以學生的身份,對於失敗的容許度較高的方式進行第一次的營運,這也是PLATE最先投入在交大第二餐廳的原因。而既然我們在第二餐廳,透過點餐系統,首要要解決的即是「排隊問題」,我們認為學校內的餐廳每到用餐時間,全部的人都塞進餐廳 “Busy Waiting” 導致人山人海,甚至遲遲吃不到午餐,而我們的解決方式是每個人應該把自己的訂單在事前送出,而只有當餐點完成的時候,被 “interrupt” (即被通知之意)來現場領餐。
在Jackson的安排下我們跑進數個大班教室(如微積分課)內發問卷調查,發現校內約莫85%的人使用Android智慧手機,而非iOS,於是決議把團隊開發的所有成本只專注在Android App,把暑假的iOS程式完全擱置;同時商家介面從原先的網頁版本改成Android App,往後運行在思源基金會贊助我們的平板電腦上。我們稱暑假開發的iOS系統與網頁版商家介面為PLATE Demo版本,而開學後新開發的這個版本為正式版。然而,這個正式版,必須先經歷接下來的Alpha與Beta測試。
終於,我們在年底透過經理招集了第二餐廳的所有老闆,齊聚一堂聽我們報告並展示PLATE,猶記得會議的前一天,商家的Android App第二個頁面的介面仍是空的還沒動工,原先認為這次展示不應該拿出實際作品,因為滿可能中途拋錨。但,老師在前一天和我們說:「就拿出來給大家看啊!壞掉也不會怎樣!」恩,也是。於是展示的前一天,我找了Tim跟Anthony: “Hey, where are you guys? We got to rock this out.” 終於,半夜我們把隔天的東西準備齊了,也做了數次排練。那天的會議,在發下去的意願單中,我們收回了全部老闆的簽名,當天晚上我請了團隊成員一頓很開心的慶功晚餐。

Part 4 - 測試

接在商家會議之後,團隊開始進行寒假期間的Alpha測試和下學期開學時的Beta測試。
寒假期間,我們撰寫簡訊認證功能、商家營業時間機制、手機GCM通知、設定HTTPS、設計PLATE.tw官方網站等等,然後在最後團隊大家齊聚一起在多隻Android手機上反覆操作以發現問題,同時也邀請幾位朋友到場試用,聽取並記錄所有的建議與批評,這段期間是我們的Alpha測試期。
下學期開學的前兩週則是Beta測試,第一週邀請朋友加入測試,約莫30位同學,實際體驗透過PLATE系統在手機上點餐後到現場領餐的流程,那時候我們擔心會出現亂子,於是是一家家開放測試,同時團隊與商家建立合作方式,協助他們使用系統,共同商討人力安排與動線安排等事宜。
Beta測試這段時間是我個人在PLATE開發過程中最辛苦的一段時間,必須同時解決程式問題並上去修改程式碼、討論現場動線問題、與商家溝通並安排每日的測試內容,也同時與我們的第一批使用者溝通、蒐集他們的批評後修正。這段時間原先對團隊很有貢獻的Tim出國交換,而留下一份寫好的合約書,只要測試完成之後,隨時可以跟商家簽合約後開始正式營運;然而,這也成為那時的壓力來源,Beta測試的工作與所需能力已經在我能負荷的邊緣,而是否應該直接接著簽合約?
猶記得當時反覆被詢問:「如果出現任何問題與糾紛,誰負責?」理論上,團隊站在一個想改變現狀、解決問題的角色上,所以挑戰這樣的專案,對我們來說,成敗相對其次,而比較在意的是我們今天認為可行的PLATE,我們是否有使儘全力去嘗試。而誰負責?我想了很久之後,我想是我該負責的,而這樣的責任其實並不大,只是太害怕改變與嘗試的人放大了這個問題,想讓人畏懼之後繼續保持原樣而已。
兩週的Beta測試是頗成功的,我們在期間修復數個小問題,而並沒有大問題讓我們停駐,於是我們想把PLATE拉到另一個階段,然而在此時才發現忘記需與學校相關單位溝通,所以開始安排與總務處的會議。那是一場頗大型的會議,團隊約五人到場,加上老師與總務處逾十位的相關人員,我很真實的展示PLATE的構想與Beta測試的情況,總務長也很清楚地表示這場會議並不討論細節,而只是決議學校是否支持點餐系統的運行;在會議接近尾聲的時候,我聽了很多預期中的問題與討論,做了簡單回復之後,我說:「我知道PLATE要運行會遇到很多困難,也會被質疑很多問題,但我們也同時很清楚,這樣的系統今天我們不做,不久之後會有人做,而我不想看到這樣」大家沈默一陣子之後,總務長說:「好,那準備差不多要推出時跟我們說」。

Part 5 - 再溝通

總務長點頭之後,團隊本以為事情會變得順利,然而實際上卻變得棘手了。學校的執行單位事務組與我們開始會面與討論,團隊不斷被問:「如果太多人用爆掉怎麼辦?」、「現場有糾紛怎麼辦?」、「開放中午時段會不會很亂?」,感謝Jackson有耐心的一一回復這些問題,而我當時則覺得這樣的做事方法與團隊的本意衝突,我們是一個在嘗試改變,且願意接受失敗的一群人;相對的,學校人員則希望讓不確定性與風險降到最低,尤其害怕會有人客訴。
而這樣的溝通衝突,導致團隊人員都很疲倦於回答太多預設情況的問題,無奈於太過保守的做法,且溝通時間不斷拉長,本認為三月可以接在Beta測試過後把系統推出,卻至四月多遲遲沒有定論,過程中團隊也需要跟學生議會組織溝通,回復議會的提問。而,學校希望系統限制人數、限制商家數目、關閉尖峰時間等,都成為我們更之後運行時的潛藏缺陷。最終決議,我們需要關掉中午尖峰時間後開放系統。
這段時間有一個更棘手的問題即是二餐現場網路的問題,提供給商家的平板電腦並不適合直接使用交大的校內無線網路,原因是該網路並不夠穩定,於是從寒假開始,我們不斷在安排與討論,甚至請人評估現場佈線的方式。Alpha測試過程中,現場網路是使用3G網路,透過一個小台路由器分享給多台平板電腦,而3G網路則是團隊成員輪流去中華電信申請七天免費試用而來的。至於佈設實體線的費用實在太貴,餐廳無法在第一次測試階段支出這樣的費用,於是在校內加設無線路由器應當是最佳的方式。然而,我透過郵件與事務組嘗試溝通此事宜時,Jackson從事務組回來後說:「他說你信用詞錯了,不是我們計劃學校計算機中心架設,而說是我們要『拜託』他們幫忙」。
最後,網路問題學校方面表示有能力但並無意願與足夠理由幫忙,於是我們和餐廳協力處理:路由器費用由餐廳承包商支出,而網路月租費則是參與商家分擔。第一次聽到這個訊息時,我其實是相當難過的,這些商家是第一期願意和我們共同承擔風險改變現狀的人,而開發過程中我們也都堅持團隊自行負擔第一期的營運成本,包含開發、現場人力、維護等,而配合上思源基金會贊助的機器與學校的幫助應該可以讓商家無壓力的參與第一期的開發,而卻事與願違。
這段時間,我很高興團隊成員的耐心,有時候當我發現溝通時間已經超過預期時,Tim或Jackson都持續在安排下一步,Anthony與Jessie也在需要的時候替系統問題進行修正。PLATE團隊像是在燃燒的搖滾魂,遇上保守的學校單位,我們最終在火焰殘存之際,爭取到校內的公開營運的許可。

Part 6 - 營運

本來的有四至五家餐廳可以參與第一期的營運,然後後來因為網路架設因素,只剩下三家持續合作,分別是米克Q手調飲料、八方雲集與麵朝。而營運時間必須依照與學校的協議,把中午尖峰,也是效果最好的時段關閉。團隊開始致力於粉絲專頁的宣傳與現場動線的告示牌等事務,然後讓系統在2014年5月1日正式上路,開放讓全校同學下載使用,我自己則是常常閒空時待在餐廳角落觀察使用情況,順道聽路人對於系統的看法與八卦。有了Beta測試時的經驗,我覺得並沒有太需要擔心的部分,而聽取到的建議與批評不論好壞跟激烈與否,我都會記錄下來然後冷靜思考,很多部分其實窒礙難行,但我也去思考問題的根本。
商家網路在營運初期頗正常,然而來到第三週漸漸出現問題,因天氣變熱,小台的3G網路無線分享器頻頻過熱關機,團隊成員每日三不五時就需要到現場維護並解決各類問題,漸漸大家疲倦了,而網路的根本問題並不能得到解決。同時,系統設計上的預定功能仍欠缺設定領餐時間的機制、商家數目不夠多、需求量高的尖峰時間卻被關閉系統等原因,讓我們決定提早結束營運。無期限凍結PLATE專案。
PLATE點餐系統成軍15個月,在交大第二餐廳運行,累積有600位使用者下載,數百位同學點餐成功。PLATE的網站與可查看菜單的App仍會持續在市面上讓大家看見,以待未來有日可以繼續經營。

Part 7 - 謝謝,我學會了

PLATE結束了,但我卻是很高興而滿載而歸的。這些數千字的文字仍是無法傳達整段歷程的點點滴滴,一路上給予我們挑戰的人很多,幫助我們的人更多,從思源基金會執行長周吉人不求回報的贊助我們五台平板電腦,到老師不斷激勵並給予我們希望,再到團隊成員以熱忱工作一整年,支撐著整個專案運行。更值得我特別的感謝的是Scott學長,一路上也跟著我們一同商討並解決問題,幫助PLATE的Server Code的架構與後來的各種測試,以及Android App和伺服器通訊的網路行為等,還有在團隊決策上的建議;曾經好幾次我們堅定自己的想法而沒採用Scott的建議,卻在最後踩到地雷爆炸時才發現Scott講的是對的。
這次旅程我也接觸了很多人,團隊與作品或許不能一直順遂,但是人脈卻是可以永遠經營。到了近期,總是會持續遇到一樣抱有創業、創新想法的人,我都會盡力很開放的與他們聊天、交換意見,分享總是讓我更富有。
當然,PLATE最終沒有繼續,但對我來說,「如果要集滿十次失敗,才能換一次成功」那我已經收集了第一次了!這裡,我想條列出幾點所學:

一、別想自己負責全部

記得第一年春天,蹲在借用的社團裡面討論專案時,我覺得自己很能寫,可以在短時間內把想要的東西寫出來;也覺得自己會設計,想參與所有的設計;更覺得自己會規劃,所以希望計劃能照著想像中的樣子運行。然而,這也成為後期最大的問題。
直到專案漸漸走到公開釋出的階段,我發現我無法同時再掌控所有的事情,無法同時修改程式碼又安排行銷事宜,而且角色是尷尬的:站在決策者的角度,希望程式可以有更完整的功能並且沒有錯誤;站在工程師的角度,希望程式有最少的開發成本就能動。
於是,我認為在專案中,每個人應該非常清楚自己的角色與定位,也了解自己與團隊的合作關係。在往後的專案中,我會在開發者與規劃者之間擇一,然後把分內的工作認真且抱有熱情的完成。

二、少,然後精

“Be a thinker, I said to myself.” 想法來自極簡主義,一家公司、一個App應該都只有一個簡單卻確切的目標,而當我們覺得目標不只一個,同時還想要很多東西、很多功能的時候,表示我們想得不夠清楚,也不夠了解自己的定位。
PLATE一開始想要有推薦系統、人工智慧的餐點分析、點餐與社交等功能,但實際上我們發現真正想要的是點餐。而PLATE的關係架構中,除了團隊內部成員,還有老師、校方、系上、餐廳、餐廳承包商等,關係複雜於是難度高、溝通成本高,在沒有足夠能力簡化這樣的狀況時,我們漸漸失去專案的掌控權。
我認為在往後不論新專案或是任何的規劃,都必須思考到非常深,方知道問題的核心,然後夠過最簡單的方式專注於核心問題,並解決之。

三、再想多一點

當事情變得複雜時,我們往往難以全面分析,並找出所有事情的邏輯,於是容易一看到可行的做法就埋頭苦幹。然而等到抬頭發現這其實根本沒有在解決問題時,我們必須把做錯的事情都丟棄,從頭再來。
PLATE初期的程式不到半年就全部丟棄改版了,原因是我以為自己能把iOS App寫好,但忽略其實用iOS的人相對少數;當過多的會議時,我們常常會忘記自己的速求,更忘記我們必須隨時在會議中思考別人的立場並爭取最好的共識。
所以,一樣的, “Be a thinker, I said to myself.”。

四、拿掉個人情感

這是很殘酷的,但必須這麼做,否則會結局會更慘。當我們在做決策時,往往會帶入心理因素,像是:「已經做很久了,應該繼續撐一下就好」、「我相信這問題不是大問題」等;然而事實告訴我們,我們必須徹底的無視這些心理因素,然後把所有影響決策的因素理性的攤開,再做出決策。
PLATE開發過程中有很多預設的心理情感導致錯誤,例如:我們認為團隊已經做的非常辛苦了,所以必須在最短時間,縱使答應學校各種系統限制也要把半殘的點餐系統開放;最後,事實其實跟我們的直覺是幾乎一樣的,關閉尖峰時間、少量商家,所以想用的人很少。而心理因素讓我們甚至忽略本來的直覺。

五、成本,越低越好

如PLATE這類的創新應用,成本永遠是越低越好,過程中有很多的選擇讓我們想嘗試較高成本、較長期的做法,然而長期的做法其實並不適合。原因是創新專案開發(或者你想說創業也可以,但我並不喜歡這個名詞),我們一直在跟時間賽跑,如果這一期的期限到了、錢用光了、人累了(人力成本花光了)沒有達到預期的效果(獲利),而就無法跑到下一個階段,專案會被停止而失敗。相對的,我們必須把成本不斷壓低,讓作品可以在時間內進入下個階段,然後在下個階段才有另個階段的投資,提高作品的完整性與性能。
PLATE開發過程中,我們曾把Demo版本完全放棄,而開始撰寫新的Android App,也放棄當時Web App這個選項。而今回頭看,我認為Web App是比較好的選擇,雖然犧牲掉更好的使用者經驗,但對於最初期的開發,重點是在東西是否能夠快速修改,並且有足夠的力氣去應付後來的麻煩事。Scott當時給我們的建議是:「沒大問題就別改」,可惜當時沒有聽進去。

Part 8 - 後記

「PLATE要結束了,但是我們要深深一鞠躬再下台」我和Tim這麼說,那時大家都已經很疲倦在處理現場的問題,卻得不到對應的成效。我們做出了最後一次的規劃,把參與人員一一列出,擬定怎麼告知他們專案結束的消息,再寫信給每個參與和幫助我們的人。然後我和Tim分工把這段歷程寫成一份完整的數十頁報告,印出來之後,一一拜訪參與計劃的人,把我們的營運成果很誠實的告知並感謝他們讓我們PLATE可以走到今天。
我現在仍相信PLATE這樣的系統是被需要的,而且有非常的市場與發揮空間。點餐系統意味著希望使用者改變現有的吃飯習慣,先訂餐再到餐廳領餐,也改變商家習慣的營運流程,所以需要特別大的成本來驅使大家嘗試;而我認為我們之所以沒法現在成功的首要原因除了經驗不足,就是無法支持這麼大的成本。

最後那天,Tim請團隊吃了一個豐盛的晚餐,感謝所有人參與這段旅程;飯後,Tim和我待在我們平常開會的白板前:「來,下一個題目是什麼?」

3 comments:

  1. 非常有趣的經驗 謝謝你的分享:)

    ReplyDelete
  2. 感覺很酷,但是過程中一定經過當初不曾料想過困難,加油

    ReplyDelete
  3. This comment has been removed by the author.

    ReplyDelete