【code review V.S. pair programming】
網頁好讀版:https://tdd.best/blog/code-review-vs-pair-programming/
昨天大女兒早上去學校、下午去上美語、晚上去游泳,回來已經很累很晚了,一直猛打哈欠。在去游泳之前,已經讓她把學校作業先寫完了。
睡覺前收拾書包,太太檢查她新的國字(硬體字筆畫)作業寫得怎樣,因為是第一次練,當時寫作業又蠻趕時間的,又沒大人在旁一起看,所以蠻多內容寫得只是有形狀,但很多細節都不對。
我癱在按摩椅上,聽著太太跟女兒隔著餐桌坐在對面的對話。
—
太太:「你覺得你寫得跟上面的字有一樣嗎?」
女兒:「一樣啊!」
太太:「有嗎?你仔細看看」
女兒:「一樣啊...」
太太:「你那個字最後那邊勾了起來,上面的字有勾起來嗎?」
女兒:「我沒有勾起來啊...」
聽著這段對話,讓我想到一些軟體開發過程常見的場景....所以我正瞅著何時去摻一腳。
接著大概連續10次,女兒寫了字,太太只說著問題在哪,女兒擦掉,再寫一次,還是一樣的問題,不斷 repeat。
她一直在打哈欠,因為一天上三種課,從早到晚真的很累,之前有約定過要避免這樣上課,為了避免她在根本不知道怎麼寫才會「對」的無限循環中崩潰,我決定起身。
「將她們從 code review 的形式改成 pair programming」
—
我:「怎麼啦,唷,你開始練習寫國字啦」
女兒:(嘟著嘴巴,含著眼淚,沒力氣跟心情多說一句話,繼續把她寫的字擦掉)
我走到她的身後,伸出兩隻手環著她。
我:「我來看看是哪個字,哇,這筆畫也太特別了點,你這後面好像往上翹了」(我刻意不用勾的字眼,因為他們剛剛才吵過這件事)
我:「要不爸爸幫你用橡皮擦,你再寫一次我看看會不會就好了。」
擦掉之後,她再寫了一次,還是歪歪的。
我問她:「嗯,這邊還是有點問題,你覺得呢?要不要爸爸再幫你擦掉?」
她仍然沒講話的點點頭。(她處女座的完美主義)
我再擦掉之後,跟她說,爸爸握著你的手一起寫。
接著我就在後面握著她的手,告訴她另一隻手壓著本子,我們一起寫了那個字。(估計此時對面的老婆應該要很羨慕嫉妒渴望才是,但我無暇理會她的眼神,我現在要專心跟女兒寫作業)
結果我們一起寫的字還是歪七扭八。
我告訴她:「這真的不簡單,要不換爸爸試試寫寫看。」
我把字擦掉,寫了一遍。醜醜的,再擦掉,再寫一遍,還是不到位。我笑了笑:「這真的要寫漂亮沒那麼容易。」
女兒聽了,說著她要自己練習寫。我幫她擦掉之後,她照著上面的字描了一遍,再到格子裡練習一遍,終於通過媽媽的標準了。
昨晚的例子就到這邊終了。
—
很多目前軟體產品開發還蠻上軌道的客戶,他們現在的瓶頸都是在 code review. 要嘛 review 容易變成瓶頸、要嘛因為瓶頸導致時間緊迫而淪為橡皮圖章的形式,又或者只是看看 code diff 之間的差異、寫法有沒問題,只能指出寫得好不好,而無法確認寫得對不對。
「先落實 code review, 形成瓶頸之後 試著用 pair programming 解決」我經常這樣建議那些覺得該 code review 但覺得 pair 不實際或是有抗拒的團隊。
code review 就像稽核,常見有幾個特點:
1)稽核沒過,代表沒完成,不給過關的。
2)稽核人員跟開發人員的目標不完全一致,稽核人員更偏重於把關,尤其是品質。而開發人員最大壓力來自於時程。
3)稽核是落後指標,發現問題時間點越晚,修復成本越高。加上責任落在要扛時程的開發人員,往往來來回回壓力會越來越重,要嘛心情受影響,要嘛放掉品質受影響。
4)離線(非面對面)斷點式的往返(context switch),大部分工程師傾向在線上留下 review comments, 而不是坐在一起面對面溝通,哪邊寫法有問題,了解作者的考量是什麼,我們怎麼達成一致的共識後交付。
對雙方來說,這樣多次斷點式往返,只依賴 comments 上的文字描述,會有許多誤解、中斷、等待的浪費。
這很像甲乙方的驗收方式,只是都是團隊內的工程師罷了。
我們整體最終目標(也該是共同目標)應該是:「在時程內有品質地交付我們兩有共識的程式碼。」
所以建議大家從這種傳統的線上 code diff review, 線上 comments, 來來回回後允許 merge 的形式,改成 reviewer 要 review 時跟作者約個時間,帶著電腦坐在一起,照著 reviewer 對需求的瞭解,以及他自己的思路,去看跟作者設計、寫法不一致的地方(經過了共同的 refinement, 驗收情境, planning part2,再從 test case 出發來看整體產品程式碼的設計),進行瞭解與討論,雙方持續有共識地一起修改調整,最後兩人一起完成這段 feature final commit,merge 回 trunk。
By the way, 我通常建議 reviewer 主導這個過程,用她的思路往下推進,而不是讓作者自己先描述作法跟思路,一來避免錨定效應,二來實務上看code的人不會聽到作者解釋和說明,得試著在沒有作者解說下,讀者能用最短時間、最少腦力、正確地理解程式碼的意圖。
兩人一起承擔時間、品質、對程式碼有共同理解的責任,只是這次擔任的角色不同而已。當下雙方都專心的完成這個共同的任務與目標。
先從 review 練習 pair, 熟悉了之後他們就會覺得那一開始就pair不就可以更早發現問題了嗎?
再搭配 scrum 那種非派工而是value-first 領工作的方式,再配合 #向上pair 的原則,團隊內 pair programming 是一件再正常不過的事了,通常也是效果最好,產出最高,但也最累的開發方式。
更別說 as a team 學習型組織,互補、增加公車指數、避免破窗、共同制定/調整規範、避免盲點、避免過度設計等等好處。
code 只要是一個人寫,沒別人看,永遠都是自己會改的那種 #養code自重 的形式,裡面真的會比「長麵筋」還藏污納垢的....
搞產品的只要那種永遠特定模組都只有特定人維護,基本上死期不遠,腐敗發臭速度超乎想像,拖越久越沒辦法,慎之慎之。
#敏捷人生
scrum好處 在 91 敏捷開發之路 Facebook 八卦
這件事站在我的角色,其實往往有兩種不同的角度該思考。
1. Coaching, 透過提問與引導,讓大家發現目前可能有什麼問題,讓大家決定可以怎麼解決。
目的是為了讓所有人參與、思考、找解決方案,這是團隊養成重要的一步。
2. 偶爾會發生的情況,是「團隊最後的共識,是會潛藏付出極大代價的。」
在我上次的客戶那邊,case 是 error handling,團隊討論決定完了作法,大家都達成了共識。但我聽到作法時感到十分詫異,這樣作法在實務運營上的成本風險太巨大了。
也就是當出現 P0/P1 issue 時,會害死那個 support 的人,他會很難追問題的根源在哪。
#我對ErrorHandling處理很龜毛的
公司跟服務可扛不了這樣的浪費跟損失。
我立馬暫停了眼前的 coaching, 請人召集了該 team (其實是 2 個 feature team) 所有人,告訴大家針對這件事我想多了解一點。
過程大概是:
- 能不能請你們告訴我,針對該問題你們決定怎麼做了呢?
- 為什麼我們需要怎麼做?在這樣做之前的問題跟造成的影響是什麼?
- 這樣做需要改那些東西?這樣做之後的影響跟好處是什麼?
- 如果發生了某個情況(岔出來問,這種你們歸類在P幾的issue, 讓他們知道重要性), 在這樣的方案下該怎麼處理 issue? 這樣的情況發生的可能性有多高?
- 所以,原本的作法可能會有什麼問題是我們之前沒留意到的?
- 那我們還可以怎麼做?
這其實是 technical coach 重要的工作,不只是把人跟團隊帶起來(讓他們能自己自走砲),我還需要站在客戶公司產品服務的角度考量,常見的就是運營、架構、技術引入、重要基礎建設服務這類重要的骨幹。
——
不該是所有東西都讓團隊自己決定,讓他們自己跌倒再自己爬起來就好。
至少 external technical coach 不該這麼幹,因為我不是一直跟在這團隊身邊。而即使是 fulltime 的 Scrum Master, 該怎麼拿捏到讓大家都參與了,每個人意見都很重要,還要找出方案的盲點,幫助大家進一步成長跟思考,也是很重要的。
#因為我們不只是引導者,#我們同時也是團隊的一員,#我們都得為產品跟使用者負責
以上建議也給一些朋友參考,千萬不要只戴著一頂引導者的帽子角色,讓團隊自我探索跟組織既是第一步也是我們的目標,但實務上不能只有這樣,而且每次都只戴這帽子,長久以往之後,自己容易變成一個不用擔負運營跟責任,只出張嘴的局外人。
#光講都可以很瀟灑啦
#中立不一定得變成局外人
#你也是團隊一份子也要為決定負責
Coaching & Training 並重,在團隊學習跟自我成長,與公司運營產品服務價值之間,最大化價值。
#工程師往往打從心裡賭爛那個只出張嘴的雞
#漸行漸遠後的SM可能還洋洋得意團隊已經不需要我了
scrum好處 在 Servus Belles Abenteuer in Deutschland 小貝德國冒險求生日記 Facebook 八卦
[Büro ist kein Ponyhof. - 美國老人的求職戰]
最近最紅的事情大概是美國選戰,算是在一整年病毒跟恐攻之後最具娛樂性的事情了。
票還沒開出來,我可是重壓拜登,跟小眼睛在德國的小日子 插賭珍奶跟韓餐!
撐住啊! 登哥~🥺
是說,人類活得越來越久咯! 連兩個七十幾歲可以當我阿公,當我小孩阿祖的人都可以當總統,未來有85歲出來選,也很難說。
而且我猜美國總統應該是史上最高齡的職業之一。
我看了跟問了一些德國鄉民跟我公司同事,大家都很討厭川普。 但台灣應該是少數川普粉絲很多的地方,可惜我們不是第51州,不然他應該就贏了。
#對岸神助攻
這個選戰更有趣的是,我的臉書毫無秀出跟選舉相關的新聞,好像就被屏蔽掉了,社群網站的演算法,也是越來越可怕了!
#你們的有秀出來嗎
然後,回到本週工作,幾乎是爆炸狀態,每天被滿滿的會議給塞滿。 在家工作以外可以有一些時間可以耍廢,但完全沒有,超多事情,直到剛剛決定把公司電腦收起來,直接收工,明天再說。
„Büro ist kein Ponyhof. „是一句德國很有名的諺語,很多人會把這句話放在辦公桌上,意思是辦公室不是遊樂場,讓你天真爛漫用的。
這句話扎實呈現在這兩天會議中,北德辦公室提出了對我們慕尼黑的不滿之處,或者覺得我們太廢,沒有好好處理那些要求,在我還沒爆氣殺球之前,我老闆已經連殺好幾球把對方黏在牆壁上了。 我在適時候補刀,提供建議跟解法。
我只能說,最近跟主管的雙簧順暢很多,雖然有時候他還是會斷線,但我會拉他,他也會拉著我,算是磨合一年以後比較順的地方。
然後,那個Scrum Master,我其實沒有很喜歡他,因為我覺得他滿會西瓜偎大邊,上次我跟他說會議報告遺忘掉我們,他還情緒話發瘋!?然後常常開會沒找我,結果發現,我是那個主題的靈魂人物?
#惡人先告狀
更不用說這個會議他說「噢! 跟其它同事講完以後,覺得感覺你很重要,所以找你來。」
#聽了就不爽
#立刻指出他流程錯誤地方
#還有不知道錯誤的東西
但,誠實說,感謝他這個會議讓雙方都能有話直說,的確很多問題說白說開了。 我已經想幹這件事很久了! 一直被我老闆擋著,還好他跳出來以一個中立立場主持。
但除了這個會以外,我還有很多會,每次開會好像去吵架參戰的。 要成為那種八面玲瓏,在會議上彎來彎去不說重點的人,很難欸!
#線上開會豪累阿
#太累我要來看烏龍派出所
#兩津勘吉曾經是我理想男友
#莫非我是麻里愛
#唯一愛看的動畫
#大家開會都是怎麼開的
#請聽我們在家工作那集
#真實呈現上班狀態
#拜登我靠你了
#珍奶大杯無糖去冰謝謝
#外加石鍋拌飯一份
#感謝招待
scrum好處 在 SCRUM 經驗主義與三大支柱(請開字幕更清楚)【升級你的專案 ... 的八卦

