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. 嗯 ...
随机推荐
- SPP-Net理解
文章没有看完,先挑几个点谈一下. 1. 动机 在上一篇文章的末尾提到,RCNN做了很多重复计算,SPP就是为了解决这个问题而提出的的一个方法----空间金字塔池化. 感觉这个问题本质上还是全连接层对r ...
- 关于height、offsetheight、clientheight、scrollheight、innerheight、outerheight的区别
二.也是平时经常用到的offsetheight 它返回的高度是内容高+padding+边框,但是注意哦,木有加margin哦,当然一般也木有啥需要把margin加进去的,以上代码为例,结果显示上图h2 ...
- 在Linux上要安装SSH协议
学习准备:博客园.CSDN.51CTO,注意问问题去CSDN.注意还有一种就是自己搭建博客,自己搭建博客相当于写一个网站:http://pyshell.cn;github:是一个代码仓库是别人的.有些 ...
- Lua学习链接
Lua捕获 Lua中_G 是个什么鬼 Lua与ObjC的交互
- JavaEE开发之Spring中的条件注解、组合注解与元注解
上篇博客我们详细的聊了<JavaEE开发之Spring中的多线程编程以及任务定时器详解>,本篇博客我们就来聊聊条件注解@Conditional以及组合条件.条件注解说简单点就是根据特定的条 ...
- js 动态生成背景图 GeoPattern
以前有个想法,能不能用JS动态创建CANVAS绘制图案当网页背景,在网络发现有现成的别人已经实现的:GeoPattern 代码如下: <!DOCTYPE html> <html> ...
- JAVA四类八种基本数据类型
boolean类型 Boolean在内存中占用一个字节. 当java编译器把java源代码编译为字节码时,会用int或byte来表示boolean.在java虚拟机中,用整数零来表示false,用任意 ...
- [Swift]LeetCode822. 翻转卡片游戏 | Card Flipping Game
On a table are N cards, with a positive integer printed on the front and back of each card (possibly ...
- Python基础语法(三)
Python基础语法(三) 1. 数值型数据结构 1.1 要点 在之前的博客也有提到,数值型数据结构在这里就不过多介绍了.在这里提及一些需要知道的知识点. int.float.complex.bool ...
- Ubuntu12.04中的虚拟机安装Ubuntu16.04,并实现远程控制16.04
目录 1.设置网络连接 1.1 VMware虚拟机网络地址设置 1.2 设置虚拟机内Ubuntu16.04的网络模式 未开机状态下 开机状态下 1.3 查看虚拟机中Ubuntu16.04的IP 2.进 ...