Odd-e CSD Course Day 1
First 強烈的建議,記得準備好當地的 SIM 卡及插座轉接頭,在這五天中很好用的 
接下來,我就各個主題來介紹一下相關的心得。首先我們這五天裡會依照 Scrum 的流程,完全的跑過一次,從一開始的需求定義,到最後的 Sprint Review 一個都沒有少
Requirement workshop / A-TDD
在 Workshop 練習中,PO 會針他的需求不明確的地方做講述,身為 Agile developer 你需要做的是,先問出他實際的需求,再轉化成 A-TDD ,A-TDD 這個名詞有些人比較不常聽過,但教練一提到 BDD ,大家其實就都明白了。
所以在 Product Backlog Refinement (PBR) 裡,「討論」與「釐清」是一件很重要的事。並且這當中也提到了,何時該做 PBR , Before Sprint or After Sprint . 這裡提的是 Before Sprint (通常在Sprint Review 之前)
另一個更重要的是,開發團隊在這時候是協助 PO 去釐清一些真相,為什麼要特別提這事呢?
想像一下 PO 今天說,我想要能夠登入系統,但這真是 PO 的需求嗎?
也許他只希望進入系統後能顯示使用者的姓名 (在這裡開發團隊就相較之前多了好幾種解決方案)
有趣的事,最近看到一張圖來說明,為什麼我們需要「討論」

(人類已經演化成發現別人錯誤的最有效生物)
from: https://www.slideshare.net/ziobrando/the-sweet-spot-41853270
在分別寫下 A-TDD 的案例過程中,也引發了蠻多的討論。
e.g.
1. 當寫了多組相似的 A-TDD , 如何重新組合成單一案例? (keyword: Scenario Outlines)
2. 當 A-TDD 完成了,如何應用這個案例產生 Business Rule 或是反過來產生新的案例
3. A-TDD 的內容該怎麼寫? (只有工程師看的懂就好嗎?或是應該要讓 PO 也看的懂)
這裡想起以前 91 (Joey Chen) 在 TDD 課程中提的,如何讓 PO or PM 一起加入寫 BDD Case
除了 Nature Language 外,另一個就是團隊成員如何一起協助你的 PO or PM (適時的提出一些技術面的想法或常見的做遙)
現在開始別讓你的 PO or PM 成為邊緣人。一起完成 A-TDD 的案例吧!

from: http://physicalculturist.ca/leave-me-alone-collection/
並在中間舉了 Parkinson's law of triviality 做為團隊在討論問題時常見的迷思 
此外一個重要的點我覺得是先前提的如何產出你的 Business Rule

