2016-01-27

[引導心得] 參加Agile Meetup 2015歲末分享



今晚參加AgileCommunity.tw 主辦的Agile Meetup 2015歲末分享
活動內容是

  • 由參與者發起的 
  • 由下而上的
  • 大家感興趣的 

討論項目

今天先由一個破冰遊戲開始

破冰遊戲 I - 捏造的自我介紹
跟大家自我介紹三件事, 兩件是真的, 一件是假的
請大家猜哪一件事是假的


藉由這個遊戲剛好找出桌長
由桌長擔任計時的腳色
因為之後的討論都必須設定Time Box

接著就進入今天的重頭戲
透過Lean Coffee產生今天討論的主題

規則如下:

1. 每人先寫下感興趣的主題 (Main Idea) 5分鐘

2. 每個人用1~2句話簡介這個主題

3. 每個人兩票 找出大家感興趣的話題 (依感興趣程度排序)

4. 依排序從第一個主題開始討論 計時15分鐘

5. 時間到, 大家投票這個討論是否要繼續 

6. 若要繼續討論 則再計時8分鐘

7. 同5

8. 若選擇不繼續討論, 開始討論下一個主題(依排序)

9. 如同4~8的迴圈 直到時間結束或是主題討論完畢

PS1 : 透過Kanban的方式 列出 ToDo, Doing, Done 的視覺化方式能幫助所有人明白現在正討論到哪裡

PS2 : 每個人的發言應該也要設一下Time Box 不然我今天就講太多了 讓其他人沒有說到話 很不好意思 , 不然就是第一輪強迫大家都得發表意見


最後幫 AgileCommunity.tw 再推廣一下
對Agile感興趣 有興趣 想嘗試的朋友 可以多多參加 Agile Meetup
聽聽別人的寶貴經驗 或是跟共同興趣的戰友們一同討論
一同奮鬥 在Agle路上你不會寂寞的

2016-01-26

透過O.R.I.D 方法進行Retrospective


O.R.I.D 焦點討論法是之前參加Agile Tour時從David那邊學到的
焦點討論法 (ORID)

當時就覺得這招很容易引導Member
引導出他們想說的話

  • O是 Objective , 代表客觀的事實
  • R是 Reflective, 代表心中的感受
  • I 是 Interpretive, 代表上述事實或是感受的解釋
  • D是 Decisional, 代表行動


這是套循序漸進的引導方式
從一開始大家都還沒有想法的時候
就先從最簡單的開始

1. O 事實

剛開始寫出看見的事實比感受還容易多了
然後再根據這批大量的事實
我們可以找出我們的

2, R 感受

如果要收斂範圍的話
我個人覺得可以從感受開始收斂
如此大家討論的範圍就不會越來越發散導致收斂不了

有了大家都比較有感覺的感受之後
就可以根據這些感受討論

3. I 解釋

為什麼會覺得不爽? , 為什麼覺得很爽?

再根據這些解釋
我們可能會找到Root Cause 或是 大家感受不錯的地方
最後 提出

4. D 行動

列出Action Item

今天試著照著ORID引導Member做Retrospective
感覺不錯喔 大家都有照著方向走
沒有越來越發散喔~

2016-01-19

[CI] [Jenkins] Jenkins的Nunit Plugin 無法讀取 Nunit3 的 format

Nunit 在2015/12/1時 release 了 Nunit 3.0.1

於是我就採用了最新版的Nunit來寫Unit Test

但是發現Jenkins的 Nunit Plugin仍未跟著升級到3.0.1的format


參考了Jenkins的Issue
https://issues.jenkins-ci.org/browse/JENKINS-27906

採用一個workaround
先將format 改成 nunit2吧
--result:TestResult.xml;format=nunit2

可以看見Report了


2015 Review - 個人成長篇

前面兩篇Review完了
2015 Review - 社區工作篇
2015 Review - 家庭生活篇

接下來就來好好Review 今年的個人成長方面吧

[工作份內的事]

工作份內的事就不多說了
大致上今年也沒有什麼固定的Feature
就是被老闆assign什麼就做什麼
累計下來也算蠻雜的

幾個顯著或特別的成長大概就屬
1. T-SQL
2. Performance Tuning
3. Azure

PS. 今年的目標是Full Stack Developer
       所以要學習front-end的技術

[工作份外的事]

今年嘗試了許多工作外的任務 讓成長更多元

