about 2 months ago

9月29、30這兩天,參加了人生第一次的Hackathon比賽活動,雖然大會說這次活動也有別於一般的 hackathon,沒有天使投資人來參與評比與事後的創投,
但是這也絕對是我工程師生涯中重要的一次回憶了。

由於是AgileTour主辦的熱身活動,大會導師又有odd-e 的舟叔、柴叔等大師級人物
心中第一個念頭當然是找Tenmax這些有著默契的同事一同組一隊過去體驗這次活動

三五天就組召換了其他5人可以湊成一隊參賽了,
還曾經一度湯姆叔這個不會Coding的PO都要來跟我們熱血一番了,雖然最後他要陪他家,但還是先感謝他有支持的心
還要感謝我的團員這麼瞬速的響應

Prepare before start

Our crew

最後召集到含我6位勇士,分析一下大家的戰力成份
基本上有4人是前後端都沒問題,
4人中1人是全方位Developer的強者,開發速度神速,基本上有他在後端也無後顧之憂

另外2人則是front-end主打
1人專精前端,webpack工具運用自如,JS, CSS觀念掌握度極高
另1人具有很好的UI美感,能善用UI tools 快速做出頁面

在測試方面,大家也有前後端 unit test, integration test的經驗

工程開發上,算是蠻完整的一個組合。(對,最後就是輸在缺乏行銷能力 XD)

The Day before the game

忽悠的就到了28日,比賽前的一晚,我們在公司會議室召開了行前會,想說至少做好一些準備節省當天時間
馬上開了一個 Dropbox paper doc 來記錄發想和意見

第一件討論的事,卻是行前要帶甚麼東西過去會場,因為我們都有了要在現場過夜的決心了,個人生活用品少不了,
再者 「休息是為了走更遠的路」 ,地舖、枕頭甚麼的能讓大家好好休息,當然也是必備品

然後便是針對工程部份的討論了

  • Version control - 選擇了 GitLab ,因為有免費的private project的選擇,而沒有使用Github,馬上開好就把大家都加成member進去了
  • Framework選擇
    • Back-end - 因為在沒有熟悉 Python, nodejs 等快速的後端程式的條件下,好像也只能用我們較熟的java spring boot,而且或許還不需要用到back end,所以當下沒有定案,想說視情況而定
    • Front-end - 因為 React、 Angular 使用跟架構模組較為複雜,大家的結論是直接用 jQuery + Bootstrap 來快速暴力解決就好
  • Communicate - Slack已開好一個chat room
  • Planning - 平時我們跑 Agile 時少不了的實體工具: 白板筆、行動白板、便利貼

Product Brainstorming

從活動訊息中,只知道是利用「德鐵API」進行一些應用
找到了德鐵的官方的open api,馬上查看api有提供哪些接口和資料類型,還直接申請了一組帳號來try api

也看到了這個德鐵api也有辦過 Hackathon 的活動,當然也列出了相關獲獎的app應用

不過因為我們實在不知道這次比賽是否有明確主題或規則
所以也怕現在的討論題目會浪費,大概就是只能談談有哪些大方向而已,鐵路API,除了方便訂位,搶票和結合旅遊之外,我們也想不到更多有趣的方向了。

就這樣,期待著明天下班後直接直奔比賽場地。

30日,來到比賽現場,是一個位於德惠街上的工業風地下室。

記憶所及舟叔講解的注意事項大概長這樣吧:

  • 每隊最少5人,最多9人
  • 題目不限,最後成品就算沒有用到德鐵API也沒差,就是要夠吸引人就好(當然最後每組還是有乖乖地用上德鐵API,以下簡稱GT-api, GrailTrip-API)
  • 比賽評分標準,除了上台報告的表現之外:
    • 需要提交code base讓導師進行code review,也會重視是否有撰寫test case
    • 團隊的協作表現也會是考量因素之一
  • 隔天會有兩場demo,一場早上11:30進行,Final場則是下午5:30,活動大概晚上十點前結束
  • 現場有3個技術導師,每組可以挑選2個section來與不同導師提問討論,1個section半小時
  • 講解完後大家可以選擇是否要留下過夜

在舟叔講解完後,比賽也就隨即開始了

Kick off - Make Team & Project

10分鐘的自由組隊時間,當然我們就是直接把Study圍起來不讓他跑掉XD

接著就是隊名與比賽題目的決定,我們有半小時來決定,然後上台介紹。

因為神人Study,我們隊名就直接取為 Study group,以示好學之意XD
題目方面,紙跟筆交纏了半小時之後,看來我們還是選了一個比較大眾化的題目,旅行景點推介結合鐵路訂票
而且針對商業價值,我們得到了四點是我們的Project所提供應用上的核心價值的:

  • 德國景點推薦
  • 行程安排
  • 配合行程的鐵路訂票服務
  • 訂單管理

Setup environment