SCRUM 的核心-經驗主義與三大支柱,常常有朋友不是很理解為何他很重要,與可以對我們帶來什麼 好處 ,讓信賢來分析給你聽。 ... <看更多>
scrum好處 在 Re: [討論] Scrum Master是什麼樣的工作? - 看板Tech_Job 的八卦
我待過兩間公司跑 Scrum,只有最近的一間有明確感受到 Scrum Master
Scrum 團隊組成為三種成員
1. Product Owner (連長)
2. Developer (士官、士兵們)
3. Scrum Master (輔導長)
反正老闆/客戶的任務目標下來,連長要自己想辦法帶部隊攻下,用什麼辦法看連長自己
PO 有很高的權力去設計產品,開發者們也能在 planning 會議中提供意見
在一個不長的週期內做出來給老闆或客戶看,再開會調整,再改善...
不像傳統 PM 按照老闆的目標設計規範開規格書然後 RD 想辦法做出來那種流程
Scrum 團隊最好是成員對產品都有一定的了解和想法,然後也有能力實際做出來
而 Scrum Master 其實跟技術專業沒有絕對關係,但有技術專業的好處後面會講
Scrum Master 就是個輔導長,負責監督連長和士兵們有沒有按照部隊規定做事
有沒有誰違反了軍法 (早五查 daily scrum 沒出現、Retrospective 開士評會檢討)
開發過程中有內部或外部衝突時負責出來居中協調確認改變作法後可符合 scrum 規定
那麼有技術背景的 scrum master 有啥好處呢?
因為 scrum 是一種 state machine 機制,再在每個 Life cycle 做該做的事
從 planning > [...daily] > review > retrospective > planning ....
透過預估後實作並進行檢討改善在下一個輪迴做修正的方式做事
scrum master 要參與大小會議,確保討論跟修正作法沒有走偏 scrum 規範
比如有人覺得開會浪費太多開發時間,乾脆以後都不要開會,scrum master 就要阻止
然後找出問題關鍵,例如會議零散在每天的半小時、一小時,很容易打斷 RD 思考
這時他就要協調把會議整併在某些固定時間,確保 RD 有足夠連續思考不被打斷的時間
或者團隊成員外務太多無法專心在團隊內貢獻,scrum master 也要幫忙解決
在 retrospective 莒光日教育 scrum 的好處,請大家寫莒作講本週心得
在 planning 看 PO 連長開作戰會議確保底下 developer 士兵都聽懂理解有參與有互動
總之 scrum master 具有監軍的性質,確保團隊想出的作戰方式不會跑偏或違反軍規
我遇過的 scrum master 多少都像輔導長那樣會跟你聊天問你有啥想法之類的
千萬別在 scrum master 面前犯了思想上的錯誤
如果要當 scrum master 也必需對 scrum 有足夠的信仰,喔我的意思是深入理解
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.240.211.196 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Tech_Job/M.1663954743.A.10B.html
... <看更多>