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. 嗯 ...
随机推荐
- TP框架下载功能
namespace Home\Controller; use Think\Controller; use Org\Net\Http; class IndexController extends Con ...
- 用 PHP文件引入css样式
html: <link rel="stylesheet" type="text/css" href="http://www.mysite.com ...
- linux下tomcat服务器的启动和关闭以及查看实时打印日志
本页面中的操作都在tomcat的bin目录下 <一> 一般我都是使用: ./shutdom.sh //关闭tomcat ./startup.sh //开启tomcat服务 <二> ...
- 一致性Hash算法在数据库分表中的实践
最近有一个项目,其中某个功能单表数据在可预估的未来达到了亿级,初步估算在90亿左右.与同事详细讨论后,决定采用一致性Hash算法来完成数据库的自动扩容和数据迁移.整个程序细节由我同事完成,我只是将其理 ...
- LeetCode编程训练 - 拓扑排序(Topological Sort)
拓扑排序基础 拓扑排序用于解决有向无环图(DAG,Directed Acyclic Graph)按依赖关系排线性序列问题,直白地说解决这样的问题:有一组数据,其中一些数据依赖其他,问能否按依赖关系排序 ...
- JavaEE开发之Spring中的依赖注入与AOP编程
上篇博客我们系统的聊了<JavaEE开发之基于Eclipse的环境搭建以及Maven Web App的创建>,并在之前的博客中我们聊了依赖注入的相关东西,并且使用Objective-C的R ...
- 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)
上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...
- 动态规划----最长递增子序列问题(LIS)
题目: 输出最长递增子序列的长度,如输入 4 2 3 1 5 6,输出 4 (因为 2 3 5 6组成了最长递增子序列). 暴力破解法:这种方法很简单,两层for循环搞定,时间复杂度是O(N2). 动 ...
- VsCode 使用专用编程字体FiraCode
FiraCode资料:https://github.com/tonsky/FiraCode PHP代码效果如下: VsCode 配置中添加: "editor.fontFamily" ...
- Linux下源码安装并配置Nginx
实验环境 一台最小化安装的CentOS 7.3 虚拟机 安装nginx 安装nginx依赖包 yum install -y pcre-devel zlib-devel openssl-devel wg ...