1. Local CI

我覺得今年度對Team一個最大的貢獻就是寫了一套CI Checking 機制
過去我們Developer要很辛苦地凌晨看一下Build有沒有問題
如果Build Fail就要趕快修 或是 rollback 讓明天的Build沒有問題

但是明天就算有Build了 QA拿去裝發現安裝失敗
又要花時間找問題點 然後重新submit一個build
而我們一個Build都需要3小時的時間

這一來一往 就要浪費掉一天半的時間 !!!


現在則是1小時內就會知道結果
知道前一個小時check in的code 會不會造成Build Fail , Installation Fail

大大減少了浪費!!!

講一個題外話 LocalCI的起源
其實也是來自於Retrospective的feedback
Build Fail是大家的痛 但是當時沒有什麼好的Solution

而當時好巧不巧 參加了Continuous Delivery的Study Group
於是就當作自己的一個挑戰
而且也強迫用SCRUM的方式 每個星期有一定的產出
邀請一些member 透過Brain Storming 想出大致上的task
透過快速相對估算 對每個task估出effort
自己就是自己的PO 所以對每個task排出Priority
雖然成員只有我自己一人
然後就把初步的成果做出來了
11月 趁著新Project的開始 趕緊導入到Team中
讓Member都感受到LocalCI的好處

PS. 今年則是計畫要將Unit Test 加到Local CI去 把Feature Checking加進去 

Jenkins 初體驗

2. 導入JIRA
過去我們總是把task寫在便利貼上 然後貼在我們的實體白板上
然後也常常忘記移動

我就很好奇 貼在這裡的便利貼 真的有人會看嗎?

於是我導入了JIRA到Team裡面 一開始也沒有取代實體白板
先讓大家熟悉一下JIRA的用法
下個Iteration才開始全面的導入
每天中午定期發個mail 提醒大家要去移動task
其實就算Member忘了移動 他的task會被顯示成紅色
久了大家都會記得去移動

實體白板則是讓它顯示Summary的資訊
方便Manager閱讀
於是整個Project就變得非常透明

後來的Retrospective 大家對於這個Practice都還蠻贊同的

不過有點可惜的是 這個Practice在我們的新Project上 就不再用了

PS.
Agile 一直是我迷信且崇尚的開發方法
不過導入讓我學習到了 要學著 "win-win" 
唯有"win-win" 讓Member感受到好處
他才會買單 相信你的Practice對他是有幫助的

3. 講課
2015年也是我講課爆炸的一年
在公司內部就講了9場sharing吧

也在公司成為了賈格老師
開了一堂課 Unit-testing programming


然後也教了實習生


也跑到成大去講課


在外面社群 - AgileCommunity.tw
在新竹也講了3堂
(1) 快速相對估算 - 動物洗澡 workshop

(2) 在瀑布底下玩SCRUM

(3) Unit-testing Coding Dojo


我也一直推廣快速相對估算
用兒子的動物牌卡 想了一套故事主軸叫做動物洗澡
利用這個詼諧 有趣的workshop讓大家體驗如何快速相對估算



儘管Team尚未採用
我個人則是從自己開始做起 真的用這套去估我們真實的task
效果很不錯
自己的工時自己估 - 應用相對估算的概念在WBS上

4. 在公司內部投稿

    今年則是寫了兩篇去投稿
    其中一篇是有關於導入JIRA的
    後來年底SQA有找我sharing 不過可惜因為一些緣故而沒去講

5. 拿下Product Hacking的冠軍 在1000人的場子演講
     這真的是一次永生難忘的經驗 沒想到在一次的20秒的勇氣中
     真的代表了Team去簡報我們Product Hacking的產品
     然後還真的拿下了冠軍 在1000人面前分享我們的Idea
     

    
    一切都要感謝我們背後專業的Hacking團隊阿
    

    
6. 成為了Certified Scrum Master
     上完Daniel的課之後 也抽空去考了Certified Scrum Master囉
     


7. 擔任Trend Engineering Day工作人員
     因為總幹事是David 所以本著同鄉幫同鄉的因素
     就去幫忙啦 我負責的部分是Brain Hacking 中有關Product的部分
     因為高層中的高層想要寓教於樂 讓員工能夠更了解趨勢的產品
     於是我寫了一套故事 大膽地將我們部門的產品放到遊戲中
     也有Promote的效果
      


     講個有趣的小故事 其實我在謎題中最關鍵的部分偷偷置入性了我的名字
     於是有朋友就以為 解答是我的分機號碼XD

