# 2022-09-27 ## Leon's Note ### Interesting Points - Temperature Reading as check in ![](https://i.imgur.com/aOgzGHV.png) - 很有溫度的感謝用詞:「謝謝 xxx 做了 yyy,感謝他為了 zzz 的努力」 - kata 題庫:https://cyber-dojo.org/creator/choose_problem - 要克制依照使用者流程去拆 item 的衝動,因為即便做完其中一個,整條功能還是無法使用 - 關注核心業務邏輯,例如網銀轉帳,核心是錢從 A 帳戶轉往 B 帳戶,因此應先考慮完成轉 1 塊錢的功能,再去考慮其餘的登入、驗證等等功能 - 在考慮 item 實現的先後時,用「因果」去切開會是比較合理的作法,例如電商訂單退貨功能,一定是要先有建立訂單功能,才可能附加上退貨功能,這時候分為建立訂單 item 和退貨 item 就合理,而且建單功能一定會先做,退貨則是基於既有功能附加上的,即便沒做也不會影響核心流程 - 用一個實際指示物(e.g. 尖叫雞玩偶)來代表是哪個 team 造成共用 CI fail 並將指示物放置於顯眼處,讓所有人都看得見,用無形的力量去敦促該 team 修復,而不是口頭催促 - 6-8 個 sprint 可以發生一次 "Current Architecture Workshop" 讓所有 member 有機會認識當前產品專案的最新發展狀況 - PO 其實也有權力去 assign 哪個 team 做哪個 item - 注意討論時的「名詞」和「動詞」,用詞儘量統一、精準,來勾勒出 domain - cucumber test 描述的是 user 角度的場景,不應有技術相關詞彙出現 - 一種理想的狀況:儘可能不要在 local 端有未 commit 的改動,否則會與真實狀況距離愈來愈遠 - Terry 建議讓自己做到可以隨時 commit & push,並在接近下班前開始做一些收斂性質的 task 而不要開新副本,否則經常會因為亢奮而延遲下班 - 除了一開始 SP1 就先拿下所有當週要做的 items,有另一個作法是每個 team 就只先拿一張 item,做完才跟其他 team 和 PO 同步資訊並拿下一張 - 確保每個 team 都有至少一張 item 可以做的同時也避免過度承諾 - 「吃」下 item 之前先考慮,能不能做到 **DoD**?不應只是考慮技術可行性而已 - Done 和 Finish 還是不太一樣的,Done 在 Scrum 中甚至是有點神聖的事情 - 改 code 導致測試壞掉,代表的其實是這版新的 code 在某些情境是壞的 - GWT 的 Given 隱含了「本來就有的狀態」的意味 - 例如:「title 為台北且有顯示 photo & map 圖片的一篇 note」 - Focus 在要通過的驗收條件,即便偶然發現有 bug,除非擋到路否則就先不管它,若擋到路那修復這個 bug 就是實現驗收條件的必經的一部份 - e.g. wikidata id input 在 submit 後未更新問題 ### 浪漫與經典 - 浪漫講求的是感覺,細節愈少愈好 - 測試應當浪漫,就像寫情書 - 讓初始測試通過的 easy code 也是一種浪漫,得過且過即可(有時甚至 hard code) - 經典求的是「心靈的平靜(peace of mind)」,讓事情能夠做了就忘掉,因為無須擔心 - 農場小幫手 Jim 的故事 https://www.youtube.com/watch?v=VMDQumInZw0 - 重構就是一種經典 - 兼具浪漫與經典,就是有品質 ### Refactoring > "Programming is an ART of doing one thing at a time." - 重構的時候才做「設計」,架構由此而生,而非預先設計 - behavior 的改動和 structure 的改動要拆開來做 - refactoring type 1&2 - type 1: 目的大都是「整理」,不太會影響整體的架構,比較類似於看到雜亂的房間想要收拾一下的感覺,通常伴隨於 behavior 的改動發生 - type 2: 目的是讓之後的改動更容易,通常會發生解耦合、改架構等工作,要在所有測試都通過的前提下執行,有的時候會是發現 behavior 很難改之後,先退掉對 behavior 的改動(或 ignore 新測試)轉而先把 type 2 refactoring 做好後再回頭專注於原本要做的 behavior 改動 - MTCEBMTEC: make the change easy before making the easy code ### Team Work - pair 時,driver 並非完全不思考,反而他應該要是 smart keyboard - 合作默契愈好的 pair 組,溝通的層次會愈高;反之不嫻熟的 pair 組則會有更多低層次溝通 - 高層次溝通:「這邊有個 feature envy 的 code smell,把它改掉吧」 - 低層次溝通:「請輸入 pokerHand,p, o, k, e, r, h, a, n, d」 - 理想的 Just In Time Leadership,就是當需要時,團隊會自然而然地出現一個 leader 帶領團隊解決眼前問題,這位 leader 可能是出於對該問題類型的熟悉、個人特質、興趣等等原因,並且會在問題解決後退位回到原本 team member 的身分 - 5 個人的團隊可能會是有良好溝通品質的上限,6 人以上的團隊會開始出現 sub group,此時會需要有具備經驗的 facilitator 或 SM 介入引導 - 要避免抽象地在空中描述,用共同看得到的畫面來對焦討論項目、用 example 來對齊認知 ## Alex's Notes ### 早上回顧 - Assumption Mapping : 新概念.有機會可以查一下 - Impact Mapping (粗顆粒度)-> Story Mapping (細顆粒度) - Impact Mapping 在Review的時候,再拿回來回顧,看是否產生正確的價值。 - Lean inception : - Temperature Reading(Daily Scrum meeting?) - Appreciations : 有沒有要感謝的人 - New Information : 會影響協作關係的. - Puzzles : 困惑, - Item Name Token : 只是溝通的標的,沒有具體的意義 - 了解使用者目的,真正幫助使用者,會比做這個PBI還意義重大. - Sprint 有很多的迭代,拿了三個Item,每一個Item會跑完整的迭代。一個Item 可能是用很多場景,每個場景,就是一個迭代,一個Test Case就會是一個迭代 - 有依賴不得不溝通是副作用,主要目的TBD - No Dead Code,實作的方式,沒用到的就是Dead Code,舉例來說,有人寫了一個Test Case,Checkin 後離職,後面的人就不知道這個Test Case在幹嘛 - Biz Domain跟solution Domain 交互的時候(UbiLang 定義),要在PBR做掉.E.g. Book , location - Item優先順序, - 步驟的順序,不會這樣子拆 - 完整的Item 有優先順序,就按照優先順序. - A與B 依賴某個技術項目,這個時候,AB 估算都是用獨立的故算.Q:那這樣子會不會造成Sprint肥大.沒有做那麼多事情? - Worry w/recommendations : 擔憂與建議 - Hopes & Wishes :期待 - 一般團隊在週四作PBR, - current architecture workshop. 一般也是在禮拜四上午或下午,三四個月做一次.描述目前系統架構. - CI Fail rate 10 次 1 個fail,人數多你會希望小一點 - Chicken coop 拿走,代表有人在修,不要push. - 如果在自己家,但不是自己幹的,要去問其他家,誰要修這個東西. - 一個PO會不會有特別喜歡的團隊,實際上會有,PO可以指定 - Sprint 的週期,讓每個人可以對未來有預期的狀態,如果不是固定週期拿PBI會造成大家步調不一致。 - 先做小步驟,看有沒有用,CRUD可以分開,有時只是看一下感覺. - 要做多少 - Done, 只有一個團隊DoD跟多個團隊DoD不一樣。 - Finish:可以想一想 - 故事 - ![Imgur](https://i.imgur.com/7GRODoq.png) - 農夫老了 工作做不完 開始找人,只有來了一個小孩Jim,問他會什麼,小孩說,刮大風我也能睡著,老農夫 決定試試,Jim 後來做的也中規中矩,一天一天過去,突然一天掛大風下大雨,暴風來之前一般都要先做準備,農夫開始找Jim,他正在睡覺,也叫不起來,最後農夫決定自己用,結果發現 馬都在馬廄 們都鎖好,乾草也很牢的固定在那邊,好像全部都準備好了,農夫跟Jim 問如何預測風暴的,Jim說每天我都先整理完畢,就可以睡得好覺 - - User Story and Test Case ,可以浪漫一點, - How 那一邊,就要經典一點,著麼好維護,少Bug. 經典 = peace of mind 如何得到內心的平靜. - 架構師 ,我們持續做一些小決定,讓他維持 peace of mind - - 測試驅動開發 - ![Imgur](https://i.imgur.com/oh47ry1.png) - Refactoring type 1 - 紅燈(浪漫),用紅燈來描述測試情境,只涵括包括的使用情境. - 綠燈(浪漫),在我們的情境上有能夠工作. - 重構(經典), 紅綠重構 就算沒有也要做,有測試保護,有Working software. 不更改外部的行為,改內部的設計 - 設計從有實際上的Code重構開始,不是一開始就做設計, 設計是慢慢演進,再變成架構. - When :從有實際上的Code重構開始 - What : 什麼東西提示重構,Code Smells - How : 用IDE抽取 - feature envy, - 紅燈,代表弄壞掉,某一些測試情境 - EC: Easy Change - 當有浪漫的美,也有經典的美,才有Quality. - E.g.有品質 外面看起來很好,結構也很堅固 - cyber-dojo.org - ![Imgur](https://i.imgur.com/yLMZaKd.png) - ERROR 先修掉,再處理 Assertion Fail - 出現紅燈時產生真正失敗,才開始寫code. - Refactoring cat - ![image.png](../assets/image_1664263946271_0.png){:height 611, :width 747} - 寫code , programing is art of doing one thing of time. 跟攀岩一樣 - Behavior , Structure 是兩種不同的改動,要分開的。會是 BSSBSSSBS這樣子的節奏. - Refactoring type 2 - Make the change easy before make the easy change - 這邊需要解耦合 MTCEBMTEC - ![Imgur](https://i.imgur.com/mLQAPm5.png) - 上面的部分是 實作,下面是 理論基礎,如果把理論基礎當成實踐來做,就會有很奇怪的狀況 - Type 1 會伴隨著Behavior改動來的,Type 1 and 2 都會有Structure change. - - Less In Action Teams - ![Imgur](https://i.imgur.com/awjSZxT.png){:height 308, :width 402} - Team - 真實 長久不變往好的方向努力 - 有遙不可及的共同願景 - 成員會在這個團隊不斷的演進,並且不斷成長 - 公司可以重外面,導入新的想法Coaching - 公司與團隊可以互相承擔彼此的壓力, - Team Sport 是一個馬拉松,不是短期衝刺 - 如何建立一個Team - Retro 方向 - 效率 - Working agreement :團隊協議,約束我們習慣,提醒我們該做哪一些事情,為了做到Learning team. - 主要是團隊 如何進化, - DoD : 逐步達到完美的開發水準 - 讓整個團隊多做一點點的進步 - 還要跟外部Team 的關係 - 當下的Just In time leadership ,沒有指派特定的Team Leader - Size最多5-8 個 在同一個Team - 跨技能人才比較好, - 如何快速達成共識,僵局的時fis of five - Commit 代碼的 抉擇,要保持能夠Check in code. - 上午做開放性的Case. - 下午做收斂性的Case - Commit = Push = Deployment. - 4-5-6 五個人都會照顧其他人感受,6個人會出現SubGroup,就需要很多的Facilitating Task,有可能的話不希望團隊超過五個人.但是為了維持團隊 會給到7個人,才不會被團隊人員流動影響,但對SM中,他要做很多維持的工作,會很辛苦. - Just in time leadership. 當一個情況出現,會自動產生一個Leader來協助解決問題. - 小組的人,Leader 會換,只有社會化到一定的程度才有可能有長久的Leader - Hunan kind - a hopeful history - Learning team. - E2E Test 目的 - 完整的展現產品目的 - 衡量目前開發進度 - PBI 的實現不會是用技術的Team - E2E 的實現 - Cucumber 的 Backend 是 3A的 Arrange ,負責把相對應的資料Insert. - 對於後面實際上的操作會寫在Command and Testablility - 對外部的操作 會使用Mock的E2E Service,才不會因為外部的Service 損毀造成問題,最後External Service 需要每天跑個兩次,確保跟外部Service的接水