---
# System prepended metadata

title: '2022-09-27'

---

# 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的接水  