8.擔任2015 Agile Tour 的工作人員
    年底的時候 也跑去擔任了Agile Tour 台北 跟 新竹的工作人員
    推廣Agile風氣 擔任工作人員有個好處 就是可以免費學習XD
    聽到也學到了很多別人的血淚經驗
    


9. 學了幾堂很受用的課
      (1) 91學長的 TDD
      (2) Daniel 的CSM
      (3) 福哥的簡報技巧
      (4) Continuous Delivery的Study Group
      (5) 引導者工具箱的Study Group
      (6) 馬拉松式的Code Retreat
      (7) Agile Tour 學到很多別人的經驗


10. 擔任社區的文康委員 規劃了許多活動
       2015 Review - 社區工作篇

2015真的是個很特別, 很精彩的一年~



2016-01-18

[Jug讀新聞] Daily Scrum的7種錯誤

資料來源 :
https://www.scrumalliance.org/community/articles/2014/july/7-mistakes-during-the-daily-stand-up-meeting


Daily Scrum的7種錯誤

Mistake#1: The stand-up meeting is not a status or recording meeting. 
不是進度報告 要凸顯問題與瓶頸

Mistake#2: The stand-up meeting is not for micromanagement. 
不要當場分派任務

Mistake#3: The stand-up meeting is not only for the Scrum Master. 
Member請向Team報告 讓大家都參與 不要只向Scrum Master報告

Mistake#4: The stand-up meeting is not a planning meeting.
要討論新需求請用另外一個會

Mistake#5: The stand-up meeting is not a technical discussion. 
有時我們不自覺地討論起技術細節 請用另一個會

Mistake#6: The stand-up meeting should not be held far from the work location.
Daily Scrum的位置要在Scrum Board的前方 大家圍在一起 才能清楚狀況

Mistake#7: The stand-up meeting must consist of the three questions.
我個人覺得最重要的是如果碰到什麼問題 要提出來
但大部分的人會把時間花在講昨天做過的事 今天要做什麼

[讀書筆記] Work Smart, Not Hard !!!

書名: ‪‎高效能程序員的修練‬

Work Smart, Not Hard !!!

從書中看到個很貼切的故事
有位伐木工很辛苦勤勞地鋸著樹
旁人注意到鋸子已經鈍了
便提醒這位伐木工


伐木工說:

我知道阿~ 但我鋸樹都忙不過來了~
哪有時間磨鋸子阿!!!

隨時警惕自己 要work smart 不要 work hard
資料來源:
The 7 Habits of Highly Effective People


2016-01-14

2015 Trend University開課記錄_Unit Testing



[Week1]


Trend University 開課囉~
後面還有7堂.......


很高興今天順利地把第一堂課帶完
花了一點時間讓大家都寫出第一支Unit Test
希望學員們有把東西帶走

ps. 昨天簡報課學到的大字流 講到哪秀到哪 今天馬上現學現賣!!

[Week2]

實戰
先從手工刻開始
把不可測的External Dependency 變成可測試的
重點在 偷天換日

不過學員們花了一些時間習慣替換的方法



[Week3]

week2的作業是隨機挑選名單
隨機性是以亂數來決定
Production code碰到亂數該怎麼Test呢?
課堂的一開始讓學員們討論作業
這是寫UT的第一道門檻吧
把亂數視為Dependency
要想辦法替換掉 變成可測的
學員們紛紛提出了他們遇到的問題



接著把上次沒教完的Factory Method 跟Extract and Override請學員們再練習一次
最後提到Mock
我前一天靈機一動想到以熱騰騰的魁地奇當作例子 跟大家解釋什麼是Interaction Testing

[Week7] 期末報告


這次給學員們的期末報告是期待他們能夠運用在自己目前工作的Project上
這樣上完這堂課之後才能學有所用
也能對自己的Manager說
這是可行的
對自己 跟對Team 都是 win-win的局面

很高興看到大家都有用在自己的Project上
就覺得這種子真的有撒出去阿~

[Week8] 期末報告


同學們都真的應用在自己的Project上阿 真的很棒
有用C自己寫Framework的
也有先分析要從哪個Project開始做的

總之 相信大家都有獲得好處


2016-01-13

[工作閒聊] 莫非這就是定律 自動化壞掉的領悟