接著又有一個小時的時間,給我們挑選安身之所,然後進行賽前的安置準備
這次挑完地段後,我們對於挑地點有幾點心得:

  • 能用兩條串連的電源延長線就能接通的區域,且延長線是有剩餘長度可以平放在地上的,不是蹦直吊在空中阻礙行動
  • 避開冷氣出風口,漫漫長夜一直被冷氣吹著頭,在沒有足夠休息,抵抗力差的情況底下不感冒才有鬼
  • 能佔有一面牆,把行動白板貼上去,在牆上也可以貼memo貼,方便standup meeting的聚焦討論
  • 除了坐椅和討論佔用到的空間外,需要額外一個可以平躺的空間,安置地舖,讓累了的人可以即時躺平休息。比起趴睡,有被舖的平躺實在舒適多了,只要能直接睡著,30分鐘的補眠其實是非常有效的充電。

User storying mapping

針對之前討論出的4個核心價值: 德國景點推薦行程安排配合行程的鐵路訂票服務訂單管理

我們展開了更詳細的探討,務求要把商業價值對應到實際要提供的服務功能上,進行 Story mapping
雖然自己對User storying mapping 沒有較為札實的實踐經驗與研究
這時候我先提出一個建議,先把我們分成兩組人,兩組人各自針對我們這4個核心價值進行服務頁面的 prototype,然後再相互進行比較與分析
雖然我也不知道這樣分組方式是否能得到我們期望的結果,會這樣提議,
是因為覺得現在只有大方向,實際功能還沒有定案
還處在發想階段,希望以平行方式先發散思考,讓全部人都可以參與討論與發言,但又不置於有過多的提案難以取捨。

Business value - What problem we want to solve

原訂先進行20分鐘,然後互相說明比較,
但經過20分鐘,發現我所在的SNZ組 (成員S君,N君,Z君)3個人就已經無法達成共識了,
行程安排 這個功能上
我覺得網站一開始應該就是列出套裝,用家就只要選好這些套裝行程就好,不需針對個別景點安排行程組合
而S君則是覺得景點可以自由安排,由此發生分歧未能有共識討論下面其他的功能

於是我們便決定先跟另一組(FWJ組)來先sync一下大家對產品功能定義,
發現FWJ組的設計也是與S君的想法比較接近,但細看在 行程安排 與怎麼連結到 鐵路訂票 的方向上仍然是有一定程度的落差
大家不斷提出問題:

  • 為甚麼只能透過鐵路去這些景點?
  • 到底是以鐵路為主,找鐵路附近的景點?還是以景點為主,查出景點之間怎麼以鐵路通往?
  • 那如果選定的日期跟景點的距離根本是不合理的設定,例如要一天從意大利到法國再到德國這樣?系統要允許user做這樣的設定嗎?
  • 承上,如果允許這種設定的話,那系統應該自動幫他去掉其中一些景來配合時間吧? 要挑哪些景點去除?
  • 怎麼設定起站跟迄站?現在界面設計都是先選好一系列景點,但沒有設定從哪出發
  • 哪些資料該用假資料呈現? ... 大概還有一些問題我已經忘了

眼見時間一分一秒的縮緊,但我們的問題卻越來越膨脹。
雖然大家都是很理性很有邏輯地進行設計與分析,當中包含了使用者體驗、實作可行性及實用性的考量,
但確實也看到了假命題與over design的分歧,

為甚麼會說是假命題,因為我們真的只有20小時左右的時間,而現在的討論中許多的假設,
已經偏離了「我們如何利用這20hr來實作出符合這4個核心價值」的方向了

反正也沒有共識,我只好先打斷大家,停止深度與廣度的討論下去,
重新對齊團隊目標,「如何利用20hr來實現符合這4點核心價值的產品出來」

所以問題正式回歸到,如果要附合這4點價值,我們的內褲版本產品,至少需要呈現甚麼功能?

Define a MVP (Minimum Viable Product)

很高興大家馬上意識到我們當初所定立的價值是需要達成的,
然後,反而因為剛剛的諸多發想,讓我們更快速地從中萃取出來最不可缺少的部份:

  • 德國景點推薦
    • 單獨景點呈現,不必有套裝行程
    • 假資料呈現
  • 行程安排
    • 先支援只有兩個景點的行程
    • 先選的就是起點
    • 忽略日期合理性的判斷
  • 配合行程的鐵路訂票服務
    • 景點與車站先 hard code其地理距離,不用以程式計算
    • 只支援一位乘客訂票,簡化動態人數的表單複雜度
  • 訂單管理
    • 先用email 寄出/或是使用固定的票卷呈現在確認付款後的頁面上

就這樣,快速用這幾個明確的目標定義好我們明天早上11:30的第一場demo的MVP。
接下來便開始 Break down 工作了。

第一篇先在這裡打住,下一篇將是描寫我們怎麼在20小時裡經歷5個sprint的。

← 「淺談高效撰寫單元測試」AgileMeetup會後感想 2017 AgileTour 暖身場 24Hrs敏捷戰鬥營 - 活動心得#2 - 最難熬的Sprint#0 →