from : https://www.slideshare.net/tcmak/adopting-technical-practices-2013
從這張圖可以看出,開發團隊在開發的其實是在最下層的 Technical Activity
但 Technical Activity 事實上是從 Workflow 而來,而 Workflow 是由 Rule 決定的
這裡存在一個很大的風險是,當在你的 Rule 不明確時就進行開發,這不叫 Agile 這叫 idiot
所以透過 A-TDD 與 PO 反複進行討論的同時,其實是要把 Rule 與 Workflow 訂出來
才能讓在最後需求變動時,影響的範圍較小,而且比較不會 Over Design
SCM,Build Automation and other tools
在這個單元中,其實著重在的是如何進行你的流程。工具其實真的不是太重要
(Day 2 會特別詳細討論這個)
在這裡介紹了許多常見的 Build Tools
e.g. cake 、 coypu
中間其實有提了這次 Sprint 裡我們的 Definition of Done
Sprint Planning
在 Sprint Planning 中,我們一共做了兩次,兩次其實都隱含了對 Product backlog 做出承諾這件事
Sprint V1
在 Sprint V1 中 跟以前玩的打牌遊戲不太一樣,感覺更簡單許多。直接將費式數列排出後,由某個成員選出一個他認為相對最小的 backlog 做為基準,在 1-2 輪中每個成員就依序進行 backlog 移動,並且在這當中"絕對不要進行討論" ,最白話的理由便是,不要讓你提出的理由影響到其它人的決定。
但在後面幾輪中,移動 backlog 時就需要提出你的理由了!而有趣的是,在這此 Spring Planning 中,我們團隊中其實有兩個需求不明確的 backlog ,在某次移動的當下我便直接詢問 PO 他對於這個 backlog 的想法為何,經過再次澄清後,其實就很容易能相對估算出這個 backlog 的大小為何了!當然我們在這當中也有犯了一個小小的錯,我們在其中一個 backlog 還不明確的清況下,將它估算的相對太小。 這時候 PO 也直接提出了,如果實際上我的需求其實難易度很高,那這個 backlog 是不是就會相對來說變的比較大?
(簡單來說,任何在這過程中不清楚的通通都要提出來問,問 Team member 、 PO 、 Scrum Master 、 balala… )
而當 PO 在我們估算結束後,進行排列時。 有成員提出了,如果按照 backlog 上的估算來進行 backlog priority 的排列是不是比較好?
但事實上, PO 並不在意估算, PO 關心的是在他排列完之後,他的需求能不能被完成
另一點是,有小夥伴提出了,如果 backlog 裡有相依性該怎麼辦
其實答案也一樣,對於 PO 而言不關心使用者故事相依性,關心的是你怎麼實現他的夢想
Sprint V2
在 Sprint V2 中,我們將上一輪最後評估能做的 backlog 做"細節拆分"外,一樣透過團隊成員來決定這樣的拆分是否可行,只要有一個人說 NO 。這時候就必需停下來,傾聽成員解釋相關原因
這裡用了很簡單的 Fist of Five ,具體可以參考這裡 (簡單的說是透過1到5只手指來做投票)
http://agileforall.com/learning-with-fist-of-five-voting/
Pair Programming
最後就進行了第一天的 Pair Programming ,第一天的過程其實就比較順利
因為我的夥伴聽不太懂我在說啥,只能用文件進行溝通。不過最後算是有順利完成我們的目標啦(茶)
當然我其實是蠻喜歡 Pair Programming 的,透過這樣的方式去觀察其它人遇到問題時的解決方式,來偷學幾招。其實蠻有趣的!其中一個點是,我發現印度人在遇到問題時,第一個不會先找 Stackoverflow ,而是先翻文件。跟我的習慣不太一樣,通常一般的錯誤丟 Stackoverflow 就有了!但翻文件的時間可能就會比較久。
另外在每天結束時,每個人都會針對今天的內容做短暫的回顧分享。透過反饋來重新學習與複習今天所學到的內容
對課程有興趣的同學,可以到以下網站找到相關的資訊
Odd-e CSD Course Day 1的更多相关文章
- [LeetCode] Odd Even Linked List 奇偶链表
Given a singly linked list, group all odd nodes together followed by the even nodes. Please note her ...
- Odd Even Linked List
Given a singly linked list, group all odd nodes together followed by the even nodes. Please note her ...
- LeetCode 328. Odd Even Linked List
Given a singly linked list, group all odd nodes together followed by the even nodes. Please note her ...
- tr:even 与tr:odd
:even匹配所有索引值为偶数的元素,从 0 开始计数查找表格的1.3.5...行(即索引值0.2.4...)<table> <tr><td>Header 1< ...
- Leetcode Odd Even Linked List
Given a singly linked list, group all odd nodes together followed by the even nodes. Please note her ...
- CSS3伪类选择器:nth-child()(nth-child(odd)/nth-child(even))
nth-child(odd):奇数 nth-child(even):偶数 使用时,如果是精确到数字时,切记是从同一级别的元素开始计算,而不是指定某个类才开始计算. 比如: <li>< ...
- [CareerCup] 5.6 Swap Odd and Even Bits 交换奇偶位
5.6 Write a program to swap odd and even bits in an integer with as few instructions as possible (e. ...
- [Educational Codeforces Round 16]C. Magic Odd Square
[Educational Codeforces Round 16]C. Magic Odd Square 试题描述 Find an n × n matrix with different number ...
- 328. Odd Even Linked List——多利用fake_head
Given a singly linked list, group all odd nodes together followed by the even nodes. Please note her ...
- 越狱Season 1-Episode 12:Odd Man Out
Season 1-Episode 12:Odd Man Out -Sorry to keep you waiting. 抱歉让你等了半天 -Oh, it's, uh, not a problem. 嗯 ...
随机推荐
- java.lang.ClassCastException: net.sf.json.JSONNull cannot be cast to net.sf.json.JSONObject的解决方法
报错情况已经说明了,在百度查了好几个解决方法,这里总结一下: 首先:加一个判断是否为空,再做操作 // 得到json串 String jsonString = UtilPOSTGET.UPost(FO ...
- 记一次Dynamic Batching不生效的爬坑实例分析[Unity]
最近在项目开发过程中,无意发现游戏场景的绘制占用了大量的Batches,几乎一个模型显示就占用了一个Batch,而Saved by batching数量几乎为0,即没有任何合批渲染优化.这显然跟预期相 ...
- Centos7 编译安装 Nginx PHP Mariadb Memcached 扩展 ZendOpcache扩展 (实测 笔记 Centos 7.3 + Openssl 1.1.0e + Mariadb 10.1.22 + Nginx 1.12.0 + PHP 7.1.4 + Laravel 5.4 )
环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7-x86_64-Minimal-1611.iso 安装步骤: 1.准备 1.0 查看硬 ...
- Java spring boot 2.0连接mysql异常:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone
解决办法:application.yml提示信息表明数据库驱动com.mysql.jdbc.Driver'已经被弃用了.应当使用新的驱动com.mysql.cj.jdbc.Driver' com.my ...
- WPF:How to display a Bitmap on Image control
一个Bitmap文件,叫做screenShotFile, 你可以这样显示到Image控件上. BitmapImage bi = new BitmapImage(); bi.Beg ...
- SIP协议搭建电信级VOIP/IM运营平台--架构篇(sip集群)
移动互联网的发展为整个VOIP通信行业开拓了新的战场,一时间各类即时通信软件如雨后春筝般冒了出来,再一次创造了移动互联网的发展神话.SIP协议做为音视频通信的首选标准,应用也越来越广泛. ------ ...
- SVN和Git的功能和区别,尚学堂SVN和Git学习视频资料免费下载
对于软件开发人员来说,版本控制系统再熟悉不过了,所谓版本控制系统就是软件项目开发过程中用于储存开发人员所写代码所有修订版本的软件.目前常见的版本控制系统分为集中式版本控制系统(SVN)和分布式版本控制 ...
- [Swift]LeetCode50. Pow(x, n) | Pow(x, n)
Implement pow(x, n), which calculates x raised to the power n (xn). Example 1: Input: 2.00000, 10 Ou ...
- [Swift]LeetCode565. 数组嵌套 | Array Nesting
A zero-indexed array A of length N contains all integers from 0 to N-1. Find and return the longest ...
- [Swift]LeetCode1030. 距离顺序排列矩阵单元格 | Matrix Cells in Distance Order
We are given a matrix with R rows and C columns has cells with integer coordinates (r, c), where 0 & ...