[莫非這就是定律]自動化壞掉的領悟

我在部門裡面導入了兩個自動化的東西
一個是Auto Integration 讓Member不再手動Integrate code 也不用再花寶貴的時間在處理這方面的事務
另一個則是CI 可以讓Member在1小時內知道自己check in的code 會不會造成Build Fail跟Installation Fail

因為權限的關係 所以我把這兩套架在同一台VM上
就在最近一個milestone 要給QA Team一個穩定的Build時
VM的實體機器硬碟滿了  VM開不起來了~

當然這兩套自動化的Service就不work了 !!!

結果平常大家素質都很高不太會造成Build Fail的code 居然還真的造成了隔天的Build Fail

凌晨幫忙手動Integrate時 邊做邊想
啊~好久沒有手動Integrate了 果然還是卡卡的阿~

真的是有自動化真好 ~

2016-01-10

2015 Review - 家庭生活篇

其實2015這一年 在工作上我是相當拼命的
也參加了不少活動
所以相對的 對於家庭的時間比之前少了一些

來看看2015這一年的生活吧

第一次到紅毛城
想不到吧 在台北待這麼久了 其實我都不會想去紅毛城
但其實這張是在真理拍的=.= 也是有了安仔之後非常少見的夫妻合照


第一次去玩密室逃脫
當時因為擔任公司Engineering Day工作人員的緣故
跑去玩了密室逃脫遊戲 才發覺 原來這遊戲好好玩啊
尤其從小就愛解謎的我 這遊戲根本很對我的味



第一次帶安仔去動物園
安仔當時還對動物無感 不過多到戶外走走 就是開心

第一次去追星 - Poli
安仔可是Poli的小粉絲呢



攝影嘗試了日式風格
自然 寫意 劉栩安




第一次參加搬尿布大賽
發現比安仔力氣還大的小力士了

第一次到101享受高樓景觀
原來高樓觀景是這種感覺 — at 隨意鳥地方101觀景餐廳 Diamond Tony's 101 Panorama Restaurant.


從7月1日開始了 安仔上學趣的接送生活

第一次收到爸爸節禮物喔 - 好開心啊

第一次的東京自由行 而且還自己一個人去XD
[遊記] 2015.09.05 東京自我修行的旅程

很辛苦地搬了水波爐回來了
真心推薦 直接送機場


不過也因為搬了水波爐回家 也開始記錄了
賈格這一家的食譜

第一次獨自照顧安仔
媽咪露營去~ 留我跟安仔one on one
哇~ 直到2歲
安仔才第一次離開媽咪的懷抱~ 
結果 安仔沒有哭哭 


第一次打魁地奇就上手
參加公司的運動會 擔任我們隊伍的魁地奇隊長
被認證為暴力之王 雖然我沒有打傷任何人XD
最後拿下亞軍

第一次參加安仔的聖誕趴
安仔還上台表演 - 儘管臭臉到底 不過這就是人生的經歷阿


第一次參加部門的交換禮物
居然還有主題 - 今年的主題是電影
大家都好有創意

每年四月的校友運動會
今年有明顯感覺到籃球進步很多
以前在場下看很厲害的學長打球 今年可以跟學長們一起打球

六月的時候參加了已經畢業十年的大學同學會
有時候還挺懷念學生時代的瘋狂阿~


沒事就陪著安一起堆積木
安仔堆積木的天分極高
不僅能堆高的

也能堆廣的
好像打造一座城市般

沒事就跑到南寮去晃晃

帶安仔去中正紀念堂看海綿寶寶
結果從這一刻起開始愛上泡泡XD


為此 即興寫了一首歌
吹泡泡 吹泡泡 吹吹吹吹泡泡~
吹泡泡 吹泡泡 吹吹吹吹泡泡~
買一罐肥皂~
吹一些泡泡~
泡一個下午 好好笑~



好遼闊的青青草原
安仔走累了 第一次要求爸比抱抱

大手牽小手



也跑到淡水漁人碼頭去玩

8月跟著公司的旅遊團又去宜蘭玩了
這次是住 水岸森林會館 還不賴耶

9月去了飛牛牧場

工作之後常常在年底帶著父母一起去玩
三代同堂一起去宜蘭玩啦


12月還跑去了白木屋觀光工廠

今年真是精采的一年
期待明年Balance家庭與工作之後
能夠帶著家人有更豐富的體驗~