เกรียนเพรส - roofimonpage 2 of 220 table of contents ค าน า 11...

220
2011 เกรียนเพรส Powered by www.agile66.com [แอจไจล์ซามูไร] หนังสือแอจไจล์ภาษาไทยเล่มแรกของโลก เท่ระเบิด

Upload: others

Post on 15-Feb-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

2011 เกรยนเพรส

Powered by www.agile66.com

[แอจไจลซามไร] หนงสอแอจไจลภาษาไทยเลมแรกของโลก เทระเบด

Page 2 of 220

Table of Contents

คานา ............................................................................................................................................................................... 11

ตอนท 1แอจไจล๑ในเปลอกนท ............................................................................................................................................ 13

สงงานดๆทกอาทตย๑ ..................................................................................................................................................... 13

การวางแผนแบบแอจไจล๑นนทางานอยางไรกน? ............................................................................................................. 17

เสรจแปลวาเสรจ ........................................................................................................................................................... 18

ความจรงทงสามประการ ............................................................................................................................................... 19

มาตรฐานการใชศพท๑ .................................................................................................................................................... 21

ตอไปเปนอะไร .............................................................................................................................................................. 21

ตอนท 2 พบกบแอจไจล๑ทม (ตกลงมนซามไรหรอนนจา) ...................................................................................................... 22

อะไรททาใหแอจไจล๑โปรเจคดแตกตาง? .......................................................................................................................... 23

อะไรททาใหแอจไจล๑ทมพรว .......................................................................................................................................... 24

ยายทนง .................................................................................................................................................................. 25

วงใสลกคา ............................................................................................................................................................... 25

จดระเบยบตวเองได .................................................................................................................................................. 26

ความรบผดชอบและความมอานาจ ........................................................................................................................... 27

ครอส-ฟงก๑ชน ........................................................................................................................................................... 27

บทบาททเราเหน ........................................................................................................................................................... 28

คณลกคาแบบแอจไจล๑ .................................................................................................................................................. 29

ทมพฒนาแบบแอจไจล๑ ................................................................................................................................................. 30

แอจไจล๑อนาไลซสท๑ ...................................................................................................................................................... 31

แอจไจล๑โปรแรมเมอร๑ .................................................................................................................................................... 32

แอจไจล๑เทสท๑เตอร๑ ........................................................................................................................................................ 33

แอจไจล๑พเอม ............................................................................................................................................................... 34

Page 3 of 220

แอจไจล๑ UX ดไซน๑เนอร๑ ................................................................................................................................................. 35

คนอนๆ ........................................................................................................................................................................ 35

What’s Next? .............................................................................................................................................................. 37

ตอนท 3 ชวนคนขนรถแอจไจล๑ ........................................................................................................................................... 38

3.1 อะไรเปนสงทฆาโปรเจคสวนใหญ ............................................................................................................................ 38

3.2 ถามคาถามยากๆ .................................................................................................................................................... 39

3.3 เขาสชนแหงการเรมตน ............................................................................................................................................ 40

3.4 แลวมนทางานยงไง ................................................................................................................................................. 41

3.5 ชนแหงการเรมตนในเปลอกนท ................................................................................................................................ 41

ตอนท 4 มองภาพรวม ....................................................................................................................................................... 43

4.1 ถาม: ทาไมเราถงมาอยตรงน ................................................................................................................................... 44

4.2 สรางคานาเสนอแบบรวบรด .................................................................................................................................... 46

4.3 ออกแบบกลองบรรจผลตภณฑ๑ ................................................................................................................................ 49

4.4 สรางรายการ ไมทา ................................................................................................................................................. 52

4.5 พบปะเพอนบาน ..................................................................................................................................................... 54

ตอนท 5 Agile ไมใชแคคด แตตองทาไดจรง........................................................................................................................ 59

5.1 ม solution ดๆ เอามนออกมากางใหทกคนด (วาหนาตามนเปนยงไง)......................................................................... 60

ตองทาอะไรยงไงละนน ............................................................................................................................................. 60

5.2 ตงคาถามกบตวเองวาอะไรททาใหเราเปนกงวล ........................................................................................................ 61

เปดเผยและสรางสรรค๑(ตเพอกอ(เรองใหเปนเรอง)) ..................................................................................................... 62

5.3 ประเมนและประมาณการ ....................................................................................................................................... 65

5.4 ยากนอกทวาอะไรบางทตองยอมเสย(เพอใหไดอะไรมา) ............................................................................................ 68

5.5 มอะไรบางทจาเปนตองทา (เพอใหสาเรจ) ................................................................................................................ 74

บทท 6 เกบ User Story ..................................................................................................................................................... 81

Page 4 of 220

6.1 ปญหาของการทาเอกสาร ........................................................................................................................................ 81

หรอจรงๆแลวเราตองทาเอกสารใหมากกวาน? ............................................................................................................ 83

6.2 มาใช User Story กนดกวา ..................................................................................................................................... 84

6.3 สวนประกอบของ User Stories ทด ......................................................................................................................... 85

Wel come to Big Wave Dave’s Surf Shop .................................................................................................................. 90

6.4 How to Host a Story-Gathering Works hop.......................................................................................................... 93

Step 1: Get a Big Open Room ................................................................................................................................... 94

Step 2: Draw Lots of Pictures .................................................................................................................................... 94

Step 3: Write Lots of Stories ....................................................................................................................................... 95

Step 4: Brainstorm Everything Else ........................................................................................................................... 96

Step 5: Scrub the List and Make It Shine .................................................................................................................. 97

What’s Next? .............................................................................................................................................................. 97

ตอนท 7 :วาดวยการประเมน : ศลปะแหงการคาดเดา ......................................................................................................... 98

7.1 ปญหาของการประเมนเบองตน ............................................................................................................................... 99

7.2 เปลยนมะนาวใหเปนนามะนาว (Turning Lemons into Lemonnade) .................................................................... 101

ระบบ Point-Based (Point-Based Systems) .............................................................................................................. 105

7.3 มนทางานไดอยางไร? (How Does It Work?) ......................................................................................................... 107

ลาดบตอไป ................................................................................................................................................................ 114

ตอนท 8 (ดรามามหากาฬ)............................................................................................................................................... 116

8.1 ปญหาของแผนแบบ สถตย๑ (โคตรไม make sense, static) ..................................................................................... 116

8.2 เรมวางแผนในแบบแอลไจล๑ๆ ................................................................................................................................. 119

8.3 Scope ของงานสามารถเปลยนแปลงไดเสมอ ......................................................................................................... 122

8.4 Your First Plan .................................................................................................................................................... 123

Step 1: สราง Master Story List ของคณขนมา ....................................................................................................... 124

Page 5 of 220

Step 2: กานดขนาดของแตละสงทเราจะทา ............................................................................................................. 125

Step 3: ลาดบความสาคญ(Priority) ........................................................................................................................ 127

Step 4: ประเมนความเรวของทมงาน (Team's Velocity).......................................................................................... 128

Step 5: จดสรรวน .................................................................................................................................................. 129

8.5 Burn-Down Chart ............................................................................................................................................... 131

8.6 เปลยนโปรเจคตางๆใหกลายมาเปนแอลไจล๑ ........................................................................................................... 134

8.7 ปฏบตจรง ............................................................................................................................................................ 135

ตอนท 9 การจดการ iteration ทาใหมนเกดนะ! ................................................................................................................. 143

9.1 ทาอยางไรจงจะสามารถสงงานทมคณคาแกลกคาไดในทกๆสปดาห๑ ? ..................................................................... 143

9.2 iteration ในแอจไจล๑ ............................................................................................................................................. 144

9.3 ชวยดวยยยย !!! ................................................................................................................................................... 146

9.4 ขนทหนง: การวเคราะห๑และออกแบบ: ทาใหงานมนพรอมจะดาเนนการ ................................................................... 147

9.5 ขนทสอง: การพฒนา: การดาเนนงาน .................................................................................................................... 152

9.6 ขนทสาม: ทดสอบ: ตรวจสอบงานททา ................................................................................................................... 154

9.7 Kanban ............................................................................................................................................................... 155

ตอนท 10: การสรางแผนการสอสารแบบแอจไจล๑ .............................................................................................................. 159

10.1 สอยางทจะตองทาใน Iteration ใดๆ ..................................................................................................................... 159

10.2 The Story Planning Meeting การประชมเพอวเคราะห๑เนองาน ............................................................................ 160

10.3 โชว๑ของ The Showcase ..................................................................................................................................... 161

10.4 Iteration Planning Meeting ............................................................................................................................... 161

10.5 จด Mini-Retrospective ยงไงด ........................................................................................................................... 163

10.6 อยาจด Daily Stand-Up แบบน ........................................................................................................................... 164

10.7 ทาอะไรกอไดถามน work สาหรบคณ ................................................................................................................... 165

ตอนท 11 สรางพนททางานทมองเหนได (visual workspace) ........................................................................................... 168

Page 6 of 220

11.1 โอ๏ะ โอ งานเขาแลว ............................................................................................................................................. 169

ตามพวกเราใหทนซ ทานผบรหาร ................................................................................................................................. 169

11.2 สรางพนททางานเสมอนไดอยางไร? ..................................................................................................................... 171

11.3 แสดงเจตนาของคณ ........................................................................................................................................... 173

11.4 สรางและแบงปนภาษาสวนกลาง ......................................................................................................................... 173

11.5 เฝาดบกของคณ ................................................................................................................................................. 174

ตอนท 12 ยนตเทส: รเสมอวา works ................................................................................................................................ 177

12.1 ขอตอนรบสเวกสครบทกทาน ............................................................................................................................... 178

12.2 เรมตนทายนตเทส ............................................................................................................................................... 179

เราจะไปศกษาเพมเตมไดทไหน? .................................................................................................................................. 184

ตอนท 13: รแฟคเตอร๑: กลบมาขจดความมวทางเทคนคททงไว .......................................................................................... 186

13.1 Turn on a Dime (มองผานๆตอนแรกอานเปน Damn) .......................................................................................... 186

13.3 เรามาแกไขความผดพลาดดวยการทา Refactoring กน ........................................................................................ 188

บทท 14 ทดด :เขยนยนตเทสต๑ซะกอน .............................................................................................................................. 195

14.1 เขยนยนตเทสต๑กอน ............................................................................................................................................ 195

14.1 จดการความซบซอนดวยยนตเทสต๑ ...................................................................................................................... 199

ตอน 15 Continuous Integration: ทาใหมนพรอมจะขนโปรดกชนเสมอ ............................................................................. 205

15.1 ไดเวลาโชว๑ ......................................................................................................................................................... 205

15.2 วฒนธรรมการพรอมจะขนโปรดกชนอยเสมอ ........................................................................................................ 207

15.3 อะไรคอ Continuous Integration ........................................................................................................................ 208

15.4 มนทายงไง? ....................................................................................................................................................... 209

15.5 สรางกระบวนการเชคอน ..................................................................................................................................... 210

15.6 สราง build อตโนมต ........................................................................................................................................... 211

15.7 ทางานทละนอยๆ ................................................................................................................................................ 213

Page 7 of 220

15.8 จะไปไหนตอด? ................................................................................................................................................... 215

Appedix A วธสอการของเรา ........................................................................................................................................... 217

มาแปล Agile Samurai กนนะ ..................................................................................................................................... 217

แบงงาน ................................................................................................................................................................. 217

หลกการ ................................................................................................................................................................. 218

Appendix B ทม ............................................................................................................................................................. 219

Page 8 of 220

ทมงานเยอะมากอยางกะ SNSD กราบขอบพระคณทมงานแปลหนงสอเถอนเลมใหญ ไมมบคคลเหลาน หนงสอเลมนคงออกมาไมไดครบ _/\_

ทมงานเราเยอะมากขอเอาชอและประวตยอไวท Appendix B นะครบ

Page 9 of 220

Page 10 of 220

เหยอ

ขอ ชาบ มา ณ ทน

Page 11 of 220

ค าน า ขอขอบคณทมงานผรวมทาหนงสอเลมนมากครบ ทแสดงพลงอยางตอเนองนบตงแตหลงจบงาน “BarCamp Bangkok IV” ก

ปลอยของกนอยางเมามนส๑ไมมยง อาจจะมสะดดไปบางเพราะมบางทานเปนพอลกออน บางทานกหนไปเมา บางทานกไปเลน

เกมส๑ออนไลน๑ บางทานมาชวยทารปแลวกหายไป บางทานกตดงาน บางทานกสวย บางทานกหลอ แตทกทานลวนแลวแตม

ความตงใจทจะนาเสนอและนาเอาความรทมแบงปนสคนอนอยางเตมทไมมกก

หนงสอเลมนไมสอนใหคณใชแอจไจล๑เปนดงนนอยาหวงวาอานหนงสอเลมนจะแลวจะสามารถเดนกรางไปบอกชาวบานไดวา

“ผมใชแอจไจล๑ ผมรจกแอจไจล๑ด จากการอานหนงสอแอจไจล๑ซามไร” เพราะทานอาจโดนตบกระโหลกไดเนองจากหนงสอเลมน

เปรยบเสมอหนงสอนาเทยวเกาหลทจะบอกวาเกาหลนาไปอยางนนอยางน แอจไจล๑นาใชนะ แตละสวนประอบของแอจไจล๑เปน

อยางไร กระบวนการทางานแบบแอจไจล๑มนเทยงไงแบบคราวๆมาก ดงนนสงตอไปทควรจะทาหลงจากอานหนงสอเลมนจบคอ

“จางทมงานผแปล(บางทาน)ไปท า Agile Coaching ครบ”

บรรณ (หนงสอ) + อธการ (เจาการ) เกรยนเพรส

เสาร๑ท 1 มกราคม 2554

บานแม อาเภอสวรรคโลก จงหวดสโขทย 64110

อกนด นอกจากหนงสอเลมนแลวทานทสนใจใฝแอจไจล๑ยงสามารถเขาไปศกษาเพมเตมไดจากเวบแอจไจล๑เทๆ อนเปนจดเรมตอนของการหลอกทานสมาชกหลายทานมาแปลหนงสอเลมน รบรองไดวาเนอหาเขม

http://www.agile66.com

Page 12 of 220

Page 13 of 220

ตอนท 1แอจไจลในเปลอกนท

เคยนงนกกนเลนๆไหมครบวาถาเราอยากสงงานทดและมคณคาใหลกคาทกอาทตย๑ เราจะตองทายงไง? ในบทนเราจะมาหา

คาตอบของคาถามนโดยเราจะลองคนหาดวาแททจรงแลวการสงมอบงานในมมมองของลกคาจะมลกษณะ เปนอยางไร

นอกจากนเราจะไดเหนบางมมของการทางานแบบเดมๆทเราคดวาดแทๆแตจรงๆมนเปลาประโยชน๑ไรสาระแค ไหนและกครงท

เราทางานออกมาแลวไมตรงกบสงทลกคาตองการเลย ดงนนหลงจากจบบทนเราจะไดเหนภาพคราวๆกวางๆวาการวางแผนแบบ

แอจไจล๑เปนอยางไร และเราจะวดความสาเรจใน แอจไจล๑โปรเจคไดอยางไร นอกจากนเรายงจะไดเรยนรวาการยอมรบความจรง

ทงสามประการ(มนคออะไร มนคอกฎสามขอของ หนยนต๑ทเขยนโดย ไอแซค อาซมอฟ หรอปาว) จะะทาใหเรากลาเผชญหนากบ

การทาโปรเจคทมเวลาอนแสนจะจากดและยดอกยมสกบความเลวรายทงหมดทจะเกดขนกบโปรเจค ไดอยางไร

สงงานดๆทกอาทตย

สาหรบหวขอนกอนอนขอใหทกทานหลบตาและลมไปกอนวาจรงๆแลวแอจไจล๑คออะไร เรามาลองสมมตตวเองวาเปนลกคาดกนหนอยวาถาเรามโปรเจคพรอมกบงบประมาณพรอมอยในมอเราแลวและแนนอนเราจางทมพฒนาทเราคดวาดทสดเทาทจะหาไดในโลกนเขามาแลว แต! อะไรเปนสงททาใหเราแนใจไดวาทมทเราจางมานนสามารถสงงานไดตามทเราตองการ? สงนนคอเอกสารกองโตทประกอบไปดวยแผนงานสวยเรดและรายงานสวยหรตางๆใชหรอไม ????? หรอในทางกลบกนถาเปลยนจากเอกสารกองโตเปนทกอาทตย๑เราจะไดเหนและลองใชซอฟท๑แวร๑ทถกทดสอบมาแลวและสามารถทางานไดจรงโดยเราเองเปนคนเลอกวาสปดาห๑ตอไปเราตองการเหนอะไรเพมขน ผมวาคาตอบของทกคนนาจะเปนทางเลอกทสอง เราจะเหนไดวาถาเราลองมองกระบวนการสงมอบซอฟท๑แวร๑ในมมมองของลกคาแลว เราจะมองเหนไดอยางชดเจนเลยวาลกคาตองการอะไรและนนถอวาเปนการเรมตนทดอยางยง คราวนเราลองจนตนาการวาเราจะจดการกบความตองการของลกคาใน

Page 14 of 220

มมมองของลกคา ยงไงถงจะเหมาะสมเชนเรามองวาเราอยากสรางเวบหนงเวบในระยะเวลาสามเดอนเหมอนหนกอนใหญๆ หนงกอนเราจะจดการมนยงไงด

1. สงแรกทเราจะทาคอเปลยนหนกอนใหญๆใหเปนหนกอนเลกๆโดยทหนกอนเลกแตละกอนจะเปรยบเสมอนกบความสามารถของเวบทเราอยากไดและคดวาสามารถแตละสวนทเราอยากไดมความสมพนธ๑และเชอมตอกนไดอยางตอเนองสวยงาม

ดงนนหลการในขอแรกคอพยายามแตกงานทยากมากๆออกเปนสวนเลกทดแลวงายและสามารถจดการไดงายกอน

2. สองคอพยายามมองหาสงทลกคาตองการจรงๆและลมสงอนๆไปกอน นเปนปรชญาการคดเลยกวาไดเนองการทางานหรอการสงมอบซอฟท๑แวร๑แบบปกตทเราใชๆ กนอยจะไปเนนเรองอะไรกไมรและสงเหลานนเปนสงทลกคาไมไดตองการไมวาจะเปนกองเอกสารขนาดใหญ แผนสวยๆ ทเอาไวมองแลวชนใจ แตถาเรามองกนไปทกนบงของจตใจกนแลวสงทลกคาตองการมากทสดกลบเปนซอฟท๑แวร๑ทสามารถทางานไดตางหาก ดงนนถาเราตงเปาหมายในการทางานวาเราจะพยายามสงซอฟท๑แวร๑มนทกอาทตย๑ ลกคาจะไดเหนสงเขาตองการทกอาทตย๑ นนหมายความวาเราจะมสมาธกบสงทตองทาจรงและตดงานนาจมตางๆออกไป ดงนนเมอเรามภาระไรสาระนอยลงเราจะสามารถทางานไดเรวขนถกตองมากขน อยางแนนอนและเปนทสด

3. แตเหนอสงอนใดเราตองมนใจวาไอของทเราจะสงมอบใหลกทกอาทตย๑นนเปนของดจรงๆทางานไดจรงๆและทกๆอาทตย๑ของสงนนตองทางานไดดขนเรอยๆ ไมใชทามามวๆ สงหนงทจะทาใหของของเราดขนไดคอการทาเทสท๑ ทามนบอยๆ ทาแตเนนๆ ทาเยอะๆ จะไมมการรอจนกระทงงานเกอบจะสงแลวคอยเทสท๑ (และกเละเสมอ) ทาใหการเทสท๑เปนสวนหนงของการทางานรายวน ทาใหมนเปนวถแหงชวต ไปเลยกวาได

4. หลงจากมแผนการสงงานทกอาทตย๑อนเมพซาแลว อกสงทเราตองทาเสมอคอการรบฟงขอคดเหนจากลกคา เนองโดยธรรมชาตแลวเราไมมทางรเลยวาสงทเราทาไปนนตรงหรอถกตองตามทลกคาตองการหรอไม ดงนนทางออกทเราตองทาคอ ถามลกคาตรงๆวามนใชหรอไมใช ถาไมใชแลวมนตองเปนยงไง การรบขอคดเหนเปนเหมอนแสงสองทางสาหรบเราถาขาดมนเรากจะหลงทาง เดาไปเองมวไปหมด ทาเสรจออกมากผดจากสงทลกคาตองการหรอไม

5. เราตองปรบเปลยนกระบวนทาเมอถงคราวจาเปน

Page 15 of 220

อนเนองมาจากความเปลยนแปลงสามารถเกดขนไดตลอดโปรเจคดงนนวถแหงการทางานคอเมอการเปลยนแปลงทสาคญทเกดขนในสปดาห๑นจะสงผลใหขอบเขตการทางานในสปดาห๑หนาเปลยนไป เพราะโดยทวไปแลวการทางานแบบเดมเรามกมแผนแบบคราวๆทเราพยายามทางานตามแผนแบบคนตาบอดทไมรวาปญหาจะมาเมอไหร ดงนนเราจะมเวลานอยมากในการแกปญญาเมอมนวงเขามาอยขางหนาเราแลว ดงนนขอสาคญอกขอหนงคอเมอไหรทเกดปญหาทกระทบกบแผนใหเปลยนแผนในทนท ไมใชไปมงหนาเหลยนปญหา

6. ผลของการใหสญญาวาเราจะสงงานใหลกคาทกอาทตย๑จะทาใหเราดมคณคาในสายตาลกคาขนมาทนใด เนองจากเราแสดงใหเหนวาเงนของลกคาถกใชไปอยางไร และเมอใดทเรามคณคาสงทเราจะไดตามมาคอ

i. That means owning quality. ii. That means owning the schedule. iii. That means setting expectations.

Page 16 of 220

iv. That means spending the money as if it were your own

อยางไรกตามปญหาคลาสสคคอไมใชทกคนทจะรกและชอบทจะทางานตามแนวคดน คนบางกลมไมนยมบรโภคความจรงและความเชอในเรองของการสงงานทมคณคากบลกคาทกอาทตย๑ไมอยในหวใจของเขาเหลานนเนองจาก การทางานแบบนจะทาใหคนเหลานนกลายเปนคนทโดดเดนอยางทไมเคยเปนมากอน มนทาใหเขาเหลานนไมมทจะหลบซอน แตในทางกลบกนถาคณเปนคนทชอบความทาทาย ชอบความมตวตน หลงไหลในเรองของคณภาพ การทางานกบแอจไจล๑ทมจะเปนเหมอนรางวลแหงชวต คณจะไดพบกบความสนกขนเทพ อยาไดกลวอยาไดกงวลไมวาจะเปนเรองอะไรเรากสามารถปรบเปลยนได ยกตวอยางเชนมนไมจาเปนเสมอไปทเราจะตองสงงานทกสปดาห๑เพราะบางทมกสงงานครงละสองสปดาห๑หรองานบางอยางทใหญมากๆเรากเลอนเปนสามได เนองจากแททจรงแลวแอจไจล๑เปนแนวคดททาใหเราจดจออยกบการคดวาทาอยางไรเราถงจะสามารถสงงานทดและมคณภาพใหลกคาเราได และรบขอคดเหนกลบมา และเมอมขอคดเหนใดทสงผลกระทบอยางแรงเรากสามารถเปลยนแผนไดอยางทนทวงท

ตอไปเรามาดแผนแบบแอจไจล๑กน

Page 17 of 220

การวางแผนแบบแอจไจลนนท างานอยางไรกน?

การวางแผนแบบแอจไจล๑ไมมอะไรพศดารแตเรยบงายสวยงาม เหมอนดอกไมบานยามเชา เหมอนดอกคดเคาบานเชาบานเยน เราวางแผนพาแฟนไปเทยวในวนหยดเสาร๑อาทตย๑ยงไงการวางแผนแบบแอจไจล๑กงายๆแบบนนเพยงแตเราจะมมชอเทๆเขามาใหใชงานนดหนอยเชนแผนกจกกรรมของเราจะมชอเรยกวา master plan ทประกอบไปดวยกจกรรมหลกๆหลายอนทเราเรยกมนวา user story

เรามาดรปปลากรอบดานบนหนอย จะเหนวา master story ของเรากคอรายการงานทตองทา(to-do list) นนเอง โดยทเราจะใสฟเจอร๑ทลกคาอยากไดแบบคราวๆไวใน master plan ของเรากอนและลกคาเองกจะเปนคนเลอกหรอจดลาดบความสาคญของฟเจอร๑เหลานเองวาฟเจอร๑ไหนสาคญกวากน ฟเจอร๑ไหนทลกคาอยากใหทากอน โดยการแบงนจะถกใสไวในสงทรยกวา ไอเทอร๑เรชน(Iteration) นอกจากนทมงานของเรากจะประเมนเวลาในการพฒนาฟเจอร๑เหลานนทละตว(Estimation) ซงเมอเอาสามอยางนมารวมๆกนเราจะไดแผนการทางานแบบคราวๆของเราแลวกอนจะไปไกลกวานเรามาขยายความเรองไอเทอร๑เรชนกนหนอย จรงๆแลวไอเทอร๑เรชนคอกลจกรสาคญทขบเคลอนแอจไจล๑โปรเจคของเราโดยทเรามกจะแบงชวงการทางานของแตละไอเทอร๑เรชนใหยาวประมาณหนงถงสองอาทตย๑ สวนปรมาณงานทจะสามารถใสลงมาไดในแตละไอเทอร๑เรชนนนจะถกประมาณไดจากความเรว (velocity)ในการทางานของทมขอดของการประเมนปรมาณงานตอไอเทอร๑เรชนแบบนคอจะไมมการสญญากบลกคาแบบมวๆ นจะสงผลใหแผนการทางานของเราอยบนพนฐานของความเปนจรงเสมอและเมอไหรกตามทสภาพความเปนจรงเรมขดแยงกบแผนงาน นนคอเวลาทเราจะตองปรบแผนและแผนการทางานทยดหยนนถอเปนอกหนงในหวใจสาคญของวถแหงแอจไจล๑ ซงเราจะไดเรยนรรายละเอยดของเรองแผนกนอกทในบทท 8 เรองของการวางแผน การรบมอกบสภาพความเปนจรง

Page 18 of 220

จากคาถามซามไรทานขางบน คาตอบคอถาคอพาดเขยงแลวเรากตองสทาใหเสรจตามเวลาแตอยางไรกตามเราตองแนใจวาเรากาลงพลกายสละชพในสงทสมเหตสมผลไมใชสงททาไปโดยไรทมาหาความจรงไมได อยางไรกตามเรากตองยอมรบโดยสดดวาแผนแบบไมสมเหตสมผลมกถกสรางขนมาเสมอและเราเองกมกจะถกสงใหทาตามแผนแบบนซงเปนเรองทไมถกตอง การทางานตามแผนซงการทาแบบนเรามกเรยกวา “ปาฎหารย๑บรหารโปรเจค”

แตสาหรบแอจไจล๑แลวเราไมตองการปาฎหารย๑เหลานนเพราะเราทางานกนแบบเปดใจไมหมกเมดและซอสตย๑กบลกคาของเราตงแตวนทเรมงาน เราบอกและทาในสงทมนควรจะเปนไปตามจรงและใหลกคามสวนรวมในการตดสนใจในเรองขอบเขต,

งบประมาณ และ ระยะเวลา เราเลอกทจะทางานรวมกบลกคาเพอใหไดมาซงแผนททงเราและลกคาตางเชอวามนเปนไปได ดงนนสวนตอไปคอเราตองรวาแอจไจล๑กาหนดสงทจะตองทาไดอยางไร

เสรจแปลวาเสรจ

อานหวขอแลวงงมาฟงนทานกนดกวาวาถาเรานกภาพวาคณยาเราไปจางเดกเกรยนมาตดหญาทสนามหญาหนาบานหลงจากนนคณยากออกไปสปา เราลองนกภาพดวาคณยาจะตรวจงานเดกเกรยนยงไง คณยาจะพจรณาสงเหลานไหม

พจรณาจากแผนการตดหญาการตดหญาของเกรยนวามนจะวางแผน

พจรณาจากเอกสารการออกแบบขนตอนการตดหญาอนอลงการของเกรยนเรองตดหญา

พจรณาจากเอกสารแผนการทดสอบความเรยบรอยของการตดหญาอนซบซอน

ถายาเราอานเอกสารเหลานแลวจายเงนเดกเกรยนโดยไมดเลยวาสนามหญาเปนยงไงแบบนดทาวายาเราจะปวย เพราะในความเปนจรงแลวเดกเกรยนจะไดเงนกตอเมอสนามหญาถกตดไดเรยบรอยสะอาดตาและกวาดเกบเศษหญาใสถงมดปากและถกเกบไวขางบานอยางเรยบรอย นสถงจะแปลวางานเสรจตามความตองการของคณยา ดงนนสาหรบแอจไจล๑เราใชแนวคดเดยวกนวาการสงงานหมายความวางานชนนนจะตองทาไดตามทลกคาตองการและถกทดสอบมาเปนอยางดแลวนนแปลวามนพรอมสงแลว

Page 19 of 220

ดงนนถาเราดจากภาพการสรางหนงฟเจอร๑จะประกอบไปดวยกระบวนการ analysis, design, coding, testing, usability

experience ทงหลายทงมวลจะถกอดไวพรอมกนเลยดงนนดงนน attitude ของแอจไจล๑คอเราสามารถทาไดถาเราจาเปนจะตองทา และถาผลงานทไดออกมาถกวดแลววาไมพรอมแปลวางานยงไมเสรจ ดงนนการทางานในรปแบบของแอจไจล๑จะตองเครงครดในหลกการและมใจนอมรบหลกแหงความจรงสามประการ

ความจรงทงสามประการ

ตอไปนคอเรองราวของความจรงทงสามประการของการสรางซอฟท๑แวร๑ซงเมอใครกตามททาใจยอมรบทงสามขอนไดเขาคนนนจะเปนอสระพบแลวซงสจจะธรรมตอดรามาทงหลายทจะเกดขนกบการทางานโปรเจคการสรางซอฟท๑แวร๑

Page 20 of 220

การรบความจรงขอแรกไดนนหมายความวาเราพรอมแลวทจะเรมการเดนทางอนแสนสนก(มง) โดยทเราไมจาเปนจะตองรรายละเอยดเกยวกบเสนทางทเราจะเดนทางทงหมด เราไปหารายละเอยดตอเอาขางหนา และเราจะไมหวนไหวกบอปสรรคทงมวลทจะเกด เพราะถาเรามวแตกลววาจะมขอมลไมครบเรากจะไมไดเรมสกท

การยอมรบความจรงขอทสองคอเราจะไมหวาดหวนตอ “changeeeee” เรายอมรบมนไดอยางทมนควรจะเปน เราสามารถปรบแผนไดเมอยามจาเปนเพอใหเหมาะกบการเดนหนาฆาลกเดยวของเรา

การยอมรบความจรงขอทสามหมายความวาเราจะไมเครยดมากมายเมอเรากาลงเผชญหนากบเสนตายของทงเรองเวลาและการขาดกาลงคนทเปนกองกาลงเสรม เพราะเรองเหลานลวนเกดกบทกๆโปรเจค สงทเราทาไดเพอแกปญหาเหลานคอ จดลาดบความสาคญใหม จดการสงทสาคญทสดกอน อนไหนไมสาคญมากปลอยไวกอนเดยวคอยกลบมาทามน

และเมอเรายอมรบแลวซงความจรงทงสามประการนเราจะรสกปลอยวาง ไมเกรงกลวตอความกดดน และปญหาทงปวงทเกดกบการพฒนาซอฟท๑แวร๑ “เพราะยงไงมนกตองเกด เมอเราปลอยวางตอสงเหลานเราจะมสมาธกบการคดอะไรใหมๆ พลกแพลงกระบวนทาเพอจดการกบปญหาใหมๆ เนองจากยงมอกสงเลกทเราตองระลกไวเสมอคอการใชแอจไจล๑ไมไดมเพยงแควธเดยว เราสามารถพลกแพลงตามสถานการ๑ณไดเสมอจบโนนผสมน ใหออกมาเปนทาใหมไดเสมอเหมอนกบเวลาเราซอไอตมเรากสามารถเลอกเอาไอตมหลายๆรสมาผสมกนใหเปนไอตมทเราในวนนนไดเสมอ

Page 21 of 220

แลวในแอจไจล๑มไอตมรสอะไรมง นคอรายการไอตมทเราสามารถเลอกไดแตชออาจจะประหลาดหนอย

Scrum—แนวทางการจดการบรหารโปรเจคทเปนแอจไจล๑ XP—แกนวชาอนศกดสทธทถอเปนหวใจของกระบวนการทางวศวกรรมซอฟท๑แวร๑ทเหมาะมากกบทกโปรเจคทเปนแอจ

ไจล๑ Lean—มหศจรรย๑สดยอดประสทธภาพ, ปรชญาการผลตแบบโตโยตา เปนสดยอดแนวทางทหาไหนเทยมไดในเรอง

ของการปรบปรงองค๑กร

และเหนอสงอนใดคอวถของเราเองวธทเราสรางชนมาเองและเราคดวาเหมาะกบเราเปนทสด

ดงนนเนอหาหลกๆของหนงสอเลมนจะเปนการแบงปนความรของผเขยนทไดใชงานมาไมวาจะเปนกระบวนการมาตรฐานของแอจไจล๑หลายๆแบบหรอแมกนะทงกระบวนการทไดคดคนขนมาเอง แตอยางไรกตามขอใหเราอยาหยดคดคนหากระบวนการทเหมาะกบเราเนองจากอยางทบอก ไมมสงใดทสามารถหยบออกมาใชงานไดเสมอเนองจากทกโปรเจคมความแตกตาง ดงนนเราตองรจกปรบกระบวนการมาตรฐานใหเขากบปญหาใหมๆไดตลอดเวลา

มาตรฐานการใชศพท

คาศพท๑หลายๆคาในแอจไจล๑ทถกใชในหลายๆ methodology คอนขางจะมความหมายทตรงกนแตกจะมบางคาทมความหมายแตกตางกนเมออยกนคนละทเชนระหวาง XP กบ Scrum ดงนนเพอความเปนหนงเดยวของเนอหาและความหมาย จะขออางองกบ XP เปนหลก

•ใช Iteration แทนคาวา sprint

• ใช Master story list แทนคาวา product back log

• ใชคาวา Customer แทน product owner

ตอไปเปนอะไร

Project ตอนนเรามวชาพนฐานแลวตอไปเราจะเดนหนาศกษาเรองทม บทตอไปคอเรองทมลวนๆเราจะไดดวาทมของแอจไจล๑หนาตาเปนไง แลวทางานกนยงไง และ รายละเอยดปลกยอยททมตองรกอนเรมการทาแอจไจล๑ครงแรก

Page 22 of 220

ตอนท 2 พบกบแอจไจลทม (ตกลงมนซามไรหรอนนจา)

แอจไจล๑ทมเปนสดยอดของแปลกถาเราเปรยบเทยบกบสไตล๑การเลนฟตบอลแลว มนคอโททอลฟตบอล(สาวๆงงอะด) เราคอยๆมาดลกษณะพเศษของแอจไจล๑ทมกนทละขอกนดกวา ขอแรกแอจไจล๑ทมไมมการแบงบทบาททชดเจน ทกคนเลนไดทกตาแหนงแลวแตโอกาส เดยวกองหนา เดยวกองหลง เดยวกองกลาง เดยวปก นคอความสบสน งนงน เบลอๆ ไมมโครงสรางทมทแนนอนแตเชอหรอไมวาทมแบบนผลตงานไดขนสดยอด? ในบทนเราจะไดเรยนรถงลกษณะอนเปนสดยอดของแอจไจล๑ทม อะไรทาใหแอจไจล๑ทมแตกตางจากชาวบาน เทคนคตางๆทแอจไจล๑ทมใช ทาใหเรารวาเราจะสรางโคตรทมแบบนเองไดอยางไรเพอใหเรามทมทพรอมกอนออกศก

Page 23 of 220

อะไรทท าใหแอจไจลโปรเจคดแตกตาง?

กอนทเราจะไดรวาอะไรคอปจจยททาใหแอจไจล๑ทมดแตกตางเราตองเขาใจเกยวกบแอจไจล๑โปรเจคกนกอน อยางแรกเลยสาหรบแอจไจล๑โปรเจคหนาทความรบผดชอบของแตละคนจะเบลอๆ ดงนนการทางานกบแอจไจล๑ทมจะใหอารมณ๑เหมอนกบการเขาทางานกบบรษทขนาดเลกทเพงตงไดไมนาน อาการจะออกแนวทามนทกอยางทจะทาใหโปรเจคสาเรจโดยไมไดสนใจวาตาแหนงหรอหนาทของตวเองคออะไร (ตวอยางนอาจจะดสดขวไปนด)

แตอยางไรกตามแตละคนเองกจะมความถนดไมเหมอนกนดงนนแตละคนกจะวนเวยบอยกบสงทตวเองถนดซะเปนสวนใหญแตสงพเศษสาหรบแอจไจล๑ทมคอจะไมมการระบตาแหนงในระดบลกๆเชนตาแหนง analyst, programmer หรอ tester เราหายงไงกหาไมเจอหรอถาหาเจอความหมายของมนกตางจากความหมายทวๆไปทเราคนเคยและอกสงททาใหแอจไจล๑ทมแตกตางคอการทา analyst, coding, design และ testing จะเกดขนตลอดเวลา มนจะวนไปเรอยๆจนกระทงโปรเจคจบ

Page 24 of 220

การวนแบบนหมายความวาเราไมสามารถระบเฟสทแนนอนของกจกรรมเหลานนได คนทอยในทมตองมสวนรวมกบกจกรรมมหาสนกนตลอดเวลาวนไปเรอยๆ ดงนนสวนทเราจะตองใหความสาคญมากๆคอการทางานเปนทม การมองภาพทกอยางจะมองผานทมทงหมด ความรบรบผดชอบทงหมดตองตกอยกบทมมใชคนใดคนหนง

และในเมอเรารวมกจกรรม analyst, design, coding และ testing ไวดวยกนแลวอกสงทเราตองยอมรบคอจะไมมสวนททาหนาท QA เพราะคณภาพคอความรบผดชอบหลกของทม การทา QA เกดขนตลอดเวลาดงนนเราจะไมพบคาอทานหรอคาบนวา “ทาไม QA ทมถงไดพลาดขอนไปได?” ในแอจไจล๑โปรเจคดงนนสรปโดยรวมเราจะเหนคณลกษณะสามสงในแอจไจล๑ทมคอ หนาทแตละคนจะเบลอๆ, ทา analyst, design, coding, testing อยางตอเนองตลอดเวลาและตองทางานเปนทมรบผดชอบเปนทมเสมอ ดงนนตอไปเราจะมาดกนวาแอจไจล๑ทมทาอะไรททาใหทมของเขาเหลานนประสบความสาเรจ

อะไรทท าใหแอจไจลทมพรว

กอนททมของเราจะเดนหนาลยแหลก มบางสงบางอยางทเราตองเรยกรองใหไดมาเพอเปนสวนเสรมทชวยใหเราประสบความสาเรจได

Page 25 of 220

ยายทนง

การยายทนงใหทมเขามานงใกลๆ กนเปนหนงในปจจยแหงความสาเรจเพราะเมอเราอยใกลกนในยามท มปญหาเราจะไดรบการชวยเหลออยางรวดเรว นนเปนผลใหความเชอใจกนกอเกดอยางรวดเรว อยางไรกตามเมอเราเหนขอดของการนงทางานใกลกนแลวคาถามกจะตามมาวา อยางงนแปลวาทมถกแยกออกจากกนไมไดหรอ? คาตอบคดไมจรง

ในบางกรณททมไมสามารถยายมาทางานดวยกนไดกไมไดหมายความวาเราจะทาแอจไจล๑ไมไดเรายงมทางออกฉกเฉนอยนนคอเราตองหาวธเตมเตมชองวางของระยะทางดวยการหางบประมาณมาสกกอนหนงเพอ จดกจกรรมททมจะไดมาเจอกนในชวงกอนเรมโปรเจคสกสหาวน นาเขาเหลานนมาทาอะไรขาๆ เยนๆกพากนไปเมาดวยกน เพอใหทงทมรจกกนดกอนจะเรมงานและหลงจากนนเมอเรมโปรเจคเราตอง หาเครองมอสอสารทงายและสะดวกมาใหทมทอยแยกกนสอสารกนไดงายๆเชนใช skype, vdo

conference หรอ social media เพอใหเขาเหลานนรสกใกลกนแมวาจรงๆแลวไม

วงใสลกคา

มความจรงทนาเศราอยหนงขอในเรองของการพฒนาซอฟท๑แวร๑คอมซอฟท๑แวร๑หลายตวทถกสราง ขนโดยททมไมเคยไดเจอกบลกคาเลยนนหมายความซอฟท๑แวร๑ทไดออกจะออกแนวผดเพยนจากท ลกคาตองการ มากเลยทเดยว และปจจยอกขอคอคนสรางจะสรางงานออกมาไดดไดอยางไร ถาไมเคย เหนหรอ เปนสวน หนงของกระบวนการทางานเลย ดงนนเราตองวงใสลกคาครบโดย เฉพาะคนทเราไปแสดงเดโม คนทตอบคาถามเรา คนทใหขอเสนอแนะเรา ใหคาแนะนายามเรา มปญหา จงนาคนเหลานนเขามาเปนสวนหนงของทมเรา ทาใหเคาอยกบเราตงแตเรมจะจบงานใ หได

Encourage Unplanned Collaborations

จากสารคดเกยวกบบรษท Pixar นน Steve Jobs ใหขอคดไวในสารคดนวา Pixar มชะตากรรม ทผกตดอย กบสงทเรยกวา Unplanned Collaboration มากขนาดไหน ในการสรางภาพยนต๑ท ประสบความสาเรจ ขนาดนน โดยทเหตการณ๑สาค ญทเปนตวอยางทดคอหลงจาก Pixar ปลอยภาพยนต๑เรอง Toy Story 2 ออกมานน (คอนขางลมเหลว) Steve รสกในทนทวา บรษทกาลงมปญหาเนองจากบรษทน นอยแยกกน มากจนเกนไป ทาใหเหมอนทมทางาน แบบแยกจากกน ซงถาปลอยใหเปนแบบนอกตอไปปญหาใหญตอง เกดกบบรษทแนๆ นเปนสาเหตหลกททาให Pixar ซอทขนาด 20 Acres ท Emeryvilee, Califonia เพอนาทมทแยกกนอยกลบมารวมกนอยางอบอน ผลของการยายครงนออกมาในแงบวกอยางมาก เนองจากดารสอสารระหวางทมดขนสงผลใหบรษทสามารถสรางภาพยนต๑ดๆออกมาไดทกป

การทางานดวยกนอยางใกลชดถอ เปนหวใจหลกของแอลไจล๑เลยกวาได เราจะเปนวาทง extreme programming และ scrum ตางตอสอยาง แขงขนทจะมทมททางานใกลกนเชนตองยกทมพฒนา

Page 26 of 220

ไปไวทบรษทลกคา และสาหรบ scrum มการตง ตาแหนงทเรยกวา product owner ขนมาเลยซงตาแหนงนเปนตาแหนงทสาคญมาก แตมากเพงใดเราจะได รกนหลงจากน

เกดอะไรขนถาเราหา “ลกคาคนสาคญของเราไมได หรอ ไมมเลย?” เพราะในบางครงงาน ทเรากาลงทาอาจเปนงานทไมมใครอยากได หรอ ลกคาทกคนคดวางานทเรา กาลงจะสงเปนตนเหตแหงความไมสงบในชวตของเขาเหลานนแนๆ ดงนนทางออกของปญหาน ตองแกดวยการสรางความไวเนอเชอใจ ใหกบลกคาใหได จบ!!! กระบวนการสรางความเชอมนคอเดนไปหาลกคาคนทมสวนเกยวของกบงาน จากนนบอกเขาวา “ผมกาลงจะสรางปญหาใหคณ หลงจากนสองอาทตย๑” แลวเดนจากมาแบบเทๆ ไมตองขออนญาต ไมตองฉลอง หนาทคอสรางปญหาใหเขานดหนอย ทาใหเขาคนและหลงจากนนอกสองอาทตย๑ ใหกลบไปหาเขาแลวแสดงใหเหนวาปญหาทเราบอกกอนหนานแกไปแลวเรยบรอย “หลอ” แตอยาหยดแคนนใหหาปญหาอนแลวแกใหไดอกทาอยางนสกสองสามรอบ ในไมชาลกคาจะเรมมอง เราเปลยนไป เปลยนไปในมมมองทดขน มองเหนในสงทเราเปน (เหมอนจบหญงเลยอะ ตองอดทน) แลวเราจะไดใจของลกคาคนนนดงนนอยายอมแพทจะสรางความไวเนอเชอใจโดยใหเรมจากจดเลกๆ กอนแลวเราจะพบกบ “ความรก” ไมใช “ลกคาคนสาคญของเรา”

จดระเบยบตวเองได

แอจไจล๑ทมชอบทจะทางานในรปแบบพศดารเลกนอยคอโยนโจทย๑ใหหนงปกแลวเดยวทมจะสมหวกน หาวาจะแกปญหาเหลานนยงไงซงการทางานในลกษณะนทมจะตองมคณสมบตพเศษคอจดระเบยบตวเองไดซงความหมายหลกของมนคอทกคนตองละทงอโกของตวเองไวทประตและเมอกาวผาน ประตเขามาแลวตองทางานเพอทมใหดทสด (งดทกอยางออกมาใหหมดความสามารถ ความคดสรางสรรค๑ และ พรสวรรค๑) เพอใหงานทไดออกมาดทสด

“สมชาย อาจจะเกงเรองเขยนโคดแตสมชายยงทางานเกยวกบการออกแบบไดด ดงนนสมชายควร จะไปชวยทางานตนแบบ”

“วนดาเปนเทสท๑เตอร๑ขนเมพแตในอกแงมมหนงวนดาฉายแววเรองการกาหนดความตองการของลก คาได ดงนนวนดาตองไปชวยงานดานนน”

แตทงนทงนนเรากไมสามารถเหมารวมๆเอาไดวาโปรแกรมเมอร๑ตองไปยงเรองการออกแบบหนาจอ หรอ เทสท๑เตอร๑ตองไปชวยงานผจดการโครงการเสมอไปแตเราตองยดหลกการทวา “การสรางทม ทดทสดคอการทาใหตาแหนงเหมาะสมกบคน ไมใชพยามบบคนใหยดลงไปในตาแหนง” นอกจากน เรายงสามารถทาใหทมจดการตวเองไดดวยการทา

ใหทมสรางแผนการทาโปรเจค ประเมนทกอยางเอง และ เลอกทจะรบผดชอบงานเอง

อยาไปสนใจและใสใจเรองตาแหนงและหนาทมากจนเกนไปในทางกลบกนใหเรา หนมาใสใจเรองการสงงานอยางตอเนองดกวา

มองหาคนทสามารถทาอะไรดวยตวเองไดคดเองไดวาตองทาอะไร ไมใชนงอยเฉยๆเพอรอคาสง

ดงนนบทสรปสนๆสาหรบแอจไจล๑ทมคอปลอยใหทมผสานตวเองตามธรรมชาต จงเชอมนและ ผลกดนทมใหทงานลลวงตามกาหนด

Page 27 of 220

Agile principle

ดงนนเมอเรามทมทจดการตวเองไดเราจะไดผลงานทด ออกมาดวยไมวาจะเปนสถาปตยกรรมของ ระบบ ดไซน๑ รไควเมนท๑ ซง

ผลทออกมาดกเพราะมบางสง บางอยางผลกดนมนนนกคอ “ความรบผดชอบและอานาจ” นนเอง

ความรบผดชอบและความมอ านาจ

แอจไจล๑ทมทดจะตองรบผดชอบตอสงทเขาเหลานนไดสรางออกมาเสมอเพราะเขารวาลกคาจบตา มองเขาอยอยางใกลชดตงแตวนแรกทเรมงาน และแนนอนความรบผดชอบตองานยอมมากบทมท มอานาจมากเนองจากเราจะปลอยใหทมเปนคนตดสนใจแกปญหากนเอง ทมไมตองรอฟง คาสงจากใคร นนหมายความวาอาจเกดขอผดพลาดบางในบางโอกาสแตเมอเราเทยบกบผลงานอน มหศจรรย๑ทไดออกมา มนกคมมากพอทจะลอง

อยางไรกตามการสรางทมทมทงอานาจและความรบผดชอบนนเปนเรองงายทจะพดแตยากทจะลงมอสรางเพราะไมใชทกคนทอยากจะมอานาจ ซงจรงแลวกไมมอะไรยากเลยแคทาใหไดอยางทพด หรอรกษาคาพดเทานนเอง

วธงายๆทเราจะเรมปลกฝงความรบผดชอบตองานคอเรมจากหยบปญหางายๆทแกไดแนนอนออก มาแลวใหทมทาเดโมสาหรบปญหานนไปเสนอลกคา การนาทมไปเสนองานใหลกคาตอหนาลกคา เปนการสงเสรมใหทมมสานกความรบผดชอบขนทหนงเพราะเมอทมไดสมผสถงการรอคอยหรอ ความหวงทคนอนมตอทมจะทาใหทมมความรสกทอยากจะแกไขหรอชวยเหลอคนเหลานน Second, it will take only one bad demo for your team to take a sudden interest in making sure the software is ready for feedback and every-thing works. They will insist on becoming empowered to make this hap-pen. If they don’t, you have a bigger problem.

ครอส-ฟงกชน

การทเรามทมททางานแบบครอสฟงก๑ชนเปนสงจาเปนมาสาหรบการรบใชลกคาสดทรกของเราไดตงแตตน จนจบ นนหมายความวาเราจาเปนตองมทมทมความสามารถและเชยวชาญในงานททาเพอตอบสนองสงท ลกคาตองการไดอยางรวดเรวทนทวงท ดงนนทจดเรมตนเมอเราตองรบคนเขามาในทมเราอาจจะตองรบ คนทไมได เชยวชาญงานอะไรมากเปนพเศษมากๆแตเราตองการคนทสามารถเรยนรในงานทตวเองตอง ทาไดอยางรวดเรว สามารถเรยนรอะไรไดหลายๆอยาง เนองจากเมอคนคนนนเขามาอยในทมแลว เขาตองทางานหลายอยาง เพอใหไปถงเปาหมายสดทายคอสงงานทดและมคณภาพใหกบลกคา

และแนนอนวาความสวยงามของทมแบบครอสฟงก๑ชนคอความเรวระดบเทพเนองจากไมตองมการรอกน ไมตองขออนญาตใครบางคนเพอทางาน ไมตองรอคนจากทมอน ทมสามารถเรมทางานและสงงาน ไดตงแตวนแรกของโปรเจคและทสาคญไมมใครสามารถหยดคนเหลานได

หลงจากทเราไดเรยนรวาคณลกษณะของแอจไจล๑ทมทดเปนอยางไรแลวตอไปเราขะเรมมองลงไปในราย ละเอยดของแตกลมคนทมสวนกยวของกบโปรเจคในมมมองของแอจไจล๑

Page 28 of 220

Who Moved My Cheese?

Who Moved My Cheese? [Joh98]

เรองราวของหนทแสนสขสบายกบชสปรมาณมหาศาลทตวเองบงเอญไปพบแตแลววนหนงมนกตน ขนมาแลวพบวาชสเหลานนไดหมดไป ใครมาแอบยายชสของมนไป? หนตวนนเลยตกทนงลาบาก เพราะมนไมรวาตองทาตวยงไงเพราะเสพตดความสบายไปแลว ดงนนสาหรบคนทถกจบใหเปลยน สภาพใหเปลยนเปนแอจไจล๑จะเรมรสกวาชสของเขากาลงหายไป!!!!

สาหรบโปรเจคเมเนเจอร๑คนเหลานนจะรสกวา ทาไมกน ไมวาจะพยายามแคไหนรไคว๑เมนท๑กเปลยน เสมอ เสมอ

สาหรบอนาลสท๑จะสงสยวาทาไมตองวเคราะห๑ระบบอยนนแหละไมจบสกท

สาหรบเดเวลอปเปอร๑ คนเหลานจะถกคาดหวงวาจะตองเขยนเทสท๑(เยอะดวย) จะเหนวาการทเราเขาไปเปลยนชวตคนทปกตเขาเหลานนเคยชนกบการทางานแบบเดมๆ ใหเขา เหลานนทางานกนแบบใหมมนก

เหมอนหนทถกคนอนยายชสไปทอน ดงนนสงทเราจะชวยคนเหลาน ไดคอการสอนใหออกเดนทางไปหาชสใหม นนเอง

บทบาททเราเหน

สาหรบแอจไจล๑แลวไมวาจะเปน XP หรอ Scrum เรามกจะไมคอยเหนบทบาท ทเปนทางการ เมอเราทางานในโปรเจคแลวบทบาทหลกๆจะมอยแค “คนทรวาตวเองอยากไดอะไรหรอ ลกคานนเอง” และ “คนทรวาไอทคนตะกตองการมนสรางยงไงหรอทมนกพฒนานนเอง”

อาวแยแลวแลวไอพวกโปรแกรมเมอร๑ เทสท๑เตอร๑ อนาลสท๑ มนหายไปไหนหมด? อยาไดกงวลไปครบเขาเหลานนยงอยแตเรายงไมสนใจเนองจากปรชญาของแอจไจล๑เราสนใจเรองของใครกาลงลเนบทบาทไหนมากกวาจะมานงกงวลวาไอบทบาททจะเลนมนเลนยงไง ดงนนกอนอนเรามาดบทบาทแรกกอนนนคอ ”ลกคา” ในมมมองของแอจไจล๑

Page 29 of 220

คณลกคาแบบแอจไจล

คณลกคาคนนภาษาฝรงจะเรยกวา "Subject Matter Expert" เปนคนทมความรเกยวกบธรกจ รวาซอฟท๑แวร๑ควรจะทางานอยางไรหนาตาเปนยงไง นอกจากนยงเปนคนทชวยเหลอในเรองของ การตอบคาถาม ใหขอคดเหนตลอดระยะเวลาในการพฒนาโปรแกรมและทสนกขนมาอกนดคณลกคาของเราตองเปนคนกาหนดความสาคญของฟเจอร๑ตางๆวาอะไรควรจะทากอนอะไรควรจะทาหลงโดยลาดบการเลอกนนอาจจะยดเอาความตองการเปน หลกกอนแลวนามาปรกษากบทมพฒนาเพราะในบางกรณการเรยงลาดบ อาจจะตองใชเหตผลทางเทคนคเขาไปประกอบดวย (เพอลดความเสยงทางดานเทคโนโลยลงไป) หลงนนทงลกคาและทมพฒนาจะมารวมกนทาแผนครองโลก ไมใชแผนการพฒนาวา โดยภาพรวมแลวการจะทาใหสาเรจจะตองทาอะไรกอนอะไรหลง

สดทายอนนสนกสดๆคอคณลกคาจะตองเปนคนตดสนใจวาจะ "ไม" ทาอะไรในกรณทเร าพบวาเวลาหรองบประมาณจะหมดแลว

เราจะเหนวาคณลกคามความสาคญกบเรามากแคไหนดงนนทางทดทสดคอคณลกคาแทบจะตองมาทางานเตมเวลากบทมพฒนาเลยกวาได เพอความถกตอง ดงนนถาเรายอนกลบไปดกระบวนการทางานของ XP ในสมยกอนจะมการอางถงคาวา "ไปทางานทบรษทลกคา" เสมอหรอแมกระทง Scrum เองกมการกาหนดบทบาทนใหเปนบทบาททตองทางานเตมเวลาหรอเรยกวามบทบาททเรยกวาเจาของโปรดกส๑ โผลขนมาเลยกวาได แตสาหรบมอใหมหดแอจไจล๑กอยาเพงไปตกอกตกใจมากกบเรองนเพราะจรงๆแลวคณลกคาทสามารถมาทางานใหเราแบบเตมเวลานนหาไดยากเตมทน แตเรากยงมหนทางในการทางานทยงชวยใหเราสงงานทดไดเหมอนกน เพราะเหนอสงอนใดการทลกคาและทมทางานเขาใจถงกระบวนการทางานแบบแอจไจล๑ตางหากเปนปจจยหลกในการสงเสรมใหงานสาเรจ เพราะเมอเราเขาใจเราจะพยายามทางานโดยตรงกบคณลกคามากขน พยายามแสดงใหเหนวา เขาเหลานนมความสาคญตอโปรเจคมากขนาดไหน ความสาเรจกจะตามมาอยางแนนอน

Page 30 of 220

ตอไปเรามาดกนสวา ทมพฒนาในแบบของแอจไจล๑เปนอยางไร

ทมพฒนาแบบแอจไจล

แอจไจล๑ทมเปนทมเมพส๑ทหนงคนสามารถทางานไดหลากหลายหนาทมพลงมากมายทจะเปลยนจากสงทลกคาตองการให

ออกมาเปนงานทสวยงามและใชงานไดด แตกไมใชวาแอจไจล๑ทมจะไมมการแบงแยกหนาทเลยนะครบเราสามารถแบงหนาทใน

ทมไดคราวๆดงน analysts, developers, testers, database administrators (DBAs), และคนอนๆ

อยางไรกตามการทเราจะเดน โทงโทงไปบอกคนทเคยทางานแบบเดมๆมานานวาตอจากนไปขอใหทกทาน “จดระเบยบ หนาท

ความรบผดชอบกนเองนะครฟ” รบรองไดเลยวา “ไมรอด” ดงนนเพอใหการเปลยนแปลงทมทาไดงายขนเราสามารถอธบายหนาท

ความรบผดชอบตางๆในแอจไจล๑ทมดวยศพท๑แสงทคนเขาใจงายๆและคนเคย ดงทจะกลาวกนตอไปหลงจากน

Page 31 of 220

แอจไจลอนาไลซสท

หลงจากทเราไดฟเจอร๑ทลกคาตองการออกมาแลวแตสงทไดมายงไมพรอมทเราจะลงมอพฒนามนหยาบจนเกนไปเราตองใหคนๆหนงไปจดการหารายละเอยดของแตละฟเจอร๑มาใหเรากอน คนทเราตองการคอ อนาลสท๑ อนาลสท๑เปนคนททาหนาทเกบรายละเอยดตางๆทระบบควรจะทาไดโดยวธการกคอ "นงทางานใกลชดลกคา" เพราะเราจะไดรจรงๆวาลกคาอยากไดอะไรกนแน ดงนนเราจะเหนวาอนาลสท๑ในมมมองของแอจไจล๑ตองทางานเยอะมากเชน ชวยลกคาเขยน user story (รายละเอยดอยบทท 6 Gathering User Stories) นอกจากนยงตองชวยทา mock-up, prototype ตลอดจนใชเครองไมเครองมอ กระบวนทาทงหมดทมเพอใหการสอเรอง user story สามารถทาออกมาไดอยางไมผดเพยน ซงเราจะดกนในรายละเอยดในสวนท 9.4 Step 1:Analysis and Design: Making the Work Ready

Page 32 of 220

แอจไจลโปรแรมเมอร

แอจไจล๑โปรแกรมเมอร๑จะทางานขนเทพ เพราะเขาหลานนนยมคณภาพ งานด เนองจากโปรแกรมเมอร๑จะทางานใกลชดกบเทสท๑เตอร๑ทจะชวยคดเรองมมของการเทสท๑วาออกมาทาไหนจะด โคดออกมามคณภาพ

* โปรแกรมเมอร๑ของเราจะเขยนเทสท๑อยางบาคลง เพอใหงานออกมาด เพอใหมนเปนตวสะทอนการออกแบบ (บทท 12 เรองยนทเทสท๑ และบทท 14 เรองขบเคลอนการพฒนาดวยการเทสท๑)*วงจรของการออกแบบและปรบปรงเกดขนตลอดเวลานอกจากนนแลวตราบใดทงานยงไมเสรจการปรบปรงเพอใหเกดสงทดกวาจะเกดขนอยเสมอ (บทท 13, การทารแฟคเตอร๑รง) บรรดาโปรแกรมเมอร๑ตองมนใจเสมอวาโคดของพวกเขาทงหมดอยในสถานะโปรดกชนและสามารถนาไปตดตงไดทนททไดรบสญญาน (บทท 15 เราจะพดถงเรองคอนทนวอสอนทเกรชน) และแนนอนวาแมกระทงโปรแกรมเมอร๑ของเรายงตองทางานใกลชดกบลกคาและผรวมทมคนอนๆเพราะโปรแกรมเมอร๑กตองแนใจวาสงททาออกมานนคชตรงกบททกคนเขาใจ นคอหนาทอนแสนเรยบงายทชวยสงเสรมใหเราสงงานไดดไมมทต

Page 33 of 220

แอจไจลเทสทเตอร

แอจไจล๑เทสท๑เตอร๑คอคนทรวาจะมการสรางอะไรบางอยางและไออะไรบางอยางนนมนตองทางานยงไงถงจะถกตอง ดงนนเราจะเหนหนาแอจไจล๑เทสท๑เตอร๑ตงแตเรมโปรเจค เพอเขาไปเกบรายละเดยดวาแตละสตอรนนผลทไดออกมาตามทลกคาตองการเปนแบบไหนดงนนเมอเราสรางมนออกมาแลวมนจะ "ถกตอง" และอยางทเรารกนแนๆ แลววาทกๆอยางในแอจไจล๑โปรเจคตองถกทดสอบดงนนเราจะเหนเทสท๑เตอร๑อยทกท เราจะเหนเทสท๑เตอร๑นงหนาสลอนเกบรไคว๑เมนท๑กบลกคา ชวยลกคาหาสงทตองการ โดยทงหมดจะแฝงอยในปแบบของการทาเทสท๑ ลองจนตนาการดวาถาเราเรมตองโปรเจคดวยการชวยกนหาคาตอบของคาถามธรรรมดาสขอเหลานเกยวกบตวเราใหทม

• ผมทาอะไรไดดทสด

• ผมทางานยงไง

• ผมมคายงไงกบทม

• อะไรคอสงทคณสามารถคาดหวงไดจากผม

การตงคาถามเหลานเปนการปลดเปลองพธนาการและทาลายกาแพงของปจเจก วธการนเราเรยกวา แบบทดสอบของ Drucker

เปนวธการทเรยบงายและสวยงามมากในการสรางทมเพราะเมอเราร ถงศกยภาพพนฐานของแตละคนแลวเราจะไดมาซงความไววางใจและสงนจะนาไปสการสอสารระหวาง ผรวมทมทมประสทธภาพสงซงเปนสงสาคญมากสาหรบทมทสรางงานไดอยางมประสทธภาพ รายละเอยดเพมเตมสาหรบ Drucker สามารถหาไดท url ดานลาง

Page 34 of 220

http://agilewarrior.wordpress.com/2009/11/27/the-drucker-exercise

ดงนนเราจะเหนแอจไจล๑เทสท๑เตอร๑นงทางานตดกบเดเวลลอปเปอร๑อยเสมอเนองจากหนาทหลกของ เทสท๑เตอร๑คอทา test

automation, หาร เอย หาชองโหวหรอจดผดพลาดของโปรแกรมจากทกแงมม นอกจากนนเขาเหลานนยงตองมภาพของแผนการทดสอบในสวนอนๆอยอกไมวาจะเปน performance test, scalability และสงอนๆทจะทาใหงานทจะสรางออกมามประสทธภาพสงสด รายละเอยดเรองแอจไจล๑เทสท๑ตงเราสามารถศกษาเพมเตมไดจากหนงสอ A Practical Guide for Testers

and Agile Teams ของ Janet Gregory และ Lisa Crispin

แอจไจลพเอม

แอจไจล๑พเอมโดยธรรมชาตแลวจะรตวเองวาความสาเรจของตวเองวดไดจากความสาเรจของทม ดงนนเราจะไมเหนแอจไจล๑

พเอมทาอะไรสดขว บาบน ยกตวอยางเชนเอาอปสรรคทกขอทขวางทาง ออกจากเสนทางของโปรเจคเพอใหไดพบกบคาวา

“เสรจ” ดงนนเราจะเหนการทาแผนของโปรเจค การแกไขแผน การปรบแผนอยอยางตอเนองตลอดเวลาเนองจาก เรองตนเตนมก

เกดขนในการทาโปรเจคเสมอ เราจะเหนวาแอจไจล๑พเอมจะไมมานงสงทมวาตองทาอะไร ตองทาอยางโนน ตองทาอยางน แต

ในทางกลบ กนแอจไจล๑พเอมจะมหนาทสรางบรรยากาศการทางานททมสามารถทางานตอกนไปไดเองแมกระทง ตวพเอมเอง

ตองหยดงานหรอหายตวไป ดงนนคณสมบตของพเอมทดคอสามารถหายตวไปทาอยางอนไดสก หาหกวนไดโดยทโปรเจคไม

เพยนออกจากทาง ซงเราจะศกษารายละเอยดเรองแอจไจล๑พเอมในบทท 8 เรองการวางแผนแบบแอจไจล๑ การรบมอกบโลกอน

โหดราย

Page 35 of 220

แอจไจล UX ดไซนเนอร

แอจไจล๑ยเอ๏กซ๑คอคนทมสมาธมงมนอยกบการ ออกแบบ สราง สวนตดตอกบผใชใหตรงตาม ประสบการ๑ณของผใชแตละคน

เพอใหผใชรสกด รสกใชงานถนด กบแอพพลเคชนของเรา และเมอนาเอาแนวคดเรองการออกแบบ ยไอ ทดมาผสมรางกบแอจ

ไจล๑แลวเราจะไดมาซงซอฟท๑แวร๑ท ดมคณภาพรอบดาน สวนการทางานของแอจไจล๑ยเอ๏กซ๑กจะมาแนวเมพคอสามารถแกไขแบบ

ไดเสมอโดยสามารถทาไปพรอมกบการเขยนโคดได (แทนทจะชงออกแบบกอนททกคนจะเรมทางาน) ดงนนในกรณทแอจไจล๑ทม

ของทานๆมคนทมความสามารถเรอง usability นนถอเปนโชคเพราะ เขาคนนนจะชวยทมไดเปนอยางมากในเรองของการสราง

งานทเปนมตรกบคนใช

คนอนๆ

ทกลาวมาทงหมดคอบทบาททสาคญสาคญในแอจไจล๑ทมแตอยางไรกตามยงมบทบาทอนๆทไมได กลาวถงเชน database

administrators (DBAs), system administrators (SAs),technical writers, trainers, business improvement,

infrastructure, และ networking บทบาทเหลานกสาคญมากเชนกน สาหรบแอจไจล๑ทม

สาหรบแนวคดแบบ Scrum นนจะมบทบาททสาคญอกอยางทเรยกวา scrum master หรอเราสามารถเปรยบ เทยบไดกบการ

เอาแอจไจล๑โคชมารวมรางกบร๏อคสตาร๑โปรเจคเมเนเจอร๑ ซงเราจะเหนวาแอจไจล๑โคชจะม ประโยชน๑กบทมทยงไมเคยใชแอจไจล๑

มากอนและตองการคนคอยแนะนาแนวทางทถกตองให ไมใหเขาใจ ผดเกยวกบแอจไจล๑ไดสาหรบหนงสอทดเกยวกบเรองนคอ

Agile Coaching แตสาหรบทมทมพลงแอจไจล๑ เขมแขงแลวตาแหนงโคชนนไมถงกบตองมคนใดคนหนงเขามาทาหนาทนเฉพาะ

Page 36 of 220

แตอยางไรกตามเมอเราตองการบทบาทนในทมเราตองมนใจวาทกคนในทมเขาใจวาสาหรบแอจไจล๑ทมนนการสวมบทบาทหลาย

บทบาทเปนเรองปกต ยกตวอยางเชนเราอาจจะเหนเดเวลอปเปอร๑เดนไปคยกบลกคาหรออารจจะเหนเทสเตอร๑คาด หวงวาเดเวล

อปเปอร๑จะตองทา automate test เยอะๆและเนองจากในทมอาจจะไมมคนทาหนาท UX จรงๆแตกไมไดหมายความวาเรองน

จะถกละเลยไป เรองนยงถกทาอยแตเปนใครอกคนททาหนาทนอย เดยวเราลองมาดกนวาอะไรจะเกดขนเมอเราตองการหาคนมา

ทางานในทม

Tips for FormingYour Agile T eam เคลดการรวมแอจไจล๑ การทางานกบทมทมประสทธภาพสดยอดอยา งแอจไจล๑ทมเปนเรองททกคนใฝฝนแตอยางไรกตามการคดเลอกคนเขามาทางานในทมเราตอง มวธการคดเลอกกนนดหนอย Look for Generalists คนทมความรอบรหลายสาขา แอจไจล๑ทมตองการคนแบบนเนองจากสมาชกแตละคนตองรบผดชอบ การทางานของตวเองแบบหนาถงหลงซงสาหรบโปรแกรมเมอร๑จะหมายความวาเขาคนนนจะตองรบ ผดชอบทางานตงแตสวนตดตอฐานขอมลจะถงหนาเวบ นอกจากนคนประเภทรอบรแบบนจะรสก ไมแปลกถาตองทาหนาทรบผดชอบหลายบทบาทในทมเชนวนนโคด พรงนไปอนาลสท๑ มะรนไปเทสท๑ People Who Are Comfortable with Ambiguity อยาเพอฝนรอคาวา “พรอม” แลวคอยลงมอทางานเพราะสงนนไมเคยมจรง อยารอ requirement ตองออกไปคนหา มนเอง แผนไมเคยนงมนเปลยนตลอด เราตองพรอมรบมอกบความเปลยนแปลง จงมองหาคนทไมหวนแมวนท change request มามาก Team Players Who Can Check Their Egos at the Door จงมองหาคนทปลอยวางไมยดตด เมอมาถงหนาประตททางานความเปนตวตนทงหมดตองถกทงไวท นน จงมองหาคนทพรอมจะเรยนรอยเสมอ ไมกลวทจะแบงปน และพรอมทจะกาวหนาไปกบทม

ศษย๑: ทานอาจารย๑ขารสกสบสน ในเมอไมมการแบงหนาทชดเจนสาหรบการทาแอจไจล๑โปรเจคแลว จะทางานใหเสรจกนไดอยางไร อาจารย๑: ทกอยางตองถกทาใหเสรจศษย๑เอ๐ย ทมจะเปนคนทามน ศษย๑: ครบทานอาจารย๑ แตขานอยยงสงสยวาถาไมมการแยกหรอแบงคนมาทางานแบบงานใครงา นมนเชนถาไมมการสรางทมเทสท๑ขนมาโดยเฉพาะเราจะแนใจไดอยางไรวา งานของเราถกทดสอบ มาแลวเปนอยางด อาจารย๑: เทสท๑กเปนสงทตองทาเชนกน และแนนอนสาหรบการเทสท๑นนทมกตองทาอกเชนกน การทามาทานอยเทาไหรทมตองตดสนใจ STUDENT: What if no one wants to test? What if everyone just wants to sit around and write code? ศษย๑: อาวทานอาจารย๑จะเกดอะไรขนถาทกคนไมอยากเทสท๑เลย ทกคนตองการเปนเทพนงเขยนโคด อยางเดยวใครจะทาเทสท๑ อาจารย๑: ถาเชนนนมนกผดตงแตหาคนมารวมทมแลว เพอหลกเลยงปญหานเจาตองเสาะหาคนทยน ยอมพรอมทาเทสท๑เขามาเปนสวนหนงของทมอนทรงคณคาของเจา

Page 37 of 220

ศษย๑: ขอบคณทานอาจรย๑ ขาขอคดเกยวกบเรองนใหมอกครง

What’s Next?

You now see how roles blur on agile projects, why we would ideally like our teams to be co-located, and how, when finding people for your team, you are going to want generalists and people who are cool with dealing with ambiguity.You are now ready for what is perhaps one of the most important steps in kick-starting your agile project (and an area that most agile methods are completely silent on)†agile project inception. Turn the page, to Part II of the book, and find out how to set your project up for success from the start and make

sure you have the right people.

Page 38 of 220

ตอนท 3 ชวนคนขนรถแอจไจล

หลายๆโปรเจคถกฆาตายกอนจะไดเรมตนดวยซา สวนใหญกเปนเพราะเหตผลตอไปน: 1. คนในโปรเจคไมไดตงคาถามทเหมาะสม 2. คนในโปรเจคไมกลาพอทจะตงคาถามทตอบยากๆ ในสวนน เราจะมารจกกบเครองมอตงความคาดหวงประสทธภาพสง ชอ ชนแหงการเรมตน (Inception Deck) † สบคาถาม ท

ถาไมถามกอนเรมโปรเจคซอฟต๑แวร๑ใดๆกบาแลว ดวยการใชประโยชน๑จากชนแหงการเรมตน เราจะมนใจไดวา เราไดคนทใช

มารวมการเดนทาง และเรากาลงเดนทางไปในทศทางทถกตอง กอนทเราจะเรมเขยนโคดบรรทดแรก

3.1 อะไรเปนสงทฆาโปรเจคสวนใหญ

ณ จดเรมตนของโปรเจคใหม คนในทมมกจะมแนวคดทตางกนโดยสนเชง วาความสาเรจหนาตาเปนอยางไร

นเปนสงทรายแรง ททาใหโปรเจคของคณอาจถงตายได เพราะถงแมวาเราทกคนจะใชคาศพท๑และประโยนแบบเดยวกนอธบายสงทเราตองการ เราจะรวา เราทงหมดไมไดคดเหมอนกนเลยแมแตนดเดยว กเมอตอนทเราเรมนาเสนองานออกไปแลวเทานนแหละ

Page 39 of 220

และปญหามนกไมไดอยทวา เราไมไดคดเหนไปในทางเดยวกนตอนทเราเรมตน (คดเหนไมตรงกน มนเปนเรองธรรมชาต) แตมน

อยทวาเราเรมโปรเจคกอนททกคนจะขนรถมาพรอมเพรยงกน

การตงสมมตฐานวา ทกคนมความคดเหนตรงกน ทงทจรงๆไมม นนแหละ คอสงทฆาโปรเจคสวนใหญ สงทเราตองการกคอ อะไรบางอยางทจะทาใหเกดสงตอไปน:

● การสอสารเปาหมาย วสยทศน๑ และสภาพแวดลอม ของโปรเจค ไปยงผรวมทม เพอทผรวมทมจะไดตดสนใจอยางชาญฉลาด เมอทางานจรง ● ใหขอมลกบผทมสวนเกยวของตามทพวกเขาตองการ เพอเอาไปใชในการตดสนใจวาจะไปหรอไมไปตอกบโปรเจคน

และวธเดยวทจะทาใหเกดสงเหลานไดกคอ การถามคาถามยากๆนนเอง

3.2 ถามค าถามยากๆ

ตอนไปทางานทแดนจงโจ ผมไดมโอกาสไดรวมทางไปกบพนกงานขายมออาชพระดบตนๆ ของบรษท ThoughtWorks †

สภาพบรษทมชอวา Keith Dodds อยางนงท Keith สอนผมกคอ ความสาคญของการถามคาถามยากๆ ในชวงทเรมเขาไปมสวน

รวม หรอ ในชวงเรมตนของการขาย

คณเหนมยวา ในตอนเรมตนของการมสวนรวมใดๆหรอโปรเจคใดๆ เรามชองทางในการถามคาถามทเปดกวางมาก โดยทเราจะสญเสยนอยมาก ดงนนเราสามารถถามคาถามกวางๆอยางเชนคาถามเหลาน:

ทมคณมประสบการณ๑การทางานมามากเทาไร?

คณเคยทาอะไรคลายๆแบบนมากอนรเปลา?

Page 40 of 220

คณมเงนอยเทาไร?

ใครเปนคนตดสนใจสงสดในโปรเจคน?

คณมองเหนความทาทายของการมนกวเคราะห๑ซอฟต๑แวร๑สองคนกบผพฒนาซอฟต๑แวร๑สามสบคนรเปลา?

มโปรเจคอนๆอนไหนทคณเคยทามา ทคณสามารถนาเอาทมของผพฒนาซอฟต๑แวร๑ตวจอย ทมประสบการณ๑การทาโปรแกรมเชงวตถ (object-oriented) เพยงเลกนอย หรอไมมประสบการณ๑เลย ไปเขยนโคดเมนเฟรมโบราณใหมเปน Ruby on Rails โดยใชแอจไจล๑ แลวประสบความสาเรจไดบาง

คณควรตองการทจะใชวธการในแบบเดยวกนนเพอเรมตนโปรเจคแอจไจล๑ของคณ คณควรตองการทจะถามคาถามทมนนากลว

ตงแตเนนๆ และเครองมอนงทจะชวยคณไดกคอ ชนแหงการเรมตน

3.3 เขาสชนแหงการเรมตน

ชนแหงการเรมตน เปนเหมอนกบไฟฉายสองทาง ทชวยกาจดหมอกบงตาและสงทไมสามารถอธบายไดในโปรเจคแอจไจล๑ของคณ มนคอการรวบรวมคาถามยากๆสบคาถาม และแบบฝกหด ทถาคณไมทาและไมถามกอนจะเรมโปรเจค คณกไมไหวแลว เราใชสงนบอยมากในบรษท ThoughtWorks เพอจะครอบคลมในมมของการเรมตนโปรเจค ซงวถทางแบบแอจไจล๑อยาง Extreme

Page 41 of 220

Programming หรอ Scrum ไมไดพดถงไว † ใบอนญาตทาโปรเจค เรารกนดวา การจะไปนงวเคราะห๑กนอยางหนกเปนเวลาหกเดอน หรอการทาแบบฝกหดรวบรวมความตองการของลกคา ไมใชแนวทางแนๆ แตเรากไมมวธแบบสบายๆทจะเอามาทดแทนได ดวยเหตนเอง Robin Gibbons จงไดสรางตนฉบบ ชนแหงการเรมตน ขนมา วธงายๆ เรวๆ ทจะกลนกรองโปรเจคจนถงแกน และสอสารความเขาใจรวมกนนนไปยงทมและมวลชนทเกยวของทงหมด

3.4 แลวมนท างานยงไง

แนวคดทอยเบองหลง ชนแหงการเรมตน กคอ ถาเราสามารถนาคนทเหมาะสมเขามารวมกนและถามคาถามทเหมาะสมได เราจะสามารถตงความคาดหวงของโปรเจคในภาพรวมไดอยางนาอศจรรย๑ โดยการทเราใหทมไดทาแบบฝกหดตางๆ และเกบสะสมผลลพท๑ทไดมาทาเปนสไลด๑ (สวนใหญกจะเปน PowerPoint) เรากจะสามารถเหนภาพรวมวา โปรเจคนคออะไร ไมใชอะไร และจะตองใชอะไรบางทจะทาใหโปรเจคสาเรจลลวงไปได คนทเหมาะสมสาหรบ ชนแหงการเรมตน กคอ ใครกตามทมสวนรวมกบโปรเจคโดยตรง ซงนหมายถง ลกคา ผมสวนไดสวนเสย คนในทม คนพฒนา คนทดสอบ คนวเคราะห๑ † ใครกตามทจะทาใหการทาโปรเจคนดาเนนไปอยางมประสทธภาพ สงสาคญอยางนงกคอ การใหผทมสวนไดสวนเสย มามสวนรวม เพราะ ชนแหงการเรมตน ไมไดเปนแคเครองมอแคสาหรบคนในทม แตกบคนเหลานนดวย เพอใหเคาไดสามารถตดสนใจวา จะไปหรอไมไปตอ กบโปรเจคนได โดยทวๆไป ชนแหงการเรมตน จะใชเวลาประมาณสองสามวน หรอ ประมาณสองอาทตย๑ ในการทา ซงกจะใชไดกบโปรเจคทมระยะเวลาประมาณหกเดอน และควรจะมการกลบมาทาใหม ถามการเปลยนแปลงเยอะๆ ของจตวญญาณและแนวทางของโปรเจค นนกเพราะ ชนแหงการเรมตน เปนวตถทจะมชวตยาวนาน เปลยนแปลงไดเรอยๆ ไมใชอะไรทเราทาทเดยวแลวกจบกน ตอนททาเสรจแลว คนในทมมกจะเอาไปแปะไวบนผนงหอง เพอเปนการยาเตอนจตใจ วาตอนนเรากาลงทาอะไรอย และทาไปทาไม และแนนอน คาถามและแบบฝกหดทเราจะนาเสนอในทน แคเรมตนใหเทานน คณจะตองคดตอไปอก ถงคาถามและแบบฝกหด และสงทคณอยากจะทาใหกระจาง กอนทคณจะเรมโปรเจค ดงนน ขอใหคณใชสงนเปนเสมอนจดเรมตน และอยาไปตามมนอยางเมามาย หรอกลวทจะเปลยนแปลงมนเพอใหเหมาะสมกบงานของคณ

3.5 ชนแหงการเรมตนในเปลอกนท

ตอไปนจะเปน การอธบายคราวๆถงคาถามและแบบฝกหดใน ชนแหงการเรมตน 1.ถามวาทาไมเราถงมาอยตรงน

● อนนเปนสงเตอนใจงายๆ วาเรามาอยตรงนทาไม ลกคาของเราเปนใคร และทาไมเราถงตดสนใจทจะทาโปรเจคนในตอนแรก

2.สรางคานาเสนอแบบรวบรด ● ถาเรามสามสบว และใชประโยคไดแคสองประโยค เราจะอธบายถงโปรเจคเราวายงไง

3.ออกแบบกลองบรรจผลตภณฑ๑ ● ถาเรากาลงเปดผานหนงสอแมกกาซนเลมนง แลวเหนโฆษณาของผลตภณฑ๑หรอบรการของเรา เราอยากจะเหนมนเขยนวายงไง หรอทสาคญกวานน เราจะซอมนมย?

4.สรางรายการ ไมทา ● สงทเราอยากทาในโปรเจคอาจจะชดเจน แตสงทไมควรทาในโปรเจคควรทจะยงชดเจนยงกวา

Page 42 of 220

5.พบปะเพอนบาน ● ชมชนของโปรเจคเรา มกจะใหญกวาทเราคดเสมอ ทาไมไมชวนเคามานงดมกาแฟดวยกน และแนะนาตวเองซะหนอยละ

6.แสดงแนวทางของสงทจะทา ● มาวาดแบบรางโครงสรางทางเทคนคในแบบกวางๆของสงทจะทากนเถอะ และตรวจสอบใหแนใจวาเราทกคนคดตรงกนจรงๆ

7.ถามตวเอง วาอะไรททาใหเรานอนไมหลบ ● บางสงทเกดในโปรเจคของเรานน ชางนากลวเสยจรงๆ แตการทเราไดพดถงมน กบสงทเราจะทาเพอปองกนไมใหเกดสงเหลานน จะทาใหมนนากลวนอยลง

8.กะเกณฑ๑ขนาด ● โปรเจคนนเปนโปรเจค สามเดอน หกเดอน หรอเกาเดอน กนนะ

9.บอกใหชดเจนวาอะไรทยอมเสยไดอะไรทเสยไมได ● ทกโปรเจคมกจะมสงทคานไวอย เชน เวลา ขอบเขต งบประมาณ และคณภาพ อะไรคอสงทสาคญมากทสดและนอยทสดในโปรเจคน

10.แสดงใหเหนวาจะตองใชอะไรบาง ● โปรเจคนจะใชเวลานานเทาไร จะตองใชงบเทาไร และตองใชทมแบบไหนเพอใหทามนเสรจได

เราจะพดถง ชนแหงการเรมตน โดยแบงออกเปนสองสวน ในตอนท 4 หรอ มองภาพรวม ในหนาถดไป เราจะพดถงคาถามวา ทาไม เพอใหเขาถงเหตผลทเรามาทาโปรเจค สวนตอนท 5 หรอ ทาใหมนเปนจรง ในหนา 72 เราจะพดถง คาถามวา ทาอยางไร มาเรมถามวา ทาไม กน

Page 43 of 220

ตอนท 4 มองภาพรวม

การทาซอฟต๑แวร๑เปนกจกรรมทมเอกลกษณ๑ ทรวมเอาทง การออกแบบ การสราง ศลปะ และวทยาศาสตร๑ รวมเขาอยดวยกน ใน

ทกๆวน คนในทมจะตองเจอกบการตดสนใจเปนพนๆครง และการไดอยางตองเสยอกอยาง และถาไมเขาใจในสภาพแวดลอม

และภาพรวมแลว กคงจะเปนไปไมได ทจะตดสนใจเลอกในสงทถกตองดวยขอมลทมอย และทาใหสงทไดกบสงทเสยมสมดลทด

ได ในครงแรกของ ชนแหงการเรมตน เราจะมาทาใหเราเขาใจกนอยางชดเจนวา ท าไม เราถงไดมาทาโปรเจค โดยการถามคาถาม

ตอไปน:

● ทาไมเราถงมาอยตรงน

● อะไรคอคานาเสนอแบบรวบรดของเรา

● โฆษณาของผลตภณฑ๑เรา ควรจะออกมาหนายงไง

● เราจะตองไมทาอะไรบาง

● ใครเปนเพอนบานของเราบาง

Page 44 of 220

เมอคนอานตอนนจนจบ คณและคนในทม จะมความเขาใจทชดเจนวาเปาหมายของโปรเจคคออะไร ทาไมคณกาลงจะทามน

และสามารถทจะสอสารใหคนอนฟงไดเปนฉากๆอยางรวดเรว แตตอนน เราจะเรมจากการถามผสนบสนนของเรา วาทาไมเราถง

มาอยตรงน

4.1 ถาม: ท าไมเราถงมาอยตรงน

กอนททมโปรเจคใดๆจะประสบความสาเรจได เคาจะตองเขาใจวา ท าไม เคาถงกาลงจะทาในสงทเคากาลงจะทา เมอไรทเคา

เขาใจวา ท าไม แลว เคาจะสามารถทาในสงตอไปนได:

● ตดสนใจไดดขน จากขอมลทไดมามากขน

● สรางความสมดลกบสงทขดแยงกน และสงทจะไดมาและเสยไป ไดดขน

● สามารถคดคนวธการและแนวทางทสรางสรรค๑ เพราะเคาไดรบอานาจในการคดและตดสนใจดวยตวเอง

ทงหมดทงปวงกเกยวกบ การเขาใจ เจตนาของผบงคบบญชา และ การ ไปใหเหนกบตา ของตวเอง

Page 45 of 220

โตโยตา : เทพแหงการไปดใหเหนกบตา

ในหนงสอระดบเทพ The Toyota Way (วถแหงโตโยตา) [Lik04] Jeffrey Liker

ไดเลาเรองของหวหนาวศวกรทไดรบมอบหมายให design รถโตโยตา Sienna รนป 2004 ใหม ซงเคาตองการทจะพฒนา

design นสาหรบชาวทวปอเมรกาเหนอ เพอใหเขาถงวาชาวทวปอเมรกาเหนอ ใชชวต ทางาน และทากจกรรมดวยรถยงไง

หวหนาวศวกรและทมของเคากไดขบรถโตโยตา Sienna ผานมนทกๆ State ในประเทศสหรฐอเมรกา ประเทศแคนาดา และ

ประเทศเมกซโกสงทเคาคนพบมดงน:

„ คนขบรถในทวปอเมรกาเหนอ รบประทานอาหารในรถมากกวาคนขบรถในประเทศญปน (โดยทระยะทางในการขบนน

สวนมากจะสนกวา) ดวยเหตนเอง คณกเลยจะพบถาดอยตรงกลางระหวางทนง และทวางแกวจานวน 14 อน เปนมาตรฐาน ใน

รถโตโยตา Sienna ทกๆคน

„ ถนนในแคนาดาโคงนนขนมาตรงกลางมากกวาถนนในอเมรกา ดงนน การควบคมการดรฟท๑ในขณะขบรถนนสาคญมาก

„ ลมทพดในแนวขนานกบพนใน Ontario มความรนแรงมาก ทาให การควบคมรถใหมนคงเมอมลมมาทางดานขาง

กลายเปนปญหาทยากมาก ซงถาคณไปขบรถไปยงทใดกตามทมลมแรงพดขนาดกบพน คณกจะเหนไดวา Sienna รนใหมจะ

มนคงขนมากและควบคมไดงายขน

ถงแมวา คณหวหนาวศวกรจะสามารถอานถงปญหาเหลานไดจากรายงานการตลาด เคากคงจะไมเขาใจลกซงและมความเขาใจ

ไดมากเทากบการทเคาได ไปและเหนกบตาดวยตวเอง

ไปใหเหนดวยตาของคณเอง

การทเราเขาใจวาทาไมเรามาอยตรงนในหวสมองเรามนกเรองนง แตการทเราร วาทาไมเราถงมาอยตรงน นนเปนอกเรองนงท

แตกตางกนโดยสนเชง เพอทจะเขาไปขางในหวของลกคาและเขาใจอยางถองแทวาเคาตองการอะไร คณจะตองไปดใหเหนกบตา

ดวยตวเอง

การไปดใหเหนกบตาเปนการใหคนในทมของคณไดขยบกนออกมาจากเกาอ แลวไปดโลกภายนอก ในททสงทเคาจะทาจะถก

นาไปใช ยกตวอยางเชน ถาคณกาลงจะสรางระบบอนญาตงาน สาหรบบรษทกอสราง ซงจะถกนาไปใชทไซต๑งาน ซงเปนเหมอง

คณกตองไปทไซต๑นน ไปนงคยกบพนกงานดแลความปลอดภย ไปดรถ trailers ไปสงเกตสภาพการทางานในสถานทแคบๆ

อนเตอร๑เนตไมคอยเสถยร และสถานททลกคาของคณตองทางานอยในนน ใชเวลาทไซต๑ซกวนนง และทางานรวมกบคนทจะใช

ระบบของคณทกวน “เขาไปมสวนรวม ถามค าถาม และกลายเปนลกคาของคณ”

คนหาความตงใจของคนสงการ

ความตงใจของผสงการมกมาเปนประโยคหรอคาพดสนๆ ทสรปเปาหมายหรอวตถประสงค๑ของโปรเจคหรอ mission ของคณ

ประโยคน หรอ แสงสวางนาทางนเอง ทคณจะใชเปนทพงพงได ในชวงเวลาคบขนของการตอส ทจะชวยคณตดสนใจไดวา จะยก

Page 46 of 220

พวกไปตศตรกอน หรอ จะหยดรออยกบท ในหนงสอ Made to stick [HH07] คณ Chip and Dan Heath เลาถงเรองท สายการ

บน Southwest Airlines ถกเถยงกนวาจะเพม ซซาร๑สลดไก เขาไปเปนอาหารในเครองเครองนงหรอไมแตเมอถกถามวา การทา

อยางนจะชวยลด cost ของราคาคาตวหรอไม (ซงเปนความตงใจของ CEO Herbs Kelleher ทเปนคนสงการ) กทาใหเหนได

ชดเจนวา การเพมซซาร๑สลดไก นนไม make sense ความตงใจของคนสงการ สาหรบโปรเจคของคณ ไมจาเปนตองเปนอะไรท

ยงใหญหรอสรางขวญกาลงใจ มนสามารถทจะเปนอะไรงายๆและโฟกสไปยงโปรเจคของคณ

จดสาคญสาหรบแบบฝกหดนกคอ การใหทกคนไดมาจบเขาคยกนถง อะไรทเคาคดวาเปนเหตผลททาใหเคามาอยทน และเอา

สงเหลานนไปเชคกบลกคาของคณ เพอจะดวาสงทคดนนใชสงทลกคาตองการจรงหรอไม

4.2 สรางค าน าเสนอแบบรวบรด

มเหตผลลานแปดทจะทาโปรเจคของคณ

Page 47 of 220

เรวๆน ผมไดทาแบบฝกหดน กบทมซงไดรบมอบหมายใหทาระบบ invoice สาหรบฝายใหมในบรษท และกตององไปกบความแตกตางในเหตผลททกคนคด วาทาไมเคาถงมาอยตรงน บางคนคดวา มความตองการทจะลดจานวนหนาของinvoice เพอลดการใชกระดาษบางคนกคดวามความตองการทจะทาให invoice ดงายขนเพอทจะลดจานวณคนโทร.เขามาท call center และกยงมบางกลมทคดวาสงทจะทานเปนโอกาสทดทจะทาแคมเปญทางการตลาดเพอเพมยอดขายของ product และ service

ซงทกคาตอบเปนคาตอบทด และแตละคาตอบกสามารถจะเปนโปรเจคไดดวยตวของมนเอง แตหลงจากทกคนไดมาพดคย ถกเถยงและทาความเขาใจเทานนแหละ ททาใหเปาหมายทแทจรงของโปรเจคไดแสดงตวออกมาใหเหน — ซงกคอการทาให invoice ดงายขน และลดจานวนโทรศพท๑ทเขามายง call center นนเอง ผางงงง

เรวเขา! นกลงทนทคณอยากเจอมาตลอดสามเดอนเพงเดนเขามาในลฟต๑ คณมเวลา 30 ว เพอนาเสนอบรษท start-up ใหมแกะกลองของคณ ถาคณทาสาเรจ คณจะไดทนมาเปนเชอเพลงใหบรษทคณกาวหนาตอไป แตถาคณทาพลาดกกลบไปนงกนอาหารแชแชงทบานตอเหอะนกคอทมาของ คานาเสนอแบบรวบรด — วธการสอสารแกนไอเดยของคณในชวงเวลาอนสน

คานาเสนอแบบรวบรดไมไดมไวสาหรบนกธรกจเทานน เราสามารถเอามนมาใชนยามโปรเจคซอฟต๑แวร๑แบบสนๆกระชบไดอยางดอกดวยคานาเสนอแบบรวบรด จะทาใหเกดสงดๆเหลานกบโปรเจคคณ

1. ใหความชดเจน

แทนทจะเปนทกอยางสาหรบทกคน คานาเสนอแบบรวบรด บงคบใหทกคนตอบคาถามยากๆ วาโปรเจคนคออะไร และทาไปใหใครใช

2. บงคบใหทมไดคดถงลกคา

ในการทเราโฟกสไปยงเรอง ผลตภณฑ๑นทาอะไร และทาไม จะทาใหทมไดเขาใจอยางลกซง วาอะไรทาใหผลตภณฑ๑เรานาสนใจ และทาไมลกคาถงอยากจะซอมน

3. เขาประเดน

เหมอนกบแสงเลเซอร๑ คานาเสนอแบบรวบรด สองทะลสงทมนรกหรกตา เพอใหมองเหนถงหวใจของโปรเจค ความชดเจนทาใหเราสามารถจดลาดบความสาคญไดงายขน และเพมอตราสวน signal-to-noise ไดอยางมาก

Page 48 of 220

ทนมาด template ทจะชวยในการทาคานาเสนอของคณ

Template สาหรบคานาเสนอแบบรวดรด

การทาคานาเสนอแบบรวบรดไมไดมแคทางเดยว อนทผมชอบนมาจากหนงสอของ Geoffrey Moore ชอ Crossing the

Chasm [Moo91]

● สาหรบ [ ลกคากลมเปาหมาย ] † อธบายวาโปรเจคนทามาเพอใคร หรอใครทจะไดประโยชน๑จากการใชงาน

มน

● ผท [ ขอความบอกถงความตองการหรอโอกาสท ] † ลงรายละเอยดของปญหา หรอสงทลกคาตองการจะ

แกไข

● เจา [ ชอผลตภณฑ๑ ] † ใหชวตกบโปรเจคของเราดวยการตงชอใหมน ชอเปนสงสาคญ เพราะเปนสงทสอสาร

ถงความตองการ

● เปน [ ชนดของผลตภณฑ๑ ] † อธบายวา การบรการน หรอ ผลตภณฑ๑น คออะไร หรอ ทาอะไร

● ท [ ประโยชน๑หลกและเหตผลททาใหอยากซอ ] † อธบายวา ทาไมลกคาถงอยากทจะซอผลตภณฑ๑น

● ไมเหมอนกบ [ คแขงหรอตวเลอกอน ] † พดครอบคลมถงเหตผลทวาทาไมเราถงจะไมใชสงทมขายอยแลว

● ผลตภณฑ๑เรา [ ขอความบอกถงความแตกตางหลกๆ ] † สรางความแตกตาง และอธบายวาการบรการของ

เรา แตกตาง หรอ ดกวา ของคนอนๆยงไง ขอนสาคญมาก เพราะเปนสงทพสจน๑ใหเหนวาทาไมเราถงตองเอา

เงนมาลงกบโปรเจคน

● ประโยคขางตนของคานาเสนอแบบรวบรด รวบรวมทกสงทกอยาง ทเราตองการสอออกไปอยางรวดเรวถง

แกนของโปรเจคหรอไอเดย ไวไดอยางสวยงาม มนบอกใหเรารวา โปรเจคเราคออะไร ทาไปเพอใคร และทาไม

เคาถงอยากทจะซอมน

Page 49 of 220

มหลายวธทจะทากจกรรม “คานาเสนอแบบรวบรด” กบทมของคณโดยคณสามารถเรมดวยการพมพ๑ template นออกมา และใหทกคนเตมคาในชองวางดวยตวเองและหลงจากนนจงใหมาชวยคดดวยกนหรอถาคณตองการจะรกโลก คณกสามารถเอา template ขนโปรเจคเตอร๑และใหทงกลมชวยกนเตมคาในชองวางดวยการเตมทละสวนของ template ไลลงไปหลงจากทคณไดคานาเสนอแบบรวบรดมาอยในมอแลว เรามาเปดก๏อกความสรางสรรค๑ในหวสมองเราเพอออกแบบกลองบรรจผลตภณฑ๑กนดกวา

4.3 ออกแบบกลองบรรจผลตภณฑ

บางทซอฟต๑แวร๑กเปนเหมอนสงชวรายทจาเปนสาหรบบรษท แทนทจะตองมาเสยงกบความไมแนนอนของโปรเจคใหญๆ หลายๆคนคงอยากทจะเดนเขาไปในหางสรรพสนคาใกลบาน เอาเครดตการ๑ดออกมา และกซอสงทตองการซะแมวาคงจะอกนาน ทซอฟต๑แวร๑ราคาเปนลานจะเอามาใสกลองวางขายบนชนในซปเปอร๑มาร๑เกต กยงทาใหมคาถามทนาสนใจไดหนงคาถาม ถาเราสามารถซอซอฟต๑แวร๑จากชนในซปเปอร๑มาร๑เกต กลองบรรจซอฟต๑แวร๑จะหนาตาเปนยงไง แลวทสาคญกวานน เราจะซอมนมยการทากลองบรรจผลตภณฑ๑ใหโปรเจคของคณ และถามวาทาไมใครถงอยากจะซอมน ทาใหทมของคณไดโฟกสในสงทจะชวยใหลกคาสนใจทจะซอผลตภณฑ๑คณ และประโยชน๑ทสาคญทเปนรากฐานของผลตภณฑ๑ของคณ ทงสองอยางเปนสงทดททมของคณจะตองนกถงในขณะททาซอฟต๑แวร๑ออกมา

แลวมนท างานอยางไร?

อะ รนะคดอะไรอย “ชนไมไดเปนคน creative ชนไมไดทางานดานโฆษณา ชนจะไปออกแบบโฆษณาใหผลตภณฑ๑ไดยงไง”

ผมมอะไรจะบอก คณทาไดแนนอน และผมจะใหคณดวาคณจะทาไดยงไงภายในสามสเตปงายๆ

Page 50 of 220

สเตป 1: ระดมความคดหาประโยชนของผลตภณฑของคณ

ไมตองไปบอกลกคาของคณหรอกวาผลตภณฑ๑คณม feature อะไรบาง — เคาไมสนใจหรอก

สงทคนสนใจ จรงๆแลวกคอ ผลตภณฑ๑ของคณจะชวยใหชวตเคางายขนไดยงไงบาง หรอพดไดอกอยางกคอ ประโยชน๑ของผลตภณฑ๑ของคณ นนเอง

ยกตวอยางเชน ถาเรากาลงจะโนมนาวครอบครวนง ใหเหนถงขอดของการซอ mini-van เรากอาจจะลสต๑ feature ทงหมดใหเคาด หรอ เราจะทาใหเคาเหนวา mini-van จะทาใหชวตเคาดขนไดยงไง

เหนความแตกตางมย?

ดงนน สเตปท 1 ในการทากลองบรรจผลตภณฑ๑ของคณกคอ การไปนงคยกบทมของคณและลกคา และระดมความคด ถงเหตผลทงหมดทคนจะอยากใชผลตภณฑ๑ของคณ แลวกเลอกสามอนทดทสดออกมา

สเตป 2: เขยนสโลแกน

ปจจยหลกของสโลแกนทดกคอ พดในสงทอยากพดใหมากทสด โดยใชคาใหนอยทสด ผมคงไมตองบอกคณหรอกวาบรษทเหลานมจดยนอะไร เพราะสโลแกนของเคา กไดบอกทกอยางหมดแลว:

• Acura—The true definition of luxury. Yours. (คานยามแหงความหรหรา ของคณ)

• FedEx—Peace of mind. (ความสงบสขของจตใจ)

• Starbucks—Rewarding everyday moments. (ใหรางวลกบทกชวงเวลาของทกวน)

คณรสกถงสงทสงมากบสโลแกนนมย?

ใจเยนๆ สโลแกนพวกนมนเทพมาก แตสโลแกนของคณไมตองโปรขนาดนกได แครวมตวกบคนในทมคณ จบเวลาประมาณสบถง

สบหานาท ระดมความคดหาสโลแกน แลวกสนกกบการใชสมองในสวน creative จาไวนะวา ไมมสโลแกนไหนเสยวเกนไป

สเตป 3: ออกแบบกลองบรรจ

เยยม! ใกลจะเสรจแลวละ ดวยเหตผลททาใหคนสนใจซอสามขอ และสโลแกนตดหของคณ คณกพรอมทจะเอาทกอยางมา

รวมเขาดวยกนแลว

Page 51 of 220

สาหรบแบบฝกหดน ลองนกภาพลกคาของคณเดนเขาไปในรานขายซอฟต๑แวร๑แถวบาน และเหนกลองบรรจผลตภณฑ๑ของคณบนชนวาง และเมอเคาหยบมนขนมา เคากรสกถกดงดดใหตองซอไปซกสบกลอง ไปใหตวเองและยงเอาไปฝากเพอนๆดวย

เรวเขา วาดรปกลองนนขนมา!

ไมตองเปนหวงนะ คณไมตองผลตผลงานชนโบว๑แดงระดบ Mona Lisa คณแคตองการกระดาษ flip chart ปากกาเมจคสๆ กระดาษแผนเลก กระดาษโพสอต และอะไรกไดทคณสามารถหามาได ตะโกนสโลแกนคณออกมา แสดงใหลกคาคณเหนถงประโยชน๑ ใชเวลาสบหานาทออกแบบกลองบรรจผลตภณฑ๑ทดทสดทคณสามารถทาได ดมาก! เหนมย ไมยากซกหนอย ทาแบบฝกหดนใหสนก (ไมบอยนกหรอกทคณจะไดใชสเทยน หรอวาดรปกลองใสผลตภณฑ๑ทนาดงดดใจ) แบบฝกหดนสรางความสมพนธ๑ทดในทม และเปนวธทสนก ทชวยใหไดคดถงเหตผลวา ท าไม เราถงทาซอฟต๑แวร๑น ในระยะคบขน ตอไป เราจะมาดกนวา เราจะสามารถทาอะไรไดบาง เพอตงความคาดหวงใหกบขอบเขตของโปรเจค

Page 52 of 220

4.4 สรางรายการ ไมท า

เวลาตงความคาดหวงวาโปรเจคคณมขอบเขตแคไหน การบอกวา เราจะ ไม ทาอะไรนน สาคญเทากบ การบอกวาเราจะทาอะไรบางการทคณสรางรายการ ไมทา จะทาใหเราบอกไดอยางเคลยร๑ๆวาอะไรอย และอะไรไมอย ในขอบเขตของโปรเจคคณ การทาอยางน ไมใชแคตงความคาดหวงใหกบลกคาทชดเจนแลว แตยงทาใหมนใจวา คณและทมของคณจะโฟกสกบสงทสาคญจรงๆ และไมตองไปใสใจสงอนๆ

แลวมนท างานยงไง?

รายการ ไมทา เปนภาพทดมากททาใหเหนวาอะไรอยและไมอยในขอบเขตของโปรเจคของคณไดอยางชดเจนวากนอยางงายๆกคอ คณลกคาของคณ และทมของคณมารวมตวกนเพอเตมคาในชองวางชวยกนระดมความคดวาตองการเหนฟเจอร๑อะไรบางในซอฟต๑แวร๑ในแบบกวางๆ

Page 53 of 220

ใน ประกอบดวยสงทเราตองการจะโฟกส ตรงนคอทเราจะบอกวา “นคอกอนหนกอนใหญ ทเรากาลงจะเคลอนยายในโปรเจคน”

สงเหลานอาจจะเปนฟเจอร๑ในแบบกวางๆ (แบบ ทารายงาน)หรอเปาหมายทวไป (แบบสามารถขยายการรองรบไดเหมอนอเมซอน)

นอก ประกอบดวย สงทเราไมตองไปเสยเหงอกบมนอาจจะเปนสงทเราอยากจะดนออกไป release หนาหรอแคเปนสงทอยนอกขอบเขตของโปรเจคน แตตอนน เราจะไมไปกงวลกบมน เอามนไปวางทอนกอน

ยงไมร คอสงทเราตองทาการตดสนใจสวนนเปนสวนทดมากเพราะมนทาใหเรามองเหนความเปนจรงในโปรเจคซอฟต๑แวร๑สวน

ใหญ กคอการทคนหลายๆคน ตางกมองโปรเจคตางๆกน†ซงเปนสงทเราตองการหลกเลยง ทายทสด เราตองการทจะยายสงใน

อยในสวน ยงไมร ของเรา ปยงสวน ในหรอนอก

ความสวยงามของภาพนกคอ เราสามารถสอสารผานการมองเพยงแวบเดยว การทเราไดทารายการ สงทตองทาใหญๆทอยใน

ขอบเขตทางดานซาย และสงทไมไดอยในขอบเขตทางดานขวา และสงทยงไมรทางดานลาง เพยงแคมองแวบเดยว ทกคน

สามารถทจะเหนภาพไดอยางชดเจน วาขอบเขตของโปรเจคเราอยตรงไหน

หลงจากทมขอบเขตทกาหนดชดเจนแลว เรามายายไปดวาโปรเจคเรามเพอนบานเปนใครบาง

Page 54 of 220

4.5 พบปะเพอนบาน

เพอนบานทด สามารถเปนเพอนทดทสดของคณ พวกเคาจะอยตรงนนตอนทคณเขาบานไมได พวกเคาจะอยตรงนนเมอคณตองการเครองมอซอมบาน และมนกรสกดมาก เมอคณชวยเคาเซต wireless ในบานของเคา

ค าถามรอยลาน

ครงนง ทผมไดเขารวม ชนแหงการเรมตน กบบรษทสาธารณปโภคขนาดใหญของแคนาดา VP ของแผนกกถามขนมาวา แลวระบบใหมนจะตอเขากบระบบเมนเฟรมทมอยไดยงไงในหองนนเงยบซะจนคณแทบจะไดยนเสยงเขมตก VP ซงตองเปนคนเซนเชคทจะมผลตอความสาเรจของโปรเจคน ไมไดเขาใจเลยวา ระบบใหมไมไดตอเขากบระบบเกา แตมนจะมาแทนทตางหาก

และเปนเพราะเราไดสรางรายการ ไมทา ขนมาเทานนแหละ ทชวยใหเราหลกเลยงการทจะตองมาตงความคาดหวงใหม หลงจากทาโปรเจคไปนานแลว มนดกวาทมาทาตอนน แทนทจะไปทาตอนทเรมทาโปรเจคไปแลว

ไมวาคณจะเชอหรอไมกตาม คณกมเพอนบานในโปรเจคของคณ แตแทนทจะเปนคนทเกบกญแจสารองไวให หรอใหยมเครองมอซอมบาน พวกเคาชวยดแลดาตาเบส ทาการตรวจสอบ security และทาใหเนตเวร๑คทางานไดอยางด การไปพบปะเพอนบานของคณ จะทาใหคณสามารถสรางความสมพนธ๑ทดไวลวงหนา เพอชวยคณไดในอนาคต และมนกยงเปนมารยาททด ทจะทกทายกนอยตลอด แทนทจะวงไปหาเคาเวลาทคณมปญหาเทานน และสงทสาคญทสด ทจาเปนตอการสรางรากฐานสงคมของโปรเจคทจะประสบความสาเรจ—ความไวใจ

ความผดพลาดในการทาโปรเจคครงใหญครงแรกของผม

เราทกคนเคยทาผดพลาด ความผดพลาดครงใหญครงนงของผม คอตอนทเปนหวหนาทมท ThoughtWorks ตอนทเราทางานบางอยางให Microsoft ผมไปทนน และเรมทาโปรเจคโดยคดวา สงคมโปรเจคของเราเปนอยางน:

Page 55 of 220

ตอนแรกๆ ทกอยางกยงดดอย ทมทาแอจไจล๑ เราสงมอบซอฟต๑แวร๑ททางานไดอยตลอด ชวตกมความสขด แตพอใกลๆจะจบโปรเจค บางอยางแปลกๆกเรมเกดขน กลมคนทผมไมเคยเหนมากอน มาจากไหนกไมร กเรมมาขออะไรไรสาระจากผมและทมของผม

● กลมนงตองการจะตรวจสอบ architecture ของเรา (อยางกะ architecture เราตองการการตรวจสอบงนแหละ!)

● อกกลมตองการจะทาใหมนใจวาเราทาตามนโยบาย security ของบรษท (บาปาว!)

● และอกกลมตองการจะดเอกสารของเรา (เอกสารไรเนย!)

คนเหลานเปนใครกน เคามาจากไหน และทาไมเคาถงตองการทจะมาทาใหกาหนดการเราพงดวย

ชวขามคน สงคมโปรเจคเลกๆนารกของเรา กลายจากทมเลกๆของคนหกคน เปนอะไรทยงใหญกวานนมาก

Page 56 of 220

ถงแมผมอยากทจะโทษคนอนทมาทาใหกาหนดการของเราพงมากแคไหน ความเปนจรงกคอ ผมไมไดซาบซงกบคาพดทวา สงคมโปรเจคของคณมกจะใหญกวาทคณคดเสมอ เทาทควรดวยการ “พบปะเพอนบาน” คณตองการทจะวาดแผนท วาใครอยในสงคมโปรเจคของคณบาง ใหเคาอยภายใตเรดาร๑ของคณ และเรมสรางความสมพนธ๑ทด กอนทคณจะตองการมน ดวยวธน เมอเวลานนมาถง คณจะไดไมเปนคนแปลกหนา และเคากจะสามารถชวยคณไดดยงขน

มนทางานยงไง?

ระดมความคดกบคนในทมของคน เขยนชอทมทคณคดวา คณจะตองตดตอ กอนทโปรเจคคณจะออกไปสโลกภายนอก คนในทม

ทอยกบบรษทมาเปนเวลานาน และรถงนโยบายตางๆของบรษท และดานตางๆขององค๑กรทคณจะตองขามผาน จะมประโยชน๑

มากในเวลาน

กาแฟ โดนท และความจรงใจ

เมอพดถงการสรางความสมพนธ๑ทใหความเคารพซงกนและกนกบเพอนบานของเราแลว ไมมอะไรดไปกวา กาแฟดๆ ซกแกว และโดนทแสนอรอยเราเลอก กาแฟ เพราะกาแฟมาในเหยอกรอนๆ และในระหวางทเคากาลงดมดากบกาแฟ เคากจะไดรสกถงความรสกอบอนทคณอยากมอบใหดวยเราเลอก โดนท เพราะในขณะทคณกาลงบอกเพอนบานของคณ วาคณซาบซงแคไหนทคณมพวกเคาอยรอบขาง เคากจะไดลมรสความหวานของโดนท และกจะไดเชอมโยงคณกบความหวานนนแตเครองมอขนสดยอด ทจะสรางความสมพนธ๑ทดกบเพอนบานของคณ กคอ ความจรงใจ

เพอทเพอนบานของคณจะไดรวาคณซาบซงและเหนคณคาของเคา คณจะตองหมายความอยางนนจรงๆ พวกเคาจะมองทะลคาชมแบบไมจรงใจไดอยางรวดเรว ความซาบซงและคาขอบคณทจรงใจจะพาคณไปไดไกล ในการทจะไดรบการสนบสนน และคณ พรอมทงโปรเจคของคณกจะประสบความสาเรจเพราะสงน

สงคมใหญ

Page 57 of 220

หลงจากทคณไดวางชอลงบนแผนทแลว ใหคยถงแตละกลม และดวาคณสามารถใสชอคนทคณจะใชตดตอไดหรอไม โปรเจคเมเนเจอร๑ หรอใครกตามในทมทจะเปนคนนาทมในการสรางความสมพนธ๑ภายนอกทม จะไดใชสงนในการวางแผน ดงกลมคนเหลานมารวมงานกบเรา

ลกศษย: อาจารย๑ แบบฝกหดเหลาน ตองใชเวลาของผใหการสนบสนนและผทเกยวของทงหมด แลวถาทานเหลานนไมมเวลา

วางทเหมาะสม หรอวายงมาก ไมสามารถมาตอบคาถามเหลานเกยวกบโปรเจคได เราจะทาเยยงไรด?

อาจารย: ถาอยางนน เจากแสดงความยนดกบตวเจาเองได เพราะเจา ไดคนพบความเสยงอนใหญหลวงอยางแรกของโปรเจค

เจาแลว

ลกศษย: ความเสยงอยางไรรทาน?

อาจารย: การมสวนรวมของลกคา ปราศจากการมสวนรวมของลกคา โปรเจคของเจากประสบกบปญหาตงแตยงไมไดเรมเสย

แลว ถาลกคาของเจา ไมมเวลาจะมาบอกวา ทาไมเราจงตองทาซอฟต๑แวร๑น บางทมนอาจจะไมควรทาเลยกเปนได

ลกศษย: ทานจะบอกวา เราควรจะหยดโปรเจคอยางนนร?

อาจารย: ขากาลงบอกวา เพอทจะทาโปรเจคใหประสบความสาเรจไดนน เจาตองการการมสวนรวมจากลกคาและผทเกยวของ

และถาไมมสงนแลวนน เจากคงตองหยดชะงก ไมวาเจาจะชอบหรอไมกตาม

ลกศษย: แลวถาเปนเยยงนนแลว ขาควรจะทาเยยงไรดทาน?

อาจารย: เจาตองอธบาย อยางชดเจน และหนกแนน ใหลกคาของเจาฟง ถงสงทจะทาใหโปรเจคนประสบความสาเรจได การม

สวนรวมของลกคา เปนสงจาเปนทตองม หรอนอาจจะไมใชเวลาทควรจะทาโปรเจคนกเปนได บางทเขาเหลานนอาจจะยงมาก

และมสงทตองทาเยอะเกนไป ถาเปนเยยงนนแลวละก เจาจงบอกพวกเขาไปวา เจาจะรอจนกระทงพวกเขาพรอม กอนจะถงเวลา

นน เจายงมลกคารายอนทตองรบใชอกหลายราย

ลกศษย: ขอบคณทานมากทานอาจารย๑ ขาจะนกถงสงเหลานใหมากขน

Page 58 of 220

แลวไงตอ?

กอนทเราจะไปกนตอ มาพกหายใจซกแปบ

คณรสกถงมนมย?

คณเหนสงทกาลงเกดขนตรงนมย?

ในแตละแบบฝกหดของชนเรมตนทผานไป จตวญญาณและขอบเขตของโปรเจคกคอยๆชดเจนขนเรอยๆ

● เราไดรแลววา ท าไม เราจงไดมโปรเจคน

● เรามคานาเสนอทด

● เรารวากลองบรรจผลตภณฑ๑เราจะหนาตาเปนยงไง

● เราไดวางเสารอบๆขอบเขตของโปรเจค

● เรามความรวามใครเปนเพอนบานของเราบาง

ตอนน ผมรวาคณกาลงคดอะไรอย บรบทมาพอไดแลวนา! เมอไหรเราจะลงลก และเรมพดถงวาเราจะสรางสงนขนมาไดยงไงซก

ท? และคาตอบกคอ ตอนนไง

ในตอนท 5 ท าใหมนเปนจร ง

ในหนาถดไป เราจะเรมทาใหเหนภาพของวธการแกปญหาเชงเทคนคของโปรเจคคณ และอะไรทจะตองม เพอใหเราทางานให

เสรจได

ดงนน เปดหนาถดไปเลย และเตรยมตวใหพรอมกบการทาใหมนเปนจรง

Page 59 of 220

ตอนท 5 Agile ไมใชแคคด แตตอง

ท าไดจรง

พดจรง(มามากพอแลว) ทาจรง(ไดเสยท)

เมอเรารแลววาทาไมเราถงมาอยตรงนเรากาลงจะทาอะไรใหใครแลว ตอจากนเปนขนตอนของคาวา “ทายงไง” ในบทนเปนเรองของการสรางกรอบความคดเบองตน เราจะเรมทาใหสงทเราคดไวเปนสงทเปนรปธรรมและวางรากฐานใหกบมน สงทเราจะเรมตนมนมดงตอไปน

นาเสนอทางวธการทางดานเทคนค

ทาการประเมนและประมาณถงสงทตองทา

ตรกตรองดๆเพอใหเขาใจอยาถองแท

อะไรทตองใชและตองใหอะไรเปนการแลกเปลยน (เพราะตองใหกอนมนถงจะไดนะในทกๆสถานการณ๑)

แจงใหกบทางผสนบสนนโปรเจคของเราวาเพอใหโปรเจคสาเรจอะไรบางเปนสงทโปรเจคเราตองใช

แตกอนอนมาเรมกนดวยดวยขนตอนเหลานเลย

Page 60 of 220

5.1 ม solution ดๆ เอามนออกมากางใหทกคนด (วาหนาตามนเปนยงไง)

การแสดงใหเหนแบบตดตาตรงใจใหหลบตานกภาพไดและเขาใจใน solution นนกคอวาใหทกคนเขาใจตรงกนวาในทางปฏบตแลวเรากาลงจะสรางอะไรซงรวมไปถงวธการทางดานเทคนคดวย ทสาคญทสดคอใหทกคนยอมรบถงสงทเรากาลงสรางภาพใหเคาเหลานนเขาใจ (แบบวาถาสรางตก 10 ชนอยางนอยกใหทกคนเหนวามนมเสาเขมแนนหนามนคง วาเปนไปไดและมนจะสาเรจแนๆ) การนาความจรงเหลานมาตแผเพอใหทกคนในทมและลกคาของเราไดเขาใจตรงกนนนมขอดอยมากเพราะวา

เปนการทาใหความฝนไมเกนจนตนาการและเขาใจไดวาเรากาลงจะใชเครองมอและเทคโนโลยอะไร

ทาใหมความเขาใจชดเจนวาอะไรคอขอบเขตและความรบผดชอบของโปรเจค

ทสาคญเปนการบอกถงความเสยงทควรจะม

จากเหตผลดงกลาว กแนนอนวายงไงการเอาสงทเรามองเหนกลบมาบอกกบทกคนรวมถงทมของเราและลกคากเปนสงจาเปนอยางหลกเลยงไมได แมวาเราจะคดวาทกๆคนเขาใจตรงกนแลวกตาม ถงแมวาอยางมากกจกรรมนอาจจะเปนเพยงแคการยาเนนความเขาใจวาทกคนเขาใจตรงกนแนๆ แตมนกจะดกวาทจะเดนไปขางหนาแลวพบวาเรากาลงเทหมดหนาตกและลงทนในสงทไมตอบสนองความตองการของใครเลย

ตองท าอะไรยงไงละนน

จรงๆแลวขนตอนของมนกงายๆเพยงแควาคณนงสมหวกนกบทมและผมสวนเกยวของทางดานเทคนค เรมพดคยกนถงสงทกาลง

จะทาแลวกเรมวาดรป Diagram ประมาณวา Architecture Diagram นนละครบ (เรมดจะคนๆมย เพราะเปนแบบฝกหดงายๆ

ททกๆทมกเคยทากนอยแลว) และลองจนตนาการสรางเหตการณ๑สมมต (What-if scenario) เพอด impact และเพอใหเขาใจ

วาสงทเรากาลงจะทานมนซบซอนหรอตองใชแรงงานมากนอยขนาดไหน

Page 61 of 220

ถาหากวาคณมเครองมอหรอ framework ทเปน open source กควรทจะใหเปนไปตามมาตรฐานทยอมรบในองค๑กร เพราะวา

ในองค๑กรอาจจะมการจากดเรอง open source (เพมเตม กคอวา การ manage เรอง tools เปนสงสาคญมาก การ train และ

ฝก skill ของคนในทมตลอดจนถงการหาคนมา support นนเปนปญหาหลกอกอยางหนงในการทจะกาหนดวาทมของเราควรจะ

ใช tools หรอ framework อะไร)

คณเลอก architecture กตอเมอคณไดเลอกทมของคณแลว

เมอคณถนดอะไรคณกจะทาอยางนนนนแหละ เพราะเมอคณมคอนอยในมอคณกจองจะตอกตะปละนะ เพราะวาทกสงทกอยางทคณเหนมนจะกลายเปนตะปไปซะหมด เมอคณมทมทเกงเรอง SQL งานของคณกมแนวโนมทจะทาโดยใชเทคนคทางดานนในการทางานเปนสวนใหญ ในขณะทถาทมของคณเกงเรอง Object Oriented มนกแนนอนอยแลววาความซบซอนเหลานนมนกจะถก implement ลงไปในงานคณ

ซงมนชดเจนเลยวาเมอคณเลอกทมของคณ(ทเกงดานไหน) มนจะมผลอยางยงตอ solution architecture ทคณจะใชสรางครบ ดงนนพยายามหาขอสรปทางดานเทคนคใหไดไววาแนวทางทเราจะสรางจะเปนแบบไหน ไมใชวาเราจะตองใหไดมาซง solution ทสมบรณ๑แบบ (จะเหนวาไมใช big design upfront นะครบ) หรอเพอใหไดคาตอบทกๆอยางทชดเจน (กไมใชเรองใหได requirement ทสมบรณ๑แบบอกนนแหละ) แตเปนเพราะวาคณตองการไดคนทมความถนดและมความสามารถในงานทคณกาลงทา (เพมเตมนะครบ ยกตวอยางวาถาคณกาลงจะสรางบานไมคณกตองการงานชางไมทชานาญ คณจะไดไมไปจางชางฉาบปนทชานาญมาแทน แมจะเปนการสรางบานเหมอนกนแตแนวทางทกาลงจะสรางมนจะเปนขอสรปวาเราควรจะเลอกคนงานอยางไร)

ครบทงหมดทกลาวมาใหสรปสนๆกคอวา พยายามทาใหทกๆคนเขาใจโดยใชรปและ Diagramอยางงายๆวาสงทเรากาลงจะทาคออะไร ในเนองานบางทมททมความเสยงสง(หมายถงในเนองานทอาจจะมปญหา เชนการทา integration เขากบระบบอนๆ) ตรงนนตองทาใหเขาใจตรงกนไปเลยวาเรากาลงจะเจอกบอะไร และตองใหแนใจวาทกๆคนเหนดวยกนกบเทคนคทเรากาลงจะใชกบสงทเราทา

5.2 ตงค าถามกบตวเองวาอะไรทท าใหเราเปนกงวล

Project Risks

ผอานวยการสรางไมวาง (แลวใครจะมาชวยคมงบละนน) ทมงานไมไดนงทเดยวกน (แลวมนจะทางานลาบากนะนน) มาตรฐานทางดาน Security ทตองนามาใช (กไมเคยทามากอนจะทาไดมย) ระบบจดการ Logistic ทกาลงจะเขามาใหม (ไมเคยใชมนจะเสยงไปมยน)

Page 62 of 220

มผจดการหลายคนทตองดแลการพฒนาซอฟท๑แวร๑แลวไมสามารถนอนหลบไดในตอนกลางคน (มนฟงดคนๆมยครบ) เพราะเหตผลมากมาย – ลองมาฟงเหตผลดๆดงตอไปน (อาจจะฟงดเหมอนเรองของตวเองมากขนอยางไมนาเชอ) บางครงเหลาผจดการทงหลายกประมาณการในแบบวามองโลกในแงดเกนไป (สรปวามนคาดการผด – แนนอนครบฟงดเปนเรองปกตอยางมากมาย) บอยครงเหลอหลายทลกคาเปลยนใจ หรอบอยครงทเรารสกวามงานมากเหลอเกนทตองทา (มากกวาทจะทาใหเสรจภายในเวลาทมและกเงนทมอยางจากด) ครบแนนอนสงเหลานยงฟงยงดคนเคย

เปดเผยและสรางสรรค(ตเพอกอ(เรองใหเปนเรอง))

ทาไมการพดถงความเสยงและปญหาเปนเรองด

การพดถงความเสยงของโปรเจคนนเปนสงทหลายๆคนพยายามหลกเลยงและไมยอมพดถงเมอเรมตน โปรเจค ไมมใครอยากดถกวาเปนกระตายตนตมวามวแตกงวลวาโปรเจคมนจะลมและเราตองแยแนๆ ไปไมรอดแนๆโปรเจคนแตการพดถงความเสยงนนเปนทางออกทดทสดทจะทาใหทกๆคนไดรบรวาอะไรเปนสงจาเปนและเปนปจจยให Project ของเราสาเรจได ขอยกตวอยางเรองการใชพนทในการทางานนะครบ (ใหทกคนนงอยในพนทเดยวกน) สาหรบคนทไมไดทางานในการพฒนา ซอฟท๑แวร๑ มากอน การใหคนทางานมานงดวยการอาจจะไมใชเปนเรองใหญมากนก แตสาหรบ agile project แลวการนงรวมกนนนเปนสงทสาคญทสดและการพดถงความเสยงนนกเปนเหมอนกบการบอกวาถาสงเหลานเปนจรงขนมาและไมทาอะไรแลวละกแนนอนวา Project นไมสาเรจไดเลยแนๆ

Page 63 of 220

ไมไดมทมทนงทเดยวกน

ไมไดมลกคาทใหความสาคญและใหเวลาเพยงพอกบ Project

คณไมไดเปนคนควบคม Development Environment – เพมเตมสกนดนะครบการทเราจะใช Tool อะไรและพฒนา

ดวยอะไรมนเปนความเชยวชาญของทม ซงคณควรจะเปนคนกาหนดได

หรอมสงทเปนปจจยอนๆทสาคญทจะทาให Project ประสบความสาเรจได

Bloomberg on risk

Michael Bloomberg อยางนอยตองรอะไรบางเกยวกบเรองความเสยง เพราะในฐานะผกอตงบรษททางดานการเงนและยงเปนนายกเทศมนตรของมหานครนวยอร๑ก เคาตองตดสนใจและทาอะไรทมความเสยงสงอยบอยๆ

ในหนงสอ Bloomberg by Bloomberg คณ Michael ไดอธบายเทคนคทเคาใชในการจดการกบความเสยงดงตอไปน 1. เขยนทกๆสงทกๆอยางทมความเปนไปไดวาจะผดพลาดได 2. และใชเวลานงคดสกนดวาทายงไงมนถงจะไมเกด

3. จดการมนซะ

ปรชญาของคณ Michael นนงายๆคอวาคณไมมทางจะเหนทกสงทกอยางทกาลงจะผานเขามาไดทงหมด และแนนอนวาไมมแผนอะไรทมนเปนไปตามแผนซะทกอยาง (ฟงด Agile มากๆ) แนนอนวาชวตคณมนกเหมอนกนบางทมนกไมเหมอนกบทเราซกซอมไว พยายามทาความคนเคยกบสงทคาดไมถง ไมวาคณจะรหรอไมรกตามวาอะไรกาลงจะเกดขน มนกแคยอมรบกบมนและรบมอกบมนตามทมนเปนเทานนเอง

นเปนโอกาสอนดทจะพดเรองความเสยงเพราะวามนเปนเวลาทดทสดทเราจะยนขนมาแลวบอกกบทกๆคนถงสงทคณตองการและจาเปนตอความสาเรจของ โปรเจคแนนอนวาคณอาจจะไมไดทกๆอยาง แตอยางนอยกไดมการทาใหทกๆคนไดเขาใจตรงกนวาผลทเกดขนเมอไมทาสงทคณบอกคออะไร และมนสาคญมาก(แคไหน)และตอไปนคอเหตผลดๆ(อกครง)วาทาไมเราควรพดเรองความเสยงหรอปญหาทอาจจะเกดขนในตอนเรมโปรเจค

แนนอนครบวาเปนการเปดประเดนวาเรากาลงมเรองอะไรทอาจจะเปนปญหาเสยแตเนนๆ

o เวลาทเหมาะสมทสดทจะพดเรองนกคอตอนนแหละตอนทเรม โปรเจคเพราะวาถาปญหามนเกดไปแลวมนก

สายไปละ (ระเบดใครเคาจะไปกตอนมนระเบดแลวละครบ ตอนนนเคาเรยกวาเกบซากแลว) ดงนนถาคณม

ปญหาหรอมอะไรในใจทคดวาจะเปนสงททาให โปรเจค มนลมละก พดมนออกมาเลย

มนเปนเวลาททาใหเราไดบรหารการคดนอกกรอบ

o ถาคณไดเหนความคดทแหวกแนวในชวงททา Inception Deck แลวละก แนนอนวานคอโอกาสทคณจะลอง

บรหารสมองคณในแบบเดยวกนเลย

Page 64 of 220

มนกแคแบบวารสกดนะ (ทจะทา)

o มนเปนความรสกดๆทไดบอกเลาความกลวและความกงวลของเราใหกบคนอน (โลงใจในระดบนง) มนเปน

โอกาสททาใหทมมความผกพนและความเขาอกเขาใจกน เปนสงดๆทจะไดเรยนรจกกนผานประสบการณ๑ของ

ผอน

อยาลมวานคอตอนเรมตนของ Project และมสงตางๆมากมายทเราตองทาเรายงมเวลาเหลอพอทจะทาความเขาใจกบประเดนสาคญตางๆทเกยวของกบ Project น นามนขนมาบอกเลาปรกษากนบอกตอกนใหทกๆคนเขาใจตรงกน

ระบปญหาทสาคญ(มากพอ)ทจะใหความสาคญ

สงนสามารถทาไดงายๆเพยงแควานงปรกษากนภายในทม (รวมถงลกคาดวย)เพอระดมความคดวาอะไรบางทเปนความเสยงและปญหาทอาจจะเกดขนกบ Project นไดในอนาคต เพราะคณนนแหละเปรยบเสมอนแขนขาเปนเครองมอเปนแรงงานเปนมนสมองใหกบลกคาเพอใหงานของเคาสาเรจลลวงไปได และอะไรกตามทมนจะทาใหคณไมสามารถทางานไดหรอทางานไดชาลง คณควรบอกใหลกคาของคณใหไดทราบถงสงเหลานนเหมอนกนนะครบ

อยางแรกทเราควรจะเรมตนคอเอาสงทเราไดเขยนไวแตแรกวาอะไรคอความเสยงทอาจจะกอใหเกดปญหาเหลานนมาจดหมวดหมใหมโดยแบงเปนสองประเภทคอ สงทคมคาพอทจะใหความสนใจ กบสงทไมควรจะสนใจ

ความเสยงทควรใหความสนใจ

คอมชามากๆ

ลกคาไมวางหรอไมใหความสาคญ

ทมของคณไมไดนงทเดยวกน

ความเสยงทไมนาสนใจ

เศรษฐกจขาลง

บรษทกาลงจะถกซอ

ลกคาเรากาลงจะไดเลอตาแหนง (เสยงยงไง??)

Page 65 of 220

ลองมาดตวอยางกนสกเรองนงอยางเชนเรองเศรษฐกจขาลง แนนอนวามความเปนไปไดวาเศรษฐกจอาจจะดงลงเหวแลวเราทงหมดอาจจะถงขนตกงาน แตวาสงเหลานเปนสงทเรากทาอะไรไมได ดงนนเราไมควรไปเสยเวลาใหความสาคญ

อกตวอยางนงกอยางเชนวาหวหนาทม Programmer ทมความสามารถ(มาก)ของเราจะลาออกซงเปนธรรมดาของอตสาหกรรม IT ในปจจบน สงทเราอาจจะพอทาไดกคอวาพยายามใหมนใจไดวาทมมสวนรวมและรวมมอในการถายทอดความรใหกนและกนเพอใหความรของเคาทเคามยงคงมอยกบทมหรอองค๑กร และเพอใหแนใจวาไมมใครเปนผชานาญการพเศษในเรองใดเรองหนงมากจนเกนไป (แบบประมาณวาขาดเคาแลวบรษทเราลมสลาย) และกอาจจะมบางเวลาทคณรสกเหนอยลาหมดแรงสนหวงไรกาลงในขณะทจาเปนตองคดวาความเสยงอนไหนหรอปญหาอนไหนเปนสงสาคญ อยางนอยมนกยงมดานดๆใหมองเพอใหกาลงใจตวเองนะครบ

5.3 ประเมนและประมาณการ

ประมาณการคราว

สงงาน ฝกอบรม ตรวจงาน พฒนาระบบ

เดอน อาทตย๑ อาทตย๑

Page 66 of 220

แนนอนวาในขนตอนนคอการประมาณการวาสงทเรากาลงจะทามนคอ Project แบบ 1, 3, หรอ 6 เดอน เราคงไมไดคาดหวงวาจะมอะไรทแมนยาเกนไปกวานหรอกนะในตอนน แตอยางนอยเรากควรจะสามารถบอกลกคาของเราไดวาตอนนเวลาทเคาจาเปนตองรอนมนประมาณเทาไหร สาหรบเรองการประมาณนจะเจาะลกในบทท 7 “Estimation” ศลปะในการเดา แตสาหรบตอนนกขอสมมตวาเราไดผานขนตอนการกะประมาณไปแลวและขอสมมตวามผลลพธ๑อยในมอทพรอมใชเปนตวอยางไดเลย

กอนทจะไปตรงนนกอนอนลองมาดความสาคญของการคดในกรอบ(ขนาด)เลกๆอยางายๆกอนเลย

รป 5.1 ความเสยงของ Project จะเพมขนเมอระยะเวลาทจะตองใชในการท า Project มากขน

คดเลก

ชอของ Randy Mott อาจจะฟงดไมคนหหรอไมเปนทรจกเลย แตเคาเปนถงดาวเดนใน Fortune500 (ทโดงดนในเรองการจดอนดบบคคลหรอบรษททรารวย...อยาไปนกวาเปนหมอดละนนมน 1900) Randy เปนคนชวยสรางระบบ Data

Warehouse/inventory (พวกการจดการสนคาคงคลง)ใหกบ Walmart (ราน Mega Store ทใหญยกษ๑อนดบหนง) ซง

ความเสยง

ระยะเวลาทใช

เดอน

Page 67 of 220

สามารถทาใหผจดการรานคาสามารถรไดในทนทวา ณ ขณะนนๆสนคาขนมถง(อยางเชนเลย๑)รสไหนขายดทสด แนนอนวาของอยางนเคาไมไดทาใหทเดยว เคากยงทาระบบอยางเดยวกนใหท Dell ซงทาให Dell รวามสนคาอะไรเหลอบางทยงคางอยและสามารถนาไปลดราคาขายเพอระบายสนคาไดทนทวงท และในขณะนทเคาเปน CIO ของ HP เคากาลงดาเนนการปรบสรางแบบรอระบบใหมหมด (ประมาณการวาพนลานเหรยญ!!!) เพอทาใหระบบการจดการคงคลงของHPดขน

มนชดเจนมากวา Randy ตองทาอะไรไดถก(ทถกทาง)อยางมากใหกบ Walmart, Dell และ HP แตสงหนงท Randy มกจะบอกอยเสมอสาหรบกฎกตกามารยาททเคายดถอกคอวาเคาจะไมยอมใหการพฒนาของเคามนกนเวลามากเกน 6 เดอน (รป 5.1)

ปญหาอยางยงสาหรบ Project ทมขนาดใหญปลายเปดไรกาหนดระยะเวลาทเปนจรงกคอมนเหมอนกบวาโปรเจคจะเดนไปชวกาลนานไมมวนจบสนและบอยครงท Project แบบนจะใหความหวงกบลกคาวาสงทเคาจะไดมนมาก(เกน)ในขณะงานทสงใหลกคาจรงๆมกจะนอย(เกน) อยางนอยกนอยกวาททาใหลกคาคาดหวงไวแตตน) เวลาทถอวาเปนกรอบทดทสดของ Randy ในการทา IT Project นนคอไมควรเกน 6 เดอน (อนนคอของ Randy นะครบ) อะไรทนานกวานนเคามองวามความเสยงมาก(เกน) แตนนไมไดหมายความวาการทา IT Project ทเคาทานนจะทาใหเสรจภายใน 6 เดอนสาหรบทกๆ Project แตอยางนอย Randy ไดเรยนรวามนเปนเรองหนกหนาสาหสและเสยเวลามากสาหรบ Project ขนาดใหญในการทจะใหไดขอสรปวาอะไรบางทเคาตองสงใหลกคา (หรอวาลกคาคาดหวงอะไรบาง) ในอกทางหนงกคอเคาจะแบงงานใหญๆเหลานนเปนงานเลกๆทงายกวาในการจะจดการมน(แนนอนวาเสยงนอยกวาอก) อยางนอย Randy กบแนวคดของ Agile กมความสอดคลองกนอยในเรองการทาการประเมน “ยงเลกยงด” ถาประมาณวาภายใน 6 เดอนไดคอดหมด

ไดเวลาคยเรองขนาดของ Project

เรองขนาดของ Project จรงๆแลวกคอการทาการประเมนและสามารถบอกกบลกคาและผมสวนรวมใน Project แมจะเปนเพยงแผนงานคราวๆใหเขาใจได แนนอนวาคณกตองคานงถงตวแปรทเปนเปาหมายหลกๆของ Project ดวยเชนการทา UAT (User

Acceptance Test), training, หรออนๆทมความสาคญกอนทระบบเหลานนจะถกนาขนมาใชงานจรง แตหลกๆทสาคญทสดแลวกคอเพอบอกใหกบลกคาหรอผมสวนรวมใน Project ทกทานเพอใหเขาใจตรงกนวาขนาดของ Project มขนาดใหญขนาดไหนแลวมนจะใชเวลาประมาณเทาไหร แนนอนวาคณมทางเลอกอยบางในการนาเสนอแผนงานของคณ โดยสามารถทาไดงายๆเหมอนปกหมดลงไปเลยวาคณจะสงงาน

วนไหน หรออกทางเลอกหนงกคอคณจะบอกวา features หลกๆทคณจะสงมอบใหลกคาวาเคาจะไดอะไรแตวาใหยดหยนใน

สวนของวนทคณจะสง เราจะเจาะลกในเรองนในบทท 8.4

โปรดระวงไวนดนงไมวายงไงกตามอยาทาใหใครๆแอบเอาไปคดเหมารวมวาแผนทเราแสดงใหดในขณะนถอวาเปนการตกลง

ผกมด แตควรจะใหทกคนเขาใจวานคอการประมาณการเพอใหเหนภาพและเขาใจตรงกนวาเรากาลงจะทาอะไรใชเวลานาน

ขนาดไหน (ยาโดยประมาณ) แตสาหรบคาทแมนยากวานจะไดกตอเมอไดเรมงานและวดผลแลวนามาสงทวดนนมาประกอบเปน

ขอมลปรบปรงแผนงานอกท

Page 68 of 220

5.4 ย ากนอกทวาอะไรบางทตองยอมเสย(เพอใหไดอะไรมา)

แนนอนวามนมกฎและพลงผลกดนบางอยางททาใหเราตองใสใจในเรองบางเรองอยางมากใน Project แตละอน ลองมาฟงสงตอไปนซงอาจจะฟงดคนๆมยครบ เงนทมใหใชอยางจากดและกาหนดวนทจะตองสงมอบดเหมอนวาจะคลาดเคลอนไมได ขอบเขตของงานมกจะมเพมขนตามความตองการทมากขนแบบไมทนตงตว แนนอนครบคณภาพตองมาเปนอนดบ 1 (โอวนจะจายราคาสามลอแตขอนงเบนซ๑กนเลยรไงครบคณลกคา) ครบมนเปนปกตโดยธรรมชาตของสงทเรยกวา Project ทวาสงทกลาวมานนมนเหมอนจะขดแยงกนเอง(อยางแรง) การใหนาหนกหรอความสาคญในดานนงหมายถงวาตองลดทอนความสาคญของอกอยางลง(อยางหลกเลยงไมได) ถาเราทาใหสงเหลานอยในสภาวะสมดลไมได แนนอนปลอยไวนานๆ Project กคงลมสลายไปในทสด

ดงนนตองใหไดขอสรปวาอะไรบางทเราตองยอมเสย...นนสแลวอะไรละทเราจะยอมเสยไป

สไลดความสมดลของปจจยทส าคญใน Project

Trade-off Slider

ขอบเขต Scope ยดหยนหนอยนะ

งบประมาณ

ระยะเวลา

คณภาพ

การใชงานงาย

ความเรยบงายๆๆๆๆๆ

การตรวจสอบละเอยด (audit)

Page 69 of 220

ครบและอกครง Agile กมทางออกใหคณเพอทาใหแรงกดดนจากทงสงทงปวงเหลานมนบรรเทาเบาบางไป ผมกจะปลอยใหเปนหนาทของอาจารย๑ Sensei เพอสอนคณละกนในเรองน เราจะมาทาการศกษาเพอทาความเขาใจดวยกนวาในตวแปรทกลาวมามอะไรบางทเปนปจจยสาคญใน Project แลวอะไรบางเปนสงทเราตองแลกเพอใหไดมาซงปจจยสาคญนน แลวเราจะใชพลงของปจจย(ทสาคญ)เหลานนมาใชใน Project ไดยงไง

1. ในสงเหลานขอใดเปนแรงทมผลกดดนมากทสดใน Project ของเจา

a. คณภาพ

b. เวลา

c. ขอบเขตของงานทตองทา

d. งบประมาณ

2. เมอเผชญหนากบวกฤตการทางดานปรมาณงานทตองทา (มนเยอะจนทาไมทนอะนะ) อะไรคอทางออกทดทสด

a. ลดขอบเขตของงานลง

b. เพมคนเขามาทางาน

c. ขยายขอบเขตเวลา

d. ลดคณภาพงาน

อาจารย๑ครบ ชวยสอนผมหนอยครบวาผม

จะตองทายงไงเพอจดการกบแรงผลกดนทมา

จากปจจยตางๆในงานพฒนา Software ครบ

อนนอาจารย๑ชวยไดแนนอน แตเจาตองผานการ

ทดสอบเสยกอน

หรอถาไมผานเจาก

คงตองตายแนๆ

Page 70 of 220

3. ขอใดตอไปนทาใหคณรสกเจบปวดทสด

a. เดนลยฟา

b. เคยวแกวแตก

c. เตน Wonder Girls

d. ขอเงนเพมจากเจาของ Project

รสกยงไงบางเมอตองตอบคาถามเหลาน ตอบไดหรอเปลา หรอวาคณตอบไดดวย “กขนอยกบวา...”

ในความเปนจรงแลวมนไมมคาตอบทถกตองหรอไมถกตองแบบตายตวกบคาถามเหลาน เพราะคาถามเหลานแคเพอแสดงใหเหนวามปจจยหลกๆอยสามอยางทเปนแรงผลกกนอยใน Project และการทจะตองสรางสมดลใหกบปจจยทงสามน คงตองเหนอยกนหนอย

นเปนเวลาทเหมาะสมทสดทจะไดเรยนรถงพลงจากปจจยสาคญเหลาน และหนทางทจะควบคมพลงเหลานใหสมดลได เรามารจกกบ คนเจาอารมณ๑สคนนเลยดกวา (หรอคนเจาอารมณ๑ทง 4)

เมอทกสงทกอยางเรมตน Projects จะถกปกครองภายใตกลมคนสคน(ทเจาอารมณ๑นาด)ซงประสานงานรวมกน ซงรจกกนในนามคนเจาอารมณ๑ทง 4 – เวลา, งบประมาณ, คณภาพ, และ ขอบเขตของงาน

แตแนนอนวาเฉกเชนระบบการปกครองโดยทวไป บอยครงทคนทงสนมอาการผดรปทางอารมณ๑และทาใหเกดความไมลงรอยกน เพราะความเจาอารมณ๑ของเคาทาใหเกดผลเสยกบ Project ของเรา

บางทเวลาบบเราใหยงแนนยงขนจนทางานลมโลกไปเลย

งบประมาณโดนตด

Bugs เพมขนทกวน

มงานมากไปทตองทา

อกเชนเคยตามแบบคนเจาอารมณ๑คนทงสยอมดรายเปนธรรมดา แตวาเรากมทางทจะทาใหเขาเหลานนสงบได ตอไปนจะเปนวธการทจะทาใหพวกเคาทงสทางานอยางสอดประสานกน

เวลา งบประมาณ คณภาพ ขอบเขตงาน

Page 71 of 220

เวลา

เวลาเปนสงทมจากด (แตบอยครงผมกลมไปเหมอนกน) เราไมสามารถสรางเวลาหรอเกบเวลาไวใชงานได เราตองใชมนอยางดทสดเทาทเรามและนเปนเหตผลททาใหทาไมนกรบ Agile ทงหลายถงชนชอบการวางแผนงานแบบ Time-Boxing (เปนเทคนคทใชชวยในการบรหารเวลาอยางนง ซงจะแบงเวลาออกเปนชวงยอยแลวทางานภายในชวงเวลานนๆ...ไมวาจะเสรจหรอไมเสรจกตาม แทนทจะทาจนงานนนเสรจ) นกรบ Agile รดวาการดอดงทจะขอเลอนการสงงานออกไปนนเปนการลดมลคาทลกคาของเราจะไดบนสงทเคาไดลงทนไปและแนนอนวายงเปนการเพมความเสยงทจะไมมอะไรจะสงใหลกคาอกดวย (ยงสายยงไมไดงาน) ซงเปนโชคชะตาทยาแยทสดทจะเปนไปไดของ Software Project (เปรยบเสมอนตายสนท) และนเปนเหตผลทวาทาไมนกรบ Agile ของเราจะมองวาเวลามนตายตว

งบประมาณ

งบประมาณเปนเหมอนฝาแฝดของเวลา เพราะวามนไมยดหยนมจานวนจากด และไมไดมใหใชอยางฟมเฟอย สาหรบลกคาของเราแลว มนเปนเรองยากและนาลาบากใจมากถาเคาตองกลบไปหาผใหการสนบสนนทางดานเงนทนเพอขอเงนเพม อาจจะเหนวาเกดขนไดในบางครง แตเชอเถอะมนไมไดเปนประสบการณ๑ทดหรอกเพอหลกเลยงประสบการณ๑อนไมนารนรมย๑น นกรบ Agile ปฏบตตองบประมาณเฉกเชนเดยวกนกบเวลาตายตว

คณภาพ

มบางคนทมความเชอทผดวาคณภาพของงานสามารถถกสงเวยเพอแลกกบการใหไดมาซงเวลาทเรวขน (ผดมหนต๑) การใหไดมาซงความเรวในระยะสนโดยตองแลกกบคณภาพนนเปนความเหนผดอยางรายแรงการลดคณภาพลงกเปรยบเหมอนกบการโยนมด(ใหญมากๆประมาณมดสปาตาละมง)ทตดไฟเพอเลนกลกลางฤดหนาวทมหมะตกหนก เราอาจจะทาใหมอเราอนไดในบางครงคราว แตไมนานจากนนมนอาจจะบาดมอเราหรอไหมมอเราอยางสาหสและคณภาพเปนอกอยางทตองตายตวไมมการอะลมอลวย

ขอบเขตของงาน

สาหรบ เวลา งบประมาณ และคณภาพทไมมการลดหยอนแลว นกรบ Agile ของเรากเหลอแคอยางเดยวททาใหมนยดหยนได –

ขอบเขตของงาน ถามนมงานมากไปใหทา นกรบของเราจะทานอยกวาทม ถาในความเปนจรงมนไมตรงกบแผน นกรบของเรากจะเปลยนแผนนเปนสงททาใหนกเรยนหลายคนรสกไมสบายตวเลย หลายคนมาทสานกนโดยมความรตดตวมา(เพราะถกสอนมา)วาแผนคอสงทเปลยนไมได ไมยดหยนไมเปลยนแปลง แตวาไมมอะไรหนจากความเปนจรงไดหรอก

วนเวลาอาจจะไมยดหยน แตไมใชสาหรบแผนการกเพราะวาพลงจากคนเจาอารมณ๑ทงสทนกรบ Agile ตองรบมอ เคาจะทาให เวลา งบประมาณ และคณภาพตายตวไมเปลยนแปลง แตจะไปใหความยดหยนกบขอบเขตของงานแทน เมอมาถงตรงน คณกพรอมแลวทจะทาแบบฝกหดกบลกคาเพอใหไดมาซง Trade-Off Slider หรอตารางความสมดลทแสดงใหดในขางตน

Page 72 of 220

การอบรม กบ การสงงาน (Training VS Delivery)

การอบรมกบการสงงาน เปนสงทเราตองทาใหสมดลvอยางมาก เชอหรอไมวาท Thoughtworks (ซงเปนบรษทของผเขยนเอง) แมวาเคาไมไดมองวา Thouthworks เปนบรษททใหบรการทางดานการฝกอบรม แตวาอยางนอยนเปนจดขายจดนงททมขายของเราเอาไปใชไดเสมอ และเรากไดรบการตอนรบจากลกคาดวยเหตผลเรองการฝกอบรมอยบอยครง

แตยงไงกตาม การฝกอบรมและการสงงานมนเปนสงทแยกออกจากกน

โดยการใช slider board และถามคาถามงายๆเพอใหลกคาของคณไดจดลาดบความสาคญของปจจยสองอยางนนน คณสามารถจดลาดบกบลกคาของคณวาสงไหนสาคญกวาแลวดาเนนการตอไปได

สไลเดอร๑ความสมดล (Trade-off Slider)

สไลเดอร๑ความสมดลเปนเครองมออยางดทมมานานกาล โดยนกรบ Agile ของเราสามารถใชในการระดมความคดเพอหาขอสรปถงผลกระทบทอาจจะเกดขนของพลงทง 4 นกรบของเรามความจาเปนอยางยงทจะตองทาความเขาใจอยางลกซงวาลกคาของเรานนใหความสาคญกบพลงทงสอยางไรบาง และในทานองเดยวกนนกรบของเรากตองการทจะสรางขอกาหนดใหเขาใจตรงกนถงความสาคญของความยดหยนในเรองของขอบเขตของงาน ความยดหยนทาใหเราไมยดตดจนเกนไปวาจะตองทางานแบบใหไดทกอยาง แบบวาเอาทกๆ Features (User Stories) มาใสเปน To do List (Master Stories)

เราจะหยบเอาพลงแตละพลงมาถกคยกนแบบถามกนตรงๆกบลกคาของเรา เอามาโชว๑แบบใหเหนกนจะๆบนสไลเดอร๑วาลกคา

มองวาพลงแตละอนนนสาคญอยางไร (บนมาตรฐานเดยวกน เชน จากคา 1-5 ก 1-5 เหมอนกนหมด) แตกฎทสาคญอยางแรก

ของการใชสไลเดอร๑กคอ ทกๆพลงของคนทง 4 ไมสามารถมความสาคญในระดบเดยวกนได (นนหมายความวาจะไมมอะไรทเปน

เบอร๑ 1 มากกวาสองคน)

ใหแนใจวาลกคาเขาใจวาเรา

กาลงใหความสาคญกบความ

ยดหยนบนขอบเขตของงาน

(อาจจะมบาง Features ทเรา

จะไมทา ตามเวลาทกาหนด)

Page 73 of 220

ลกคาสวนใหญจะสามารถทาความเขาใจไดวาบางสงบางอยางตองยอมเสยอะไรบางเพอใหไดมาซง Project ลกคาของเราอาจจะรสกลงเลและเปนกงวล แตเราตองคอยยาใหชดเจนวาสงทอยบนมาตรวดนทกๆสงเปนสงสาคญมากและจาเปน หรอใหมองอกแงนงกคอวาถงแมวาคณภาพอาจจะมความสาคญนอยกวาเวลาแตไมไดหมายความวาเราจะไมสนใจคณภาพ เพยงแตเราตองการจะบอกวาเราจะไมยอมใหงานเสรจชาโดยเดดขาดไมวาอยางไรกตาม ดงนนเวลามความสาคญกวาในแงมมน

แมวาบคคลทง 4 มความสาคญมาก (เพราะผลกระทบของความผดปกตของเคาคอนขางจะรนแรงเหลอเกน) แตนนไมไดหมายความวาเราจะไมมพลงอนๆจากปจจยอน ตอจากนจะขอยกตวอยางใหดไดเหนไดเขาใจ

ตรงเวลาและไมมปญหาเรองการเงนอาจจะยงไมพอ

ลองพจารณาเหตการณ๑ตอไปน

จะมประโยชน๑อะไรถาเกมส๑ทสรางมนเลนไมสนก

บรการหาคผานเวบจะอยยงไง ถาไมมลกคาสมครใชงาน

ฟงดแปลกๆมยถาสถานวทย Online เลนเพลงแตไมมใครฟงอยเลย

เพราะวามปจจยทอาจจะมองไมเหนทลกคาของเราไมไดบอก(อาจจะลมบอกหรอเราไมเขาใจเอง) จะเหนไดวามนมพลงทเราตองสรางความสมดลเหมอนกนในดานอน(ขนอยกบลกษณะงาน) เพราะวาปจจยอนๆนนไมไดมความสาคญทยงหยอนไปกวากนเลย

ผดอยางแรง เพราะทกคนไม

สามารถเปนท 1 ไดเหมอนกน

หมด

ผดไดอก เพราะวาไมมพลงอะไร

ทมความสาคญไดเทากน (หรอ

อยในระดบเดยวกน)

Page 74 of 220

อยาลมพจารณาปจจยทเปนนามธรรม(จบตองไดยาก)

แมเปนอะไรทจบตองและมองเหนไดยากแตวาอาจจะเปนสงทท าให Project ส าเรจหรอลมเหลวไดเลย

สงเหลานอาจจะเปนสงทเราเรมไดกลนเรมรสกไดในชวงตอนทา Inception Deck หรออยางนอยกไดรบการบอกเปนนยๆจากลกคาของเราในชวงของการเกบ Requirement ทเรยกวา Your story-gathering workshops กบลกคาของคณ ซงเราจะมาดกนในบทท 6.4

ในชวงทเราไดทาการใช Sliders กบลกคาของเราอยางนอยเปนสงทเราควรจาไวเสมอวาตองเผอพนทดานลางตารางของเราเพอไวสาหรบปจจยทจบตองไดยากทจะมผลตอความสาเรจ(หรอลมเหลว)ของ Project ของเรา

เหอ...กผานมาไดดวยดถงตรงน เหนอยมย จากสงทเราไดเรยนรมาทงหมดตอไปนกไดเวลาทจะรวบรวมทกๆสงทกอยางมาเสนอลกคาเราไดแลวเพอแสดงใหเหนวาอะไรบางทเรากาลงจะทา (เรา = เรา + ลกคา – เพราะวาลกคาคอหนงในทมของเรา)

5.5 มอะไรบางทจ าเปนตองท า (เพอใหส าเรจ)

ความสนกสดเหวยงของเกมส๑มนๆทเรากาลงสราง

ลดTraffic ของงานบรการลกคาลง 20%

ระบบการบรการลกคาแบบอตโนมต (Self Service)

Release แรกของเราเลย

Release แรกของเราเลย ตรวจรบ สงงาน

7 คน, 4 เดอน, 2M

ฝกอบรม

Page 75 of 220

พอมาถงตรงนแลว

คณกใกลความเปนจรงขนแลวละ!

อยางนอยกมวสยทศน๑! อยางนอยกมแผน!

ขนตอนตอจากนกมเพยงแคตองหาใหไดวาอะไรบางทเราตองทา แลวมนมลคาเทาไหร

มาถงขนนสงทคณตองทาการแนะนาใหคนทเปนผสนบสนนทางดานทนใหกบ Project ไดเขาใจวา นนะคอทมทจะทา นนะคอแผนของเรา และนนะคอมลคาของสงทเราจะทา งนมาเรมกนททมเลยแลวกน

ประกอบรางสรางทม

เมอมาถงจดนไดแลวอยางนอยเรากตองมความชดเจนขนมากแลววาทมแบบนทมความจาเปนสาหรบภารกจน ลองมาดการจดทมตวอยางสกหนอย

# สมาชก(ต าแหนง) มความรความสามารถในดานไหน

1 UX Designer สามารถพฒนา Prototype อยางเรว (Rapid Prototypes), Wireframe and

mockup (ตวอยางหนาตาการใชงานอยางงายททาไดรวดเรว), user flows (นาจะคลายๆ Role Playing บอกวาคนกาลงตองการทาอะไรแลวจะทาสาเรจดวยการทายงไงบนระบบทเราสราง ) และ ถาเปน HTML/CSS จะดมากๆ

1 Project Manager สามารถรบมอกบความไมชดเจนแลคลมเครอได สามารถทางานไดแมไมตองถกสงงาน

3 Developers C#, ASP.NET, มประสบการณ๑กบ MVC

Unit testing, TDD, refactoring, continuous integration 1 Analyst สามารถทาการวเคราะห๑ในแบบ Just-in-Time (Agile ไมไดแปลวาไมตองทา

Requirement แตวาทาใหเพยงพอทจะนาไป Develop ไดใน Iteration นน) มความคนเคยกบ XP Story Card (เทคนคในการคยกบ On Site Customer และ Prioritize วาสงใดทควรจะทา) สามารถชวยงานการ Test ได

1 Customer มเวลาเพอตอบคาถามอยางนอย 1 ชวโมงตอวน

สามารถประชมรวมกนไดอยางนอยอาทตย๑ละครงเพอใหได สามารถแนะนา ชทาง และตดสนใจในเรองทเกยวกบ Project ได

1 Tester มประสบการณ๑ในการทดสอบแบบอตโนมต สามารถทางานไดดกบนกพฒนาระบบและลกคา

มความเชยวชาญในเทคนค exploratory testing (มนคอการ test ทมระบบระเบยบไมลกทงแบบ script testing นะครบ)

Page 76 of 220

และนเปนเวลาทเหมาะสมทสดทจะพดถงเรองหนาทและความรบผดชอบของคนในทม (จากทเคยกลาวมาแลวในบทท 2) และ

มาคยกนวาแตละคนถกคาดหวงวาจะตองทาอะไรไดบาง มตาแหนงนงในทมทควรจะไดรบการใสใจเปนพเศษสกเลกนอยนนกคอ

ลกคาเพราะแนนอนวาไมใชแควาตาแหนงนสาคญมาก(เพราะวาสาคญมากๆๆๆๆๆๆๆๆ) ตาแหนงนสวนใหญๆไมไดมในองค๑กร

ของลกคาหรอก เราตองใหมนใจไดวาลกคาเขาใจจรงๆในการทจะตองมารบตาแหนงลกคาใน Agile Project แบบน เพราะวา

Project มสงเหลานซงเปนสงทเราตองการจากเคา

เวลา – ลกคามเวลาตามทตกลงกนไวหรอไม?

ลกคามอานาจในการทจะตองตดสนใจเมอถงคราวจาเปนไดหรอไม?

ลกคาสามารถชนาบอกแนวทางการพฒนาของ Project นหรอไม?

นกพฒนาระบบ นกทดสอบ และนกวเคราะห๑สามารถรบมอกบหนาทใหมๆของเคาไดอยางสบายๆแตสวนใหญแลวลกคา Agile

จะคอนขางใหมทจะปรบตว ดงนนอาจจะตองเนนกนเปนพเศษหนอย อกอยางหนงทสาคญมากกคอเรองความชดเจนในกรณทม

ผมสวนรวมใน Project อยเยอะ เราตองสรปใหไดสดทายแลวใครตดสนใจ

การใหไดมาซงผตดสน(ใจ)

ไมมอะไรทดจะสบสนไปกวาการททมไมสามารถรไดวาทมจะตองรบคาสงจากใครวาเรากาลงจะทาอะไรและเดนไปทางไหนลอง

มาฟงเรองแบบน(อาจจะพอคน) เมอผอานวยการทางดาน IT ตองการจะทดลองเทคโนโลย ในขณะทรองประธานฝายการกลยทธ๑

ตองการความรวดเรวในการนาสนคาออกสตลาด เดยวกอน...แตรองประธานฝายขายบอกวาพงออกขาวมาวาบรษทเราจะออ

กรนใหมในไตรมาสหนานเอง

Page 77 of 220

มนเปนไปไมไดเลยทจะมคนทมสวนรวมในโปรเจคหลายๆคนทจะคอยมาบอกทมวาอยากใหทมทาอะไร หรอควรจะเดนไปทาง

ไหน อะไรมความสาคญและควรจะตองทาอะไรตอจากน

ในความเปนจรง สงทตองทาใหเขาใจกนแตแรกเลยกคอวาใครเปนคนนนทจะตดสนใจวาจะพาทมไปทางไหน ไมไดหมายความ

วาผมสวนรวมคนอนๆจะไมมสทธพดอะไรเลย แตวาในทางกลบกนเราตองการใหลกคามาพดกบทมดวยความเปนเสยงเดยวกน

และสอดคลองกน

เรองนเปนสงสาคญทตองพดถงใหชดเจนตงแตตน เพราะวาจะทาให Project ของเราใหไมตองเผชญกบความวนวายและ

คาใชจายแสนแพงสาหรบการแกไขหรอทาใหม (effort ทลงไปสญเปลา)

ถงแมวาเราจะรอยแลววาใครเปนคนมอานาจในการตดสนใจ แตกตองพดเรองนอยด(ตงแตตอนน) ไมใชเพราะวาเพอกาจดขอ

สงสยหรอคลมเครอ แตเปนการใหทกคนเขาใจตรงกนและยอมรบวาสดทายแลวเรองจะตองไปจบทใคร

จบเรองนแลวมาคยกนตอเรองเงนๆทองๆดกวา

ผมสวนรวมใน Project

ลกคา

ทมหลก

แลวไดรบคาสงจากใครละ ทายทสดใครตดสนใจ

Page 78 of 220

ไดเวลามาประเมณวา Project นราคาเทาไหร

คณอาจจะไมเคยตองพดถงเรองเงนเลยใน Project เพราะวางบประมาณอาจจะถกกาหนดมาตายตวอยแลววามเงนเทานและน

คอสงทคณจะตองใชอยางจากด (ฟงดรสกวาคนๆอยางแรง)

แตวาถาหากคณจาเปนจะตองทาการประเมนเรองเงน(อยางคราว) ลองมาดวธการอยางงายๆและรวดเรวเพอใหไดตวเลข

โดยประมาณ

(ขอเขยนเปนหนวย US Dollars นะครบ)

งายๆเพยงแคเอาจานวนคนคณดวยจานวนระยะเวลาและคณดวยอตราคาใชจายทมตอ 1 ชวโมง (ตอวนหรอตอเดอนแลวแตทใช

กน เชน ถาบอกวา Project ใชเวลา 4 เดอน = 80-90 วน วนนงใชคดคาใชจายเทาไหรกเอามาคณ) แนนอนวาเราอาจจะม

คาใชจายดานอนๆยกตวอยางเชน Software หรอบรษทของคณอาจจะมวธทางบญชทคดคางบประมาณรายจายสาหรบสง

ตางๆทแตกตางไปจากน แตอยางนอยคาใชจายสวนใหญในการพฒนา Software Project มนอยทคนทมานงพฒนานแหละ

ดงนนเมอเราเขาใจทกสงทกอยางแลว กถงเวลาทเราจะมาชวยให Project สามารถตดสนใจไดวาเราจะไปตอหรอหยดและ

Cancel มนซะ

งบคราวๆ

คน เดอน ชวโมง

สมมตวา 160 ชวโมง/เดอน

Page 79 of 220

สดทายแลวเมอน าทกอยางมาประกอบรางสรางภาพ

นเปนสวนททางผมสวนรวมแตละคนอยากรอยางใจจดจอมาก เพราะอะไร เพราะวาทงหมดทงปวงทเรากลาวมาแลว มคาถาม

เพยงแคสองคาถามเทานนททานๆเหลานนอยากรมากมาย

1. เมอไหรมนจะเสรจ

2. แลวมนราคาเทาไหร

แตใหชดเจน(อยาลมนะครบ)วาสงทเราบอกไปนนเปนเพยงคาประมาณการ(อยางคราวๆ) แมวาเราจะทาการบานของเรามาแลว

(อยางด) และกสามารถตอบคาถามพนฐานทสาคญ(สาหรบ Project) แตยงมสงตางๆทยงถอวาเปนปจจยทยงไมรไดและไม

แนนอน (อยางเชนทมของเราจะสามารถทางานไดดวยความเรวเทาไหร) ดงนนเรายงไมสามารถทจะถอวาคาเหลานทเราประเมน

ออกมาเปนอะไรทดไปกวาคาประมาณ(แบบคราวๆ)

บทสรป Inception Deck

ยนดดวย!!! ตอนนคณไดผานพนชวงทถอไดวาสาคญซงถอเปนกาวแรกในการใหคานยาม Project ของคณ รวมถงการหาคนมา

เขารวมทม และเรมกาวแรกทสาคญของ Project ทมความเปน Agile มากๆของคณแลว

ลองมาดภาพรวมและเรองราวทคณ ทมของคณ ลกคาของคณตลอดจนถงผทใหการสนบสนนดานเงนทนของคณ สามารถเขาใจ

ตรงกนได โดยรวมแลวสงตอไปนเปนสงทเราไดขอสรปจากกจกรรมทเราทามาทงหมดครบ

คณกาลงสรางอะไรและสรางทาไม

อะไรคอคณคาของ Project (อะไรททาใหคนอนคดวานคอสงทตองทา)

อะไรคอสงทสาคญหรอ Objective ของ Project น

ใครถอวามสวนรวมใน Project ของเราบาง

สงทเรากาลงจะสรางหนาตามนเปนยงไง

อะไรจะเปนอปสรรคหรอปญหาทอาจจะเกดขนได

สงทเรากาลงจะสรางนมนเลก/ใหญขนาดไหน

มปจจยดานไหนบางทเราพอจะยดหยนไดใน Project

แลวสงทเราทาใชเวลานานมย และคาใชจายประมาณเทาไหร

Page 80 of 220

อาจารย: ไหนลองบอกมาซลกศษย๑วาอะไรบางทไดเรยนรมาจาก Inception Deck

ลกศษย: ผมไดเรยนรถงความสาคญในการถามปญหายากๆในตอนเรมตนของ Project และการใหความสาคญกบความเขาใจ

ตรงกนและความสอดคลองกนของทกๆคน

อาจารย: ดมาก มอะไรอกวามา

ลกศษย: ตอนนผมไดเขาใจวาในการทา Project ขนตอนการระบของเขตของงานและการวางแผนไมจาเปนตองใชเวลานานเปน

เดอนอกตอไป ดวย Inception Deck เราสามารถทาใหทกคนเขาใจตรงกนถงสงทเราจะตองทาโดยใชเวลาเพยงไมกวน

อาจารย: แลวถาหากมอะไรทเปนแกนหลกทสาคญ ขอบเขต หรอแมกระทงทศทางของ Project มการเปลยนแปลงไป เราควร

จะตองทายงไง

ลกศษย: แกไขปรบปรง Deck ของเราตามการเปลยนแปลงนน แลวทาขนตอน Inception Deck อกครงกบทกๆคนทเกยวของ

เพอใหแนใจวาความสอดคลองและเขาใจตรงกนยงอยดมสขใน Agile Project ของเรา

อาจารย: เยยมมาก ตอนนเจาพรอมแลวทจะเดนทางตอไป

ดวยคาถาม “ทาไม” ตอจากนเราจะเจาะลกในรายละเอยดปลกยอยสาหรบสงทเราไดอธบายไวในตอนตนบทของเรา

ในสวนของการวางแผนเราจะเผยใหเหนวามเทคนคมากมายทคณจาเปนตองใชในการวางแผน Agile Project การประเมน ,

รายการสงทตองทา (แบบ Agile), หรอแนวคดในเรองของความเรวของทม (ทมสามารถทางานไดเรวแคไหน) ตอจากนเราจะคย

กนในรายละเอยดของเรองเหลานทงหมด และแนนอนวาไมมอะไรทจะดไปกวาการเรมตนดวย User Stories

อาจารย เซนเซ

และนกรบผมความมงมน

Page 81 of 220

บทท 6 เกบ User Story

ในภาคสามนมาลองดเรองพนๆของการวางแผนแบบแอจไจล๑กนบาง เราจะเรมจาก user story ตามดวยการ estimate และจบ

ดวยการวางแผนแบบปรบไปเรอยๆ (adaptive) หลงจากสาเรจวทยายทธการเกบ requirement แบบ user story คณจะซาบซง

วาแผนทวางแบบแอจไจล๑นน จะไดรบการปรบปรงใหเปนปจจบนและมแตขอมลลาสดเสมอ แถมยงไมตองไปเสยเวลากบสงไร

ประโยชน๑ทสด ทเรามกจะทาๆกน นนคอการวางแผนลวงหนาไปกอนทงทยงไมรอะไรเลย หรอทเรารจกกนดวา นงเทยน! งนเรา

มาเรมจากการดวาแตกอนเราเกบ requirement กนยงไงและตองปวดหวขนาดไหน เมอตองทาเอกสารกองเพนน

6.1 ปญหาของการท าเอกสาร

ถาคณไมไดหลอกตวเอง คณจะยอมรบความจรงทวา การเกบ requirement อยางละเอยดถยบลงในเอกสาร จรงๆแลวมนกไม

คอยจะเวร๑คซกเทาไหรใน software project ลกคามกจะไมไดสงทเขาตองการจรง ทมมกจะไมไดทาในสงทตองการจรงๆ เวลา

สวนใหญกมวแตเอาไปเถยงกนวาทเขยนไว มนหมายความอยางนนอยางน แทนทจะเอาเวลามาทาสงทควรจะทาจรงๆ

ลองมาดปญหาอนของการตะบตะบนทาเอกสารกนดบาง

Page 82 of 220

Page 83 of 220

หรอจรง แลวเราตองท าเอกสารใหมากกวาน?

ปญหาของการเกบ requirement ดวยเอกสารไมไดอยทจานวนวาจะมากจะนอย แตมนอยทการสอสาร เอกสารมนพดกบคณ

ไมได แถมใครตอใครทอานเอกสารเดยวกนกอาจจะตความไปไดตางๆนาๆ

ผมไมไดพดวาเธอเอาเงนไป

ผมไมไดพดวาเธอเอาเงนไป ผมไมไดเปนคนพดนะ

ผมไมไดพดวาเธอเอาเงนไป ผมใชวธอนบอกตางหาก

ผมไมไดพดวาเธอเอาเงนไป คนอนอาจจะเอาไป

ผมไมไดพดวาเธอเอาเงนไป เธอแคยมไปเฉยๆ

ผมไมไดพดวาเธอเอาเงนไป เธอขโมยเอาหวใจผมไปตางหาก

Page 84 of 220

ตวหนงสอมนดนไดนะ จะบอกให!

Requirement เนยมนควรจะเรยกวา Requirement จรงๆเหรอ

นกรบแอจไจล๑ไมยดตดกบ Requirement แคใชคาวา Requirement กผดแลว ปรมาจารย๑ Kent Beck ไดกลาวไวในคาภร๑ Extreme Programming Explained : Embrace Change วา “การพฒนาซอฟต๑แวร๑นนถกทาใหหลงทางกนไปหมดกดวยการใชคาวา Requirement นแหละ คานถาเปดดกดกจะหมายถงอะไรทเปนขอบงคบหรออะไรทตองทา คานสอความหมายถงสงทเปนทสด สอถงสงทเปนการถาวร สอถงสงทเปลยนแปลงไมได ดงนนการใชคาวา Requirement จงผดเตมๆ จากเอกสาร Requirement เปนพนหนา แคทาใหไดซก 5, 10 หรอ 20 เปอร๑เซนต๑กมกจะพบวาเราไดตอบความตองการทางธรกจไดเกอบหมดแลว แลวไอทเหลออก 80 เปอร๑เซนต๑ทไมไดทาหละ มนจะเรยกวา Requiremet คงไมถกนกเพราะมนไมใชสงทตองทา

ผมจาไดวา Martin Fowler เคยบนๆวา ขนาดใชเวลาเปนปๆทาหนงสอออกมาใหอานกน ทานทงหลายกยงอตสาห๑หลงประเดน

หลกๆทเขาพยายามจะสอกนได บางทโชคไมดแคการใชไวย๑กรณ๑ผดกทาบรษทเสยหายหลายแสน แตสวนใหญแลวปญหาทจะ

เกดกคอ การสอความหมายทผดพลาด ทาใหไมสามารถบนทกความตองการทแทจรงของลกคาได

ธรรมไจล กระบวนยทธสดยอดแหงการสอสารในภายทมในกคอ การคยกนซงๆหนา (face-to-face)

สงทเราตองการ กคออะไรซกอยางทสามารถทาใหเราคยกนเรอง requirement จนสามารถเกบเกยวสาระสาคญของมนไวได มน

ตองเลกพอทจะเอามาวางแผน (ใหทาเสรจใน iteration) ไดแตกตองมความหมายพอทจะเตอนใหเราจาไดวาเราคยกนไววาอะไร

6.2 มาใช User Story กนดกวา

User Story ในแอจไจล๑ คอคาอธบายสนๆของคณลกษณะของระบบทลกคาของเรา ฝนอยากจะมในซกวนหนง ปกตกจะเขยนใส

กระดาษแผนเลกๆ (เพอจะไดคอยเตอนไมใหเราเขยนทกอยางลงไปหมด) และมไวเพอเปนเครองเตอนใจใหเราไปคยกบลกคาจรง

ในรายละเอยดปลกยอย

Page 85 of 220

ในตอนแรกทคณไดเหน User Story, คณอาจจะอดอดอยากถามวา แลวเนอหายไปไหน มแตนา อยาเพงตกใจไป เนอกมอย

แหละ เพยงแตอาจจะไมไดอยในททคณคดวามนนาจะอยกได

มนกไมเชงหรอกทเราจะมาเขยน requirement ทเกบมาลงในกระดาษแผนเลกๆแผนเดยว จรงๆแลวเราไมตองเขยนอะไรมน

มากมายเสยดวยซาแอจไจล๑อยากใหทมใชการ๑ดใบเลกๆเพอเปนการเตอนสตวาเปาหมายเบองตนของการเกบ requirement

ไมใชการเกบรายละเอยด หากแตเปนเพยงการจดบนทกความคดหลกๆสองสามคาใหพอไดไอเดย เพอเอาไวมาคยกนใน

รายละเอยดตอวนหลง อาวแลวทาไมไมคยรายละเอยดกนใหเสรจๆไปเลยทเดยวหละ ทไมทาอยางนนกเพราะวา ในความเปน

จรงเราไมรวาเราจะไดทาไอทคยกนเนยเมอไหร เผลอๆอาจจะไมไดเอามาทาเลยดวยซา เราอาจจะไมไดแตะ feature นอกเลย

เปนเดอนๆและกวาจะถงตอนนน อะไรๆกอาจจะเปลยนไปหมดแลว ไอทเคยคยไวกอาจจะไรประโยชน๑ ดงนน เพอเปนการ

ประหยดพลงงานลดโลกรอน แทนทจะมาขดคยหารายละเอยด ใหครบถวนกระบวนความกนตงแตแรก เราจะเกบเรอง

รายละเอยดเอาไวทหลง (เพมเตมใน บทยอย 9.4) ใหคดซะวา user story คอคาสญญาวาเราจะมาคยกน ถงวนนนเราจะลวงลบ

ตบแตกเอาใหหมดใสหมดพง แตเราจะไมลวงจนกวาจะชวร๑วาถงเวลาแลวทตองลวงแนๆ

6.3 สวนประกอบของ User Stories ทด

สงรกคอ มนตองมคากบลกคา แลวอะไรละทแปลวามคา? คาวามคาอาจหมายความถงสงทลกคาเขาใจไดและรวาเขากาลงจายเงนไปเพออะไร ลองดจากตวอยางดานลางวาถาลกคากาลงหวตาเขยวมาเลยและพบวามสองรานหาหารใหเลอกแตหลงจากเดนดเมนหนารานแลวลกคาจะเลอกรานไหน

Page 86 of 220

ดงนนเราสามารถสรปไดวา user stories ตองเปนอะไรทเขาใจงาย คนธรรมดาททาธรกจหาเงนมาจายเราตองสามารถเขาใจไดดงนนจะไมมการใสศพท๑แสงพศดารทางเทคนคลงไปใน user stories เลยแตมนกไมไดหมายความวาเราจะไมตองทาอะไรทางเทคนคเลยเชนการทา connection pooling การทา design pattern ของเหลานยงอยแตเราอยาพยายามใหลกคาเหนจะเปนการดทสด

Page 87 of 220

สวนประกอบทสองของการเปน User Stories ทดคอมนจะตองครอลคลมหนาจรดหลง(end-to-end)? เหมอนภาพประกอบดานลาง

ถาเปรยบกบเคกแลวคงไมมใครตองการกนเคกแคชนลางชนเดยว ลกคากเชนกนเมอจายเงนแลวตองไดตมๆดงนน user stories ตองมาแบบเตมๆดวยเชนกนมนตองครอบคลมทกชนดงนนมนตองมคณลกษณะดงน

Page 88 of 220

อะไรกเกดขนไดในโปรเจคของเรา บางสงทเคยโคตรจะสาคญขาดไมไดขาดแลวตาย พอขามมาอกสปดาห๑มนอาจไมมความหมายเลยกไดดงนนถา story ตางๆมนผกตดกนแนนจนเกนไปการทเราจะขยบหรอแลกมนกบสงอนกเปนเรองยากขนมาทนท We don’t always succeed (we need an application before we can create the reports), but slicing our stories from end to end and gathering them by feature enables us to treat the vast majority of our stories as independent and be flexible on scope when necessary.

อยางไรกตามจาก requirement ทเราไดจากลกคาเราสามารถสรางซอฟท๑แวร๑ออกมาไดหลายระดบ (ตามราคา) เหมอนกบถาลกคาตองการรถยนต๑หนงคนและบอกความสามารถของรถมาคราวๆเราจะพบวามรถหลายรนทตรงตามทลกคาตองการไมวาจะเปน Ford Focus, Honda Accord หรอแมกระทง Porsche 911 ดงนนถาเราเขยน User Story ออกมาใหมาในรปแบบทตอรองไดนนจะเปนเรองดกวาเพราะจะทาใหเราสามารถหรบหรอขยบวธการสรางออกมาใหเหมาะกบเงนทเราไดรบมาดวย

Page 89 of 220

ถา Story ทเราเขยนขนมาสามารถถก test ไดนนหมายความวาเราเขาใจความตองการของลกคาไดด เนองจากเรารวา story จะตองทางานไดอยางไรบางเพอใหผานการทดสอบและเราจะสามารถเขยน test case ทลอกบ story ของเราไดเพอใหคนเขยนโปรแกรมสามารถเขยนไดอยางถกตองตามทมนควรจะเปน

และเพอใหขนาดของ Story ทเราสรางขนนนเหมาะกบเวลาทเรามเราควรจะทาใหแตละ story มขนาดอยระหวาง 1-5 วนเพราะจะทาใหเรามนใจไดวาเราสามารถจดการมนไดในกรอบของ iteration ของเราทมชวงเวลาระหวาง 1-2 อาทตย๑ ดงนนคณสมบตของ Story ทดนนควรจะเปน Story ท INVEST ทยอมาจาก “Independent, Negotiable, Val uabl e, Estimatable, Small, and Testable.”

Page 90 of 220

ตอนนเราไดรทฤษฏเกยวกบการสราง User Story ทดไปแลว ตอไปเราลองมาดกนวาเราจะเอามนไปใชจรงยงไง

Wel come to Big Wave Dave’s Surf Shop

มนก OK ทจะชวยลกคาเขยน Story Don’t take earlier agile books too literally when they tell you that customers should write all the user stories. That advice is right in spirit†but not in practice. It’s true that customers should provide the content for our user stories (because they are the ones who know what they want built). In practice, however, it will be youwho will be doing most of the writing. So, don’t be worri ed if you find yoursel f giving thema hand. Just make sure your customers are active participants in the process and you are capturing their needs in the cards.

Page 91 of 220

คณเดฟ(ไมใชโปรแกรมเดฟ) จางบรษทไกกามาเมอสองสามเดอนทแลวเพอมาทาเวบแตหลงจากผานไปนานสงทคณเดฟไดมาคอเอกสารเกยวกบ requirement และไมมอะไรมากกวานน ไมมการสรางเวบมาใหด (แงม) คณเดฟทนไมไดจงจางเราไปแกปญหา ดงนนสงแรกทเราเรมทาคอการหาใหเจอวาคณเดฟตองการอะไร? เราจงตงคาถามไปวาฟเจอร๑หลกๆทเดฟอยากไดคออะไร และเรากพบวาสงทเดฟตองการนนไมไดมอะไรซบซอนเลยมนเปนเรองทแสนธรรมดา ขอแรก, เดฟอยากใหเวปนนาเสนอแหลงทองเทยวทองถน ทเดกๆเกรยนๆสามารถเขามาดไดวามกจกรรมเกยวกบการ SURF แถวๆนนบางเชนการแขงขน การสอนการเลน อะไรประมาณนน .ขอทสอง, เดฟตองการขายของเชน board, suite, เสอผา วดโอ บางอะไรบาง แตไอระบบขายนตองใชงายนะและออกมาแลวตองดหลอแหลมแจมแมว ขอทสาม, เดฟอยากใหเวบนสามารถแสดงสภาพอากาศทหาดแบบ real time ไดโดยการตอ Web Cam แลวสองไปทหาดแบบจะๆ เพอใหคนทสนใจเขามาดแบบจรงๆไดเลย นนแปลวาเวบตองเรวส๑

จากความตองการของเดฟขางบนเราลองมาเขยนเปน story ใหไดสกหกเรองกนไหม อยางกงวลวาจะผด แคลองกอนวาจะออกมายงไง

เราลองมาดวา User Story แตละอนทเราสรางขนมาสามารถตรวจสอบไดดวยเงอนไข INVEST ไดหรอไม (Independent, Negotiable, Val uabl e, Estimatable, Small, และ Testable)

Page 92 of 220

เรามาเรมกนดวยการลองเขยนอะไรทเราคดวาลกคาของเราเขาใจมนไดงายๆ สมมตวาเราเขยนไดทงหกเรองแลวเราลองมาดสวามนออกมาดหรอไม

หลงจากลองอานวนไปวนมา ไอสอง story สดทายมนดแหมงๆพกล „ The website must be super-fast! „ The design should look really good. แลวไอสอง story นมนไมดตรงไหน คอถาเราจะใหความสาคญกบคาวา super fast มนกไมผดหรอกเพยงแตวาไอทเรวนะมนเรวแคไหน นอกจากนไอทวา Looking Good เนยยงไงถงเรยกวา Looking Good การทเราสราง Story แบบนขนมานนเราเรยกมนวา Constraints เพราะสองสงนเปนสงทลกคาตองการจรงๆแตเราไมสามารถทามนใหเสรจภายใน หนงหรอสองอาทตย๑ ดงนนถาเราได user story แบบนออกมาเราจะสามารถแปลมนออกมาในอกมมหนง เชน เวบของเราตองเรวประมาณน

คราวนเรากรแลววาเรวส๑เนยมนเรวแคไหนและเรายงสามารถ test มนไดอกดวย

Page 93 of 220

Constraints เปนเรองทนาสนใจแตเราจะไมเอามนมาปนไวกบ Story ทวๆไปเราจะเกบมนไวในการ๑ดสอน เพอใหแนใจวาคนอนๆในทมกใหความสาคฐกบมนและทาการทดสอบใหผานทกครงทมการ deploy เทมเพลตสาหรบ User Story เทมเพลททประกอบไปดวยคางายๆดงตวอยางดานลางจะชวยใหเราสามารถเขาใจ User Story ไดวามนคออะไร

ดงนนเมอเราลองเอาเทมเพลทนไปใชกบราน Big Wave Dave เราจะเขยนออกมาไดประมารน

ขอดของ เทมเพลท คอมนจะชวยใหเราสามารถตอบคาสามทสาคญไดสามแกนคอ who, what และ why แตการไดมาซงขอมลนสงทเราตองแลกมาคอคาอธบายทเวนเวอเลกนอย ดงนนการทมคาอธบายอยในเทมเพลททาใหบางคนมองวามนมากเกนความจาเปน รกหรกตาดงนนถาเราไมลงมอใชเรากจะไมรวาแบบไหนทเราชอบดงนนใหลองใชงานดแลวจะพบวาวธการใดทเหมาะกบเราทสด†แตทงนทงนนเรากไมจาเปนทจะตองเลอกเอาอยางใดอยางหนง เราอาจใชมนทงคไดพรอมกนเชนเราอาจใชชอสนๆอยาง “Add user” สาหรบการเรมตนแตเราจะเขยนคาอธบายโดยการใชเทมเพลทไวขางหลง

6.4 How to Host a Story-Gathering Works hop

หลงจากทเราไดรวบรวม user story ทงหมดแลวเราควรจะเรยก user มาดวาสงทเราเขยนไวใน user story นนเปนสงทเขาอยากไดจรงๆหรอปาวดงนนสงทเราตองทาคอการสรางสงทเรยกวา story-gathering workshop ซงการจด workshop นจะเปนการพบกนและชวยกนตรวจสอบและเขยน user story ระหวาง developer และ user

Page 94 of 220

The goal of the story-gathering workshop is breadthจดประสงค๑ของการจด story-gathering workshop คอ ภาพรวม เพราะเราตองการเปนวาจรงๆแลวสงท user ตองการจากระบบนมอะไรบางแตไมไดหมายความวาเราจะทามนทกอยาง.ภาพประกอบดานลางคอบรรยากาศของการทา story-gathering workshop ทด

Step 1: Get a Big Open Room

เราตองการสถานททมพนทใหเราไดโยกยายไปมาและเราตองสามารถเอากระดานอนใหญมาแปะไวสาหรบแยก story ออกมาเปนกลมเพอความงายในการเขาใจ

Step 2: Draw Lots of Pictures

Page 95 of 220

หนงภาพแทนลานถอยคาดงนนการเขยนภาพเยอะๆกจะยงทาใหเราเขาใจอะไรไดงายขนเชนการเขยน flow chart สามารถชวยเราเขาใจเรองเกยวกบกระบวนการทางานของระบบ System Maps และ Information Architecture จะชวยใหเราสามารถจดกลมและแตกงานออกมาได Concept Design และ Paper Prototype เปนวธทดสอบการใชงานไดระดบหนง แตระหวางทาตองคดอยเสมอวาเราตองการภาพใหญ เราจะตองไมลงไปในรายละเอยดใหมากเกนไป

Step 3: Write Lots of Stories

หลงจากทเราได diagram และ ภาพ มาแลวจากการคยกบ user เราจะเรมดง user story ออกมา

Page 96 of 220

ถาเราได screen มาเรากสามารถดงเอา user story ออกมาไดเชนกนโดยการดง functionalilties ตางๆของ screen ออกมา

จาก flow-chart, lo-fi paper prototype เราจะไดเรองราวหลกๆของงานทเราตองทาแลว และเมอเราตองดงเอา user story ออกมาเราตองคดเสมอวา user story ตอง เลกๆ, เปนอสระตอกน, ตอบโจทย๑ไดแบบ end-to-end แตถา story นนทาไงกใหญเราจะไมเรยนมนวา story เราจะเรยกมนวา epic และ epic กคอ story ขนาดใหญทตองลงแรงประมาณสองอาทตย๑ เราเรยกการ๑ดเหลานวา Epic (การ๑ดยกษ๑ทกนเวลาเปนสปดาห๑ๆ) Epic เอาไวทา high-level planning หรอเอาไวเกบงานใหญๆทเรารวา นาจะตองทาแตยงไมชวร๑ ถาเธอว๑มงานลกษณะน (ใหญๆ ยงไมชวร๑) ขอเธอว๑จงทามนเหมอนการ๑ด defect (report erratum, คอจดๆไวคราวๆวามนเปนยงไง แตยงไมตองไปลงรายละเอยด) แลวคอยมาแตกมนเมอถงเวลาทจะทา

Page 97 of 220

สดทายแลว high-level การ๑ดประมาณ 10 - 40 ใบจะเพยงพอทจะเตมชวงเวลา 6 เดอนใน plan ถาการ๑ดขนหลกรอยแลวละก แสดงวาเธอว๑วางแผนไกลไปหรอไมกลงรายละเอยดเยอะเกนไป จาไววาเรากาลงเนนกวาง (ไมเนนลก) ฉะนนเธอว๑จงอยาดาลกเกนไป ไมงนเสยเวลาเปนสปดาห๑ๆกวาจะไดโผลกลบมาบนดนจะหาวาหลอไมเตอน

Step 4: Brainstorm Everything Else

มาถงขนนเราเกอบจะไดของทตองการมาทงหมดแตยงไมหมดเราได user story ทเปนตวบอกวาสงท user ตองการคออะไรแตสงทเราตองทายงตองมอกเชน data migration, load testing, เอกสาร SOX compliance, เอกสารสาหรบ support, เอกสารสาหรบการ train, เอกสารสาหรบ UAT และอนๆอกมากมายเรองเหลานยงตองถกคดเสมอและเราตองใหความสาคญกบสงเหลานเทากบงานอยางอนทเราตองสงตอนจบโปรเจค ถงขนตอนนเปนชวงเวลาทดทเราจะเอาภาพทเราเขยนไวมนบทท 4 สวน 4.5 เรองการพบเพอนบาน มาคดใหจบเพอใหการทาโปรเจคนสาเรจไดดวยดดงนนอยารรอทจะเขยนอะไรกตามทคดออกไวใหชดเจน

Step 5: Scrub the List and Make It Shine

หลงจากทเราได list ของสงทตองการในทกๆมมมาอยางเพยบ ตอนนไดเวลาทเราจะตองมานงหาแลววาอะไรทมนซา อะไรทยงขาดอย จดกลมงานทคลายๆกนไวดวยกน อะไรทเขยนแลวเขาใจยากกเขยนใหมใหมนเขาใจงายๆ เมอทาสงเหลานเสรจกไดเวลาทเราจะทา project plan แลว กรสสสสสสสสสสสสส ศษย: ทานอาจารย๑ถาขาเขาใจไมผด การพดคยแบบเหนหนากนนงใกลๆกนเปนเรองทดและมประสทธภาพทสด ดงนนขาตองใชเวลาใหมากทสดในการนงคยกบลกคาเพอหาวาลกคาตองการอะไร อาจารย: ถกแลว ศษย: นนแปลวาขาไมตองเขยนอะไรเลยในขณะทเกบ requirement? อาจารย: โอว (แสรดดดดดด นกเกรยนเกนไป) การไปนงคยไมไดแปลวาเองไมตองเขยนเอกสาร ทาเอกสารเทาทจาเปน เอกสารนนเปนเครองมออนทรงประสทธภาพในการ share ขอมลระหวาเรากบลกคา ศษย: นนแสดงวาเอกสารบางตวกทาไดใชไหมครฟระหวางเกบ requirement อาจารย: ถกแลว แทนทเราจะมานงจอมทาเอกสารเราตองเพงสมาธไปทสงทลกคาตองการ เราตองรวาควรจะทาเอกสารเมอใด ศษย: ขอบคณทานอาจารย๑

What’s Next?

Well done, amigo! Now that you see user stories are nothing more than short descriptions of features our customers would like to see in their software, you are one step away from being able to create your very first agile project plan. In the next chapter on estimation, we’ll see how to size our stories so they can withstand the inevitable hiccups we encounter during delivery. So, onward and upward, as we demystify the art and science behind agile estimation.

Page 98 of 220

ตอนท 7 :วาดวยการประเมน :

ศลปะแหงการคาดเดา

พรอมพบกบความจรงอนนาหวาดหวนอกขอทเกยวของกบการประเมนหรอยง? เนองจากทผานมาการประเมนโปรเจคแบบเดมๆ

ทเราใชนนมนหวยแตกสนด มนไมเคยเปนจรง!!!

แตเมอเรารจกการประเมนแบบแอจไจล๑จะทาใหเราเลกตามหาฟกทอง(ความถกตองและเทยงตรง ทไมเคยเจอ)จากการประเมน

แบบเดมๆ แตในทางกลบกนเราจะหนมาสรางแผนงานทสามารถทาใหเราและลกคาสามารถทางานรวมกนอยางมความสขและ

ตางเชอถอในสงน

ดงนนในบทนเราจะไดเรยนรเกยวกบการประเมน user story และรวมไปถงเทคนคการประเมนอกหลายแบบทจะชวยใหเรากะ

ขนาดของงานไดแบบผดนอยลง

Page 99 of 220

7.1 ปญหาของการประเมนเบองตน

ปญหาใหญของวงการของเรา(พฒนาซอฟท๑แวร๑)คอเรองของการทาการประเมนโครงการและความคาดหวงทมตอการประเมนนน มกจะไดผลออกมาในทางลบเสมอ

มนไมไดมาจากความผดพลาดในการประเมนของเรา (แมวาจรงๆแลวมนจะผดพลาดอยเสมอๆ lol กร๏ากกก ) แตความผดพลาดมนเกดมา “ความตองการ” ของคนอนๆทคาดหวงวาจะไดแตการประเมนนนมนไมเคยใหได นนคอ ความแมนยาในการทานายอนาคต

หลงจากทเราไดทาการประเมนเบองตนและทางานกนไปสกพกกดเหมอนวา ผคนตางหลงลมความจรงทสาคญขอหนงไป นนคอ

Page 100 of 220

และสงทเกดขนกบการทางานจรงเสมอคอเรามกจะยดมนเอาไอการประเมนทเกดจากการคาดเดาสดๆเหลานมาเปนคามน

สญญาวามนจะตองเกดใหไดตามนน และนนกคอทมาของปญหาอนใหญหลวง!!!

Steve McConnell อางวา พฤตกรรมทผดๆ ในทรงกรวยแหงความไมแนนอน ( ภาพประกอบท 7.1 ในดานลาง ) ไดเตอนสต

เราๆ ใหเหนวา ในชวงตนของการประเมนนน มความเบยงเบนมากถง 400 % ในชวงเรมตนโครงการ และนนคอความจรงทเรยบ

งายทสดเราสามารถกลาวไดวา เปนไปไมไดทการประเมนชวงแรก (up-front estimates) จะใหความถกตอง และเราจะตอง

หยดแสรงวามนมความแมนยา

ภาพประกอบท 7.1 : ทรงกรวยแหงความไมแนนอน แสดงใหเหนถง ความเบยงเบนในชวงตนของการประเมน มความแตกตางกนมากเพยงใด เมอเทยบกบชวงอนๆจนเสรจสนโครงการ

Page 101 of 220

มเพยงคาถามเดยว ทการประเมนชวงแรก สามารถใหคาตอบได นนคอ

มอะไรบางทเราตองการ เพอนาไปสการประเมนแผนงานตามดานลาง

1. เพอใหเรามแผนงานสาหรบอนาคต

2. เตอนใหเราทราบวาทราบวาการประเมน คอการคาดเดา

3. ตอบสนองใหเหนความซบซอนในการพฒนาระบบงาน

7.2 เปลยนมะนาวใหเปนน ามะนาว (Turning Lemons into Lemonnade)

หลกแหงแอจไจล๑ยอมรบวาในชวงแรกของโปรเจค การประเมนเบองตน ไมมความนาเชอถอเพยงพอ แตงานบางอยางตองถกทาบนพนฐานความไมเทยงตรงนนคอการจดสรรเงนทนและความคาดหวงเปนสงทตองกาหนดเพอใหโครงการเกดขน ดงนนตองมการสรางอะไรสกอยางทเกยวกบการประเมน และไออะไรสกอยางนนตองวดผลได เพอใชสงนนในการตอบคาถามวาจะใชระยะเวลาเทาไร และใชมนในการวางแผนเพอใหงานเดนตอไปขางหนา เพอการน เราตองการ 2 อยาง

Story ทถกกาหนดขนาดให สมพทธ๑ (relatively) กบ Story อน

ระบบ point-based เพอการตรวจสอบความกาวหนา

ไปดกนวา แตละอยาง มรายละเอยดและจะชวยในการวางแผนของเราไดอยางไร

ขนาดสมพนธ (Relative Sizing)

ลองจนตนาการวา เราใชเวลา 10 วนาท ในการเคยวคกกชอคโกแลตซป 1 ชน และเราจะลองประเมนวา ถาเราสวาปาม กองคกกขนาด 7 และ 14 ชน (รวมถงนมแกวโต) เราจะประเมนออกมไดวา?

Page 102 of 220

ในตอนน เราลองนกถงบางสง บางสงทเรยบงาย แตบางทเราไมเคยลองทามากอน เราจะใชเวลาในการดาเนนการ งาน 4 งานงายๆ นไดอยางไร?

Page 103 of 220

ถาเราเปนเหมอนคนทวๆไป เราจะพบวา การประเมนคกกทมความสมพทธ๑กน งายกวา และงานอนๆ ยากกวาอยางแนนอน

ความแตกตางระหวาง แบบฝกหดทง 2 นนคอ คกกนน เราสามารถประเมนไดจากความสมพทธ๑ดวยการการนบจานวน ไดอยางแนนอนเปนอกครงทวทยาศาสตร๑แสดงใหเหนวาการประเมนจากความสมพทธ๑มบางอยางใหมนษย๑เราทาไดคอนขางด เชนเวลาทเรามวางหน 2 กอนตรงหนา เราสามารถบอกไดอยางถกตองวากอนหนใด มขนาดใหญกวากน

Page 104 of 220

จากภาพกอนหนเราพอจะกะประมาณไดวากอนไหนใหญกวา แตปญหาคอการบอกวาไอทมนใหญกวานะใหญกวากเทา? จากตวอยางการกะขนาดกอนหนขางบนทแสนจะธรรมดานเปนเหมอนดงแนวคดทแสนสาคญของการประเมนและการวางแผนแบบแอจไจล๑เพราะการทเราสามารถกะขนาดของงานทงหมดใหสมพทกนไดนนจะทาใหเรารวาเราสามารถทางานไดเรวขนาดไหน และนคอจดเรงตอนของการประเมนแบบแอจไจล๑

ตอนน ความทาทายของเรากบการประเมนแบบสมพทธ๑

Page 105 of 220

ดงนนทมจะทางานชากวาหรอเรวกวาการประเมนดงเดมของเราเสมอๆ ดงนนเพอหลกเลยงปญหาทจะเกดขนคอเรองของการยอนกลบมาทาการประเมนใหมอยบอยๆ การประเมนแบบแอจไจล๑จงมวธการประเมนอกแบบคอการประเมนแบบแจกแตม

ระบบ Point-Based (Point-Based Systems)

ระบบ Point-Based ทาใหเราสามารถตรวจสอบความกาวหนา และประเมนความสมพทธ๑โดยไมตองกงวลวาความเปนจรงจะเปนอยางไร เมอเทยบกบสงทเราประเมนยกตวอยาง การประเมนเรองราวแบบเดมๆ เราใชหนวยเปน 3 วน ในขณะทความเปนจรงมนจบลงท 4 วน

เรามาลองปรบแตงการประเมนของเรา เพมขนอก 33 % ตามดานลาง

Page 106 of 220

แตใครกนเลา? จะทางานกบตวเลขอยาง 1.33 และ 6.66 วนได? ไมเพยงความแมนยาจะผดไปจากความรสก แตอะไรทเราจะทา ในเวลาหลงจากการสงมอบงาน เรองราวนน จากทเราประเมนไว 1.33 กลายเปนใกลกบ 1.66? จะปรบแตงอกรอบงนหรอ?

เพอหลกหนไปจากคาคงท การเตนไปมาของตวเลขอยางไมรจบ แอจไจล๑แนะนาใหเราหยดการประเมนไวบนพนฐานของความเรยบงาย ใชงานสะดวก และไมยดตดกบเวลาบนปฏทน

ดวยระบบ Point-Based หนวยวดของเราไมสาคญอกตอไป การวดจะใชสงทสมพทธ๑กน ไมใชสงทเปนคาคงทสมบรณ๑

เราทกคนลองเกบเกยวด ความใหญโต (bigness) ของแตละงานกบจานวน และขนาดทมนสมพทธ๑กนกบเรองอนๆ ถามนชวยได เราลองมาคดถงการประเมนแบบแอจไจล๑ และลองทจะจดเรยงเรองราวตางๆ ในรปแบบของขนาดเสอยด เลก กลาง และใหญยงกวานน เราลองจบประเดนจากการประเมนของเรา เมอสนสดในแตละวน มนไมสาคญอกตอไป ตราบเทาทเราเรยงขนาดของเรองราวทใกลเคยงกนในทกๆเรอง ในทกๆเรองทเราประเมนมากเกนไป มนกจะมเรองทเราใชเวลานอยไปเชนกน ดงนนแลว ผลทกอยางจะออกมาในทสดการใชงานระบบ Point-Based ตามขนตอนสาหรบเรา และเรยนรทจะแสดงวาเราไดอะไรนารกๆกลบมา ตามน

เตอนใหเราทราบวาการประเมนเปนการคาดเดา

ใชการวดจากขนาดบรสทธ (pure size) (มนไมเสอมสลายไปตามกาลเวลา)

Page 107 of 220

เรว และเรยบงาย

โดนจบไดแลว!! กอนทเราจะมาถงเรองวถการประเมนแหงแอจไจล๑ ในบทกอนๆในเนอหาทมการเกยวเนองกบการประเมนเราจะใหนวยของวน (days) ในขณะทจรงๆแลว เราควรจะใชเปน หนวย (points) แลวทาไมเราใช “วน” เราทามนดวย 2 เหตผลเหตผลแรก เราไมเคยลองโอกาสทจะพดคยเกยวกบแนวคดของการประเมนโดยใช “หนวย” ในการวด และเหตผลทสอง มบางแอจไจล๑ทมใชการประเมนในหนวยของวนอย แตวนของพวกเขาเรยกวา วนในอดมคต (ideal days) วนในอดมคตเปนการวดในรปแบบทตางออกไป วนในอดมคตเปนวนทไมมเหตการใดๆ มาขดขวางใหการทางานเตมเวลา 8 ชวโมงตอวนดาเนนตอไปไดอยางปกตสข แนนอน เราไมเคยทจะไดวนในอดมคตในการทางาน แตบางทมพบวาแนวคดนใชงานไดวนในอดมคตสามารถใชในการทางานได แตเรายงแนะนาใหยดหลกของการใช “หนวย” โดยมากเพราะวามนทาใหความจรงของการประเมนการมความชดเจน แตอยางไรกตาม การวดดวย “หนวย” ทาใหเราไมตองกงวลวา วนในอดมคต ไมเทากบความเปนจรงอกดวย พกซกนดกบหนงสอ อยาพงตกใจถาเราเหน “หนวย” แทนทจะเปน “วน” เรายงยดหลกวา “หนวย” เปนการสงยาเตอนของหนงสอ แตถาเหนคาวา วน นนหมายความถงสงเดยวกน

7.3 มนท างานไดอยางไร? (How Does It Work?)

เนอหาในสวนนจะเปนสวนของการทจะใชมนจรงๆแลว เรามเทคนคการประเมนงายๆ 2 แบบ สาหรบคณและทมงาน เพอจะใชในการประเมนขนาดของ story ใหเหมาะสมกบการวางแผนงานตามวถแหงแอจไจล๑

Page 108 of 220

การท าใหเปนสามเหลยม (Triangulation)

Triangulation เเกยวกบการสรางเรองราวตวอยางเลกๆ เพอใชอางอง และกาหนดขนาดใหกบเรองราวอนๆ ใหสมพทธ๑กน

เปรยบเทยบกบขนาดของเรองราวทยงเหลออย

มาดตวอยางกน ทนคอรานจกรยานบานๆ ทพงจะจดจางระบบสนคาคงคลงตวใหม เขาทาการบานเสรจเรยบรอยแลว และสรางรายการทดสาหรบเรองราวของผใช (user - stories) และในตอนนฝายการประเมนจะเขาไปชวยเหลอเขาไดทไหนบาง?

Page 109 of 220

เรมเรยนรจากรายการ และดวามอะไรบางทเปนตวเลอกทด ทจะเปนเรองราวอางอง ตามอดมคต เราตองการบางอยางท เลก บางอยางทมขนาดกลาง และบางอยางทมขนาดใหญพอทจะสรปใน 1 รอบการทางาน (iteration) (โดยปกตจะใชเวลา 1 ถง 2

สปดาห๑) เราสามารถวเคราะห๑ไดจาก

ตรรกะในการจดกลม (Locical groupings)

เรองราวตงแตตนจนจบ (เพอแสดงสภาพของโครงสรางจรงๆ)

อะไรกตามทจะมาเปนตวอยาง ทเราเหนวาเกดขนในวงจรชวตของโครงการ

ในตอนทเราคนหาเรองทจะมาเปนตวเลอก หลงจากตรวจสอบในรายการแลว มาดกนวาเราตดสนใจเรมดวย 3 เรองราวอางอง (reference stories) ตอไปน

Page 110 of 220

ในตอนน เรามบางสงสาหรบเปรยบเทยบแลว เราสามารถดาเนนการกบเรองทเหลออยและกาหนดขนาดเทยบจากตวเลอกทมอย

Page 111 of 220

มาถงตรงนอาจมขอสงสยวาจรงๆแลวเราสามารถทาการกะขนาดของ story ใหมไดไหม? คาตอบคอไดเพราะคงไมมใคสามารถกะอะไรไดถกทงหมดภายในครงเดยว ดงนนถาเรารสกวามนผดเรากควรกะขนาดมนใหมใหถกตองมากขน แตเมอเราทาการกะขนาดใหมเรยบรอยแลวเรากควรทจะไมไปยงกบมนอกปลอยมนไวอยางนน เพราะถาเราวนเวยนเขาไป

เปลยนขนาดงานบอยๆสงทจะเกดขนคอเราตองมานงคานวณอตราเรวของทมใหม ซงจะสรางความสบสนอลมานมากเนองจาก

เราจะมอตราเรวทไมเทากนในการทางาน

Also, if you ever run into something you’ve never done before and you don’t know how to size it, do a spike. A spike

is a time-boxed experiment where we do just enough investigation to come up with an estimate and

Page 112 of 220

อกเรองทนาสนใจเกยวกบการกะขนาดคอเมอใดกตามทเราเจอกบปญหาหรองานทเราไมเคยทามากอน เราจะกะขนาดไมถก?

สงทเราตองทาคอการทา Spike แลวไอ Spike มนคออะไรถาเอาแบบสนๆ มนคอการสละเวลาเพอคนหาและทดลองเพอหาดวา

ปญหาในรปแบบทเราไมเคยเจอนนจะมผลกระทบอยางไรแบบคราวๆแลวหยด

The Wisdom of Crowds

James Surowiecki เจาของเรอง The Wisdom of Crowds เลาวา ในป 1906 ทองกฤษ๐นกวทยาศาสตร๑ ชอ Francis Galton

ตนตะลงกบผลลพธ๑ทไดจากการทดลอง ทเขาดาเนนการทงานรนเรงประจาเมอง (country fair) ความคาดหวงมอยวา นกแลเนอผเชยวชาญจะมความถกตอง ในการเดานาหนกของววทถกแล มากกวาคนทวๆไป เขาแปลกใจและตกใจกบสงทพบไดจากฝงชนทวๆไป (simpleton) (ทมประสบการณ๑เพยงเลกนอย ถงไมมเลยกบการแลเนอ) ซงไมเพยงแตการเดานาหนกสดทายของสตว๑ไดเทานน แตความแตกตางทเกดขนนน มเพยงแค 1 ปอนด๑ เมอเทยบกบนกลาเนอผมประสบการณ๑ ความเชอทถกแสดงใหเหนวาผดของ Sir Francis นนแสดงใหเหนวา ผเชยวชาญจะใหความถกตองเสมอๆ และ มผลสาเรจทมากกวาจากฝงชน

ในเวลาทเราเลน planning poker มนคลายๆกบการทเราควบคมการตดสนใจของกลมคน ดวยการเอาใจใสกบการประเมนของเรา เราพนนกนกบกลมคนทจะชวยใหไดผลลพธ๑กาารประเมนทดกวาใครคนหนงจะทามนดวยตวคนเดยว

Spike โดยปกตจะทากนไมเกน 2 วนและเปนหนทางทยงใหญ ในการทจะลองบางอยางใหมผลออกมาเรวๆ และมขอมลเพยงพอทจะบอกเลาลกคาใหทราบไดวา จรงๆแลวมนมคาใชจายเทาไหร เขาเหลานนจะไดตดสนใจความคมคาจากการลงทนทจะเกดขน กอนทเราจะสรปปดทาย ยงมเครองมออกหนงอยาง ทควรรเกยวกบการทา ประเมนจากทม (team-based estimation)

และสรางความคดเหนสวนใหญ มนเรยกวา planning poker

Planning Poker

Planning Poker เปนเกมส๑ททมพฒนาใชประเมน story ตามแตละบคคลกอน (ใชสารบไพทมหมายเลข คลายๆกบ 1, 3 และ 5

หนวย บนการ๑ด) จากนนจงนามาเปรยบเทยบผล ทรวบรวมมาดวยกน ถาทกคนประเมนออกมาคลายๆกน การประเมนจะถกบนทกไว ถามความแตกตางกน ทมจะตองพดคยกนและประเมนรวมกนจนกวาจะไดขอสรป

Page 113 of 220

Planning Poker จะใชงานไดด เพราะวาคนทจะทาการประเมนนนเปนคนกลมคนทางานซงรวม นกพฒนา, DBAs, นกออกแบบ, นกเขยนขอมลทางเทคนค (technical writers) และใครกตามทมหนาทรบผดชอบสาหรบการสงมอบ ดงนนเราจะเปนวาการกะขนาดแบบนนนมนทรงพลงมากเพราะมนจะเตมไปดวยบรรยากาศแหงการหารอรวมกนโดยเฉพาะในเวลาทบางคนเสนอวา เรองราวนนๆ จรงๆ แลวมขนาดเลก และบางคนกลบมองวาจรงๆแลวมนใหญ มนไมสาคญวาใครจะเปนคนถกหรอผด (ซงมนจะถกจดเรยงดวยตวมนเองในทสดอยด) คณคาของการหารออยทการหาขอสรปสดทาย และนนคอสงทสาคญจรงๆเพอทจะใหกระจางขน planning poker ไมใชระบบโหวต (ดดๆ นกพฒนาระดบจเนยร๑ 3 คน ไมสามารถชนะการโหวตจาก ผเชยวชาญ 1 คน) แตมนเปนหนทางทใหบคคลแสดงความคดเหน เพอทจะไปยงการประเมนทดกวาในทสดและอยาหลงผดไปกบการใชสาหรบไพจรงๆ ทมตวเลข เชน 8, 13, 20, 40 และ 100 เราไมตองการมนขนาดนนหรอกทาใหมนเรยบงาย ขนาดของเรองราวเลกๆ (1, 3, และ 5 หนวย กบมหากาพย๑ในบางเรอง) และหลกเลยงความรสกผดปกตของความแมนยาและสงรบกวนทตวเลขจะสรางมนขนมา

Page 114 of 220

Padawan : ทานอาจารย๑ เปนความจรงหรอ? ทวถแหงแอจไจล๑ ไมสนใจความถกตอง ในการประเมน และทกสงอยทการกาหนดขนาดสมพทธ๑ (relative sizing)?

Master : เมอถงเวลาทตองประเมน สงหนงทเจาควรจะราลกไวคอ จงประเมนอยางดทสดเทาทจะเปนไปได ขอใหตงแตนตอไปความเขาใจผดๆในวถแหงแอจไจล๑ วาไมสนใจในความแมนยา จะไมเกดขนกบเจาอก

Padawan : ดงนนแลว เราควรจะพงประเดนไปทง ความถกตองและความสมพทธ๑ เมอตองประเมนเรองราว อยางนนหรอ?

Master : ถกตองแลว จงประเมนอยางถกตองเทาทเจาสามารถ จงเขาใจวาเจาไมไดมเพยงความแมนยา ตราบเทาททเรองราวของเราถกกาหนดขนาดใหสมพทธ๑กน และเราวดผลงานของพวกพองได แผนงานของเราจะมความแนนอนและสองสวางดจดวงอาทตย๑

Padawan : ดงนนแลว ศษย๑ควรประเมนอยางทดทสด แตใหเวลายงกวา ในการระบขนาดของเรองราวใหสมพทธ๑กบเรองราวอนๆ กระนนหรอ?

Master : เปนเชนนน การเสยสละแรงเพยงเลกนอยน จะเกดขนตลอดบนหนทางแหงการประเมน จงอยาอาศยอยบนความไมแมนยาจากการประเมนของเจา จงระบขนาดของเรองราวใหมความสมพทธ๑กน ยอมรบในสงทมนควรจะเปน และกาหนดความคาดหวงรวมกนในทสด

Padawan : ขอบพระคณ ทานอาจารย๑ ศษย๑จะนาไปใครครวญ ใหลกซงยงขน

ล าดบตอไป

ขอแสดงความยนด!! เราไดเรยนร กระบวนการ การประเมนเรองราวสมพทธ๑ โดยใชระบบ Point-based เรามทกอยางพรอมแลว ทจาเปนตอการสราง แผนงานในแบบแอจไจล๑ชนแรกการวางแผนโครงการใยแบบแอจไจล๑ เราจะมเครองมอทกอยางทจาเปนตอการพยากรณ๑ การตดตามผลงาน และการสรางแผนงานทเราและลกคาของเราเชอถอไดรวมกน หลงจากนน ดวยแผนงานในมอ และกองการ๑ดเรมตนขางๆเรา (inception deck) เราพรอมแลวทจะดาเนนการสงมอบเนอตมมนใหกบลกคา ดวยการดาเนนโครงการในแบบแอจไจล๑พลกหนาตอไปเพอเรยนรถงความลบในการวางแผนโครงการ ตามวถแหงแอจไจล๑

Page 115 of 220

Page 116 of 220

ตอนท 8 (ดรามามหากาฬ)

เอาวะใหชน ไอนองเอ๐ย กฎของ เมอร๑ฟ(คออะไรกไมร) ใชจบนกโทษไมไดเมอเจอกบ disrupting the best-laid plans ดงนนถา

เราไมมแผนการรบมอกบ change ทจะเกดระหวางทาโปรเจคเรากาลงเดนหนาเขาหาความตายอยางชาๆ ในบทนเราเราจะได

เรยนรรายละเอยดเกยวกบการวางแผนทเชอถอไดซงสงนจะเปนหลกยดเหนยวใหกบทมไปตลอดการทางานจนจบโปรเจค และ

เมอเราไดเรยนรวธการสรางแผนแบบแอจไจล๑จะทาใหเราผอนคลายเพราะแผนของเราจะทนสมย ตดเกาะกบสถานการณ๑

เสมอสงผลใหเราสามารถกาหนดสงตางๆไดอยางมเหตผล และเหนออนใด change ไมใชเรองนากลวสาหรบเราแตในทาง

กลบกน change จะเปนตวผลกดนเราไปขางหนาอยางมนคงตางหาก

8.1 ปญหาของแผนแบบ สถตย (โคตรไม make sense, static)

คณเคยพบปญหาเหลานหรอไม เมอเรมโปรเจคเราเรมดวยทาสวยสงางาม เรามโคตรทม เรามเทคโนโลยทมหศจรรย๑ เรามแผนท

สมบรณ๑แบบ แตผานไปสองอาทตย๑ หมอขาวยงไมทนดา ทกอยางเรมพง มนไมไดสวยอยางทคด เรากาลงออกทะเลแว๏กกกกกก

กกกกกก

Page 117 of 220

หวหนาทมเดเวลอปของเราถกดงตวขามไปเพอจดการกบโปรเจคอนทสาคญกวา (คลาสสค โปรเจคอนมความสาคญทาง

ยทธศาสตร๑สงกวา) โอเคเรายงมเวลา "เราคดในใจ"เราสามารถจดการปญหานได แตยงไมทนไร นกกระจอกยงไมกนนา

ตมมมมมมมมมมมมมมมม

เพราะเราเพงจะรวาไอสงทตองทากบสงททมเราทาไดนนมนชางหางไกลกนเหลอเกน และเมอเราเหลอบไปดเวลาแลว เฮอกกก

กก ผานไปครงทางแลว

Page 118 of 220

จาก Web Application ทเคยดเหมอนงายกกลายมาเปนอะไรทยงยากและซบซอนสดๆ จากสงทดเหมอนปลอกกลวยเขาปากกลายเปนสงทเปนไปไมไดเลยกบเวลาและสงเรามอยในขณะน และแลวกปญหากทไมเคยคาดไวกปรากฏตวใหเหน ดวยเหตผลทางดานธรกจทาใหมความตองการแอปพลเคชนของคณเรวขนแทนทจะเปนหลงจากน (ตามกาหนดเดม) การประชม

ลนเวลาเรงดวนเกดขน, ขนตอนการทดสอบโปรแกรมถกตดออกไป คนภายในทมถกขอใหทางานในวนหยดยกเลกวนหยดตางๆ

และแลว(หลงจากอดนอนทางาน) แอปพลเคชนกถกนาไปใชงานแบบคณภาพแยๆ ไมมใครสามารถใชงานมนได เหลานนาพามา

ส การลาชาอยางอน, งบประมาณเกน และสดทายโปรเจคก fail

ถาคณเคยเจอเรองเหลานมากอน ทาใจใหสบาย ‟ “You are not alone” การเปลยนทม, ลดทอนเวลา ของโปรเจค, หรอแมแต

กระทงการเลอนrequirements เปนเรองทปกตมกมากสาหรบทกๆโปรเจคในทาง software การทเราจะเผชญกบดามาเหลานได

นน เราตองวางแผนทจะเผชญกบมน แบบน:

1. สงหมอบสงทมคณคาสดๆใหกบลกคา

Page 119 of 220

2. จรงใจ, เปดเผย และซอสตย๑ใหมากทสด

3. ตกลงสญญาเฉพาะในสงทเราทาได

4. อนญาตใหมการเปลยนแปลงหรอปรบปรงแผนเมอมความจาเปน

ดวยการกาหนดสงแวดลอมใหพรอมเผชญกบการเปลยนแปลงตอนนเรากพรอมกบวธวางแผนงานในแบบ อไจล๑ๆ กนแลว

8.2 เรมวางแผนในแบบแอลไจลๆ

มนเปนอะไรทงายมาก การวางแผนงานแบบแอลไจล๑ๆ ไมมอะไรมากกวาการคานวน (measuring) หาความเรวของทม ทจะ

สามารถแปลง Stories แตละ Story ใหกลายมาเปนงาน(software ทพรอมใชงานได) หลงจากใชสงนแหละทานายวาเมอไรงาน

จะเสรจทงหมด(แมพ)

Page 120 of 220

Page 121 of 220

ในแอลไจล๑โปรเจคลสต๑ของสงทเราตองทานนจะเรยกวา “Master story list” ภายในลสต๑จะประกอบดวยฟเจอร๑ทงหมดทลกคาตองการจะเหนในซอฟท๑แวร๑ของพวกเขา ความเรวทเราจะสามารถเปลยน user stories มาเปนซอฟต๑แวร๑ททางานไดจะเรยกวา “team velocity” พวกเราจะใชสงนในการคานวนหาผลงานของทมเราและใชในการประมาณวนทจะทาการสงฟเจอร๑ตางดวย(Delivery dates) กลไกลทจะทาการขบเคลอนงานงานเสรจสมบรณ๑คอ Agile Iteration (ชวงประมาณ1-2 สปดาห๑ ของการแบงสวนงานทจะสามารถเปลยน user stories ใหกลายมาเปนซอฟต๑แวร๑ทพรอมทางานได) ตวอยางไอเดยในการการคานวณวนสงงานแบบคราวๆ เรมจากหาผลรวมของเวลา(total effort) ทตองใชทงหมดในโปรเจคนนๆ หารดวยคาประมาณของ team velocity แลวนามาหาวาเราตองใช จานวน Iteration เทาไร ทเราคดกวาจะพรอมสงโปรเจคนนๆออกไป ซงสงเหลานจะกลายมาเปน แผนดาเนนงานโปคเจคของเรา

#iterations = total effort /estimated team velocity

ตวอยางเชน

#iterations = 100 pts / 10 pts ตอ iteration = 10 iterations

สงทสาคญ คอ ตองเขาใจกอนวาแผนดาเนนงานโปรเจคครงแรก ไมใชขอตกลงสดทายทไมสามารถเปลยนแปลงได มนเปนแคการคาดเดาเทานน พวกเราไมสามารถจะรไดเลยวาความเรวในการทางานของทมเปนเทาไร ในตอนเรมโปรเจค และแมวาเราจะสามารถสรางตววดทจะนามาคานวณวาโปรเจคใชระยะเวลาเทาไร พวกเรากยงไมสามารถถงวนจรงๆทเราตองการหาได

การจดแผนดาเนนงานเรมตนแบบตายตวเปนสงททาลายโปรเจคตงแตกทมนจะเรมซะอก

ตอนทเรากาลงจะสงผมงาน หนงในสองอยางจะตองเกดขนเสมอๆ เราจะพบวา a) เราทาไดเรวกวาทเราประมาณ b) เราทาไดชากวาทเราประมาณไว เรวกวาทเราคาดไวหมายความวาคณและทมของคณทางานไดเราวาเวลาทกาหนดไว ชากวาทคาดไว (มากกวาทประมาณไว) หมายความวา คณและทมของคณมหลายสงทยงตองทา และมเวลาไมพอทจะทามนเมอตองเผชญกบงานจานวนมากทตองทา ทมแอลไจล๑จะทางานนอยลง (เหมอนกบสงทคณและผม ทาเมอตองเผชญกบสดสปดาห๑ทแสนจะยงยาก) แทนทจะยดตดกบแผนงานเดม พวกเขาจะปรบปรงมน โดยปกตดวยวธลดสโค๏ปของงานลง

Page 122 of 220

8.3 Scope ของงานสามารถเปลยนแปลงไดเสมอ

การทางานแบบท Scope สามารถเปลยนแปลงไดนน เปนวธบรหารโปรเจคแบบแอลไจล๑ใชในการปรบปรง แผนการใหดทสดเสมอโดยการยนยนใหลกคานาStoryเกาออกในทกๆครงทจะนา Story ใหมๆเขามา, ทมแอลไจล๑จะทางานภายใต คาเฉลยเวลาของโปรเจค และอนญาตลกคาสามารถเปลยนแปลงอะไรบางอยางได(ในราคาถกๆ)

โดยวธนจะชวยใหลกคาจะรสกวาพวกเขาจะตองเสยเวลากบการรวบรวมrequirement(เสยเวลานอยลง) และชวยใหพวกเขาและทมเรยนรวาทจะเรมตนแทนทจะพยายามทาใหทกสงทกอยางสมบรณ๑แบบ ตงแตแรก ถาจะพดในความเปนจรงแลว ลกคามกจะไมจาเปนตองยกเลก requirement เกาๆ เพอทจะทา requirement ใหมๆ เขามาเสมอ อาทเชน ถามนเปนฟเจอร๑(feature)ทพวกเขาตองการมนจรงๆ และพรอมทจะจาย สาหรบฟเจอร๑เหลานนซงพวกเขากตองเพมจานวนวนขน

Page 123 of 220

แลวอะไรละทลกคาไมสามารถทาได นนกคอการใสอะไรบางอยางเขามาในลสต๑งาน แลวคาดคดวา สงทไดออกไปจะตองตรงกนเปะๆ มนเปนความคดแบบสมบรณ๑แบบ ทไมมพนทใหการวาง แผนในแบบแอลไจล๑เลยเมอเวลามาถงเราตองเลอกกนละระหวางเลอนวนสงงานกบลดScopeของงาน โดยทวไปคนทเปน Agilelist มกจะเลอกอยางหลง(ลด Scopeของงาน) การเลอนวนสงงานเปนสงทไมสามารถรบไดในเชงธระกจ แมวาสงทพวกเราจะทาไดไมดเลยคอสงsoftwareใหตรงเวลา ไมวาเราจจะทางานดวยกาหนดวนตายตวหรอวาทางานภายใตงาน(feature)ทเปนหวใจของระบบ การปรบเปลยนscopeเปนแนวคดทวาคณและลกคาของคณตองเรมทจะรกษาแผนงานใหเปนไปตามความ เปนจรงและปองกนทมของคณจากสงทพวกเขาไมสามารถทามนได บางครงคณอาจจะแปลกใจเมอพบวาลกคาไมตองการทจะทางานแบบscopeทสามารถปรบเปลยนได และยงยนยนจะใหคณและทมทางานใหมากขน คณสองทางใหเลอกดงน เรมจาก โกหกตวเอง ปดหปดตา ทาตามแผนแรกเรมโดยไมสนใจอะไรเหมอนๆคนอนทากน หรอไมคณกประเมนเวลาใหมากๆเขาไว มองขามความเรวของทม(team velocity)ซะ สวดมนต๑ภาวนา วาทกสงจะจบลงไดดวยดในทสด(ปฏหารเทานนทชวยทานได) หรอเมอทกอยางลมเหลว คณควรทจะชแจงขอเทจจรง บอกถงสงทมนเปนอย จากนนกหยด นงลงรออยางเงยบๆ จนกระทงพวกเขารวาพวกคณจะไมโดดเขาลงไปในหลมนน คณจะไมทาแบบเดมตอไป และคณไมยนดทจะเขารวมเปนสวนหนงของการโกหก ทเกดขนในกระบวนการผลตsoftwareของเรา ทผานมา 40ปไมมใครบอกวาการเปนSamuraiเปนเรองงาย เมอพรอมแลวเรามาดวธการสรางแผนงานแบบแอลไจล๑กน

8.4 Your First Plan

การทจะสรางแผนงานในแบบแอลไจล๑ไมไดตางจากการเตรยมตวสาหรบสดสปดาห๑ทยงๆเลย มนเรมจากการทาลสต๑ของงานทตองทาขนมาสกลสต๑

Page 124 of 220

Step 1: สราง Master Story List ของคณขนมา

“Master Story List”คอลสต๑ของStory(Feature)ทลกคาตองการจะเหนในSoftwareของพวกเขาทงหมด พวกมนจะถกกาหนดความสาคญดวยตวของลกคาเอง และถกประเมน(เวลาหรอpoint)ดวยทมของคณ และมนเปนสงทใชเรมตนในการวางแผนงานโปรเจคของคณ “Master Story List”ทดควรจะใชเวลาในการทางานประมาณ 1-6 เดอน ไมมความเหมาะสมอะไร ทเราจะตดตามความคบหนาของลตส๑ของstoryทยาวกวานน สาเหตเพราะวา a) คณไมสามารถคาดการณ๑ ไดลวงหนาวาอกหกเดอนตอจากนโลกจะเปนอยางไรบาง b) คณกไมไดจะยดตดกบแผนนตลอดไป มนตองมการปรบเปลยนอยเสมออยแลว แลวคณจะสนใจทาไมละ บางทคณอาจจะสามารถทจะทาและสงทกอยางทอยในลตส๑ได แตทวไปมนไมเกดขนหรอกครบ มกจะมอะไรๆทตองทามากกวาทเงนทนและเวลาจะเอออานวยเสมอ ดงนนในการกาหนดกรอบของสงทคาดหวงกบสงทอยนอกเหนอscope แอลไจล๑ทมของstoryยอยๆจาก Master Story List และจดกลมมนเปนชดๆทเรยกวา Release กาหนด Release ของคณ Release คอชดของStory(ทลกคาเขาใจได)สามารถทาเสรจสนลงได ‟ softwareดๆททาเสรจ และพรอมทจะสงมอบได ในบางครงมนอาจจะหมายถง ชดของงานทนอยทสดทมคาพอทลกคาจะใชงานได - minimal marketable feature set (MMF). M ตวแรกของ MMF (minimal) คอสงทคอยเตอนเรา วาเราตองการเพยงทจะสง สงทมคาใหกบลกคาใหรวดเรว (80% ของ

softwareของคณมาจาก 20% ของฟเจอร๑ทงหมดเทานน)

Page 125 of 220

M ตวทสอง (maketable) คอสงทคอยเตอนเราสงงานทมคณคากบลกคาใหกบลกคาในแตละreleaseหรอไม(หรอวาพวกเขาจะ

ไมใชมนเลย) ดงนน minimal และ marketable คอกญแจสาคญในการเลอกวา story ทจะทากอนใน release แรกของคณ

เอาละเรมเปนรปรางขนมาแลวหลงจากทเรามทง Release และ Master story List ขนตอไปเราตองทากนคอ การกาหนดขนาดของแตละสงทเรามอยกน

Step 2: ก านดขนาดของแตละสงทเราจะท า

ในบทท 7 Estimation (การประเมนงาน): The Art of Guessing(ศลปะในการเดา) เราไดเรยนวธท ทมสามารถใชเทคนคการ

ประเมนงาน เพอทจะกาหนดขนาดของstoryในแบบแอลไจล๑มาแลว

Page 126 of 220

Page 127 of 220

ทนคณตองเขาใจวาสงทคณกาลงทาอยมนใหญแคไหนและคณกาลงจะใชเวลากบมนแคไหน 1 เดอน 3 เดอน 6 เดอน หรอแมกระทง 9 เดอน เอาละลสต๑ทถกจดสรรขนาดแลว ตอไปเราจะมาพดเรองความสาคญ(Priority)ของแตละstoryกน

Step 3: ล าดบความส าคญ(Priority)

ฟาสามารถผาไดทกเมอฉนใดโปรเจคของคณกสามารถถกยกเลกหรอลดเวลาไดทกเมอฉนนน ดงนนพวกเราควรทจะเรมทาใหสง

ทสาคญกอน การใหลกคาของคณใหความสาคญของstoryใน Master story list จากมมมองในเชงธระกจเพอใหมนใจวาพวกเขา

จะไดสงทดทสดสาหรบพวกเขา

แมวาลกคาของคณจะพดวาอะไรทตองเรมทากอนและเมอไร แตคณกตองมคาแนะนาวา story ไหนทเปนตวเลอกทดทจะเรมตนทากอน เพอทจะลดความเสยงในดาน Architecture ภายหลง ตวอยางของ story ทควรจะเปนตวเลอกทดทจะเรมทากอนคอ story ทมความสาคญกบลกคา และเหมาะกบทางดาน architecture ดวยการเชอมตอจดตางๆของ software ตงแตเรมจนกระทงถงจบ คณจะสามารถประเมนความเสยงตางๆไปพรอมๆกบการเพมคณคา(ทสามารถมองเหนได)ใหกบ software ดวยวธทดทสดทจะทาระบบsoftwareขนมา ดงนนอยากลวทจะตะโกนออกมา ในสงทคณร หรอในสงทคณเชยวชาญ ไมวาจะอะไรกตาม ดวยการกาหนดความสาคญรวมกน เราจะไดลสต๑ของงานทประเมนเอาไวแลว พวกเราใกลจะไดเรมตน คยเกยวกบวนทเรม

ทางานกนแลว แตกอนหนานน คณตองเดา ความเรวในการทางานของคณ และทมของคณดวย (team velocity)

Page 128 of 220

Step 4: ประเมนความเรวของทมงาน (Team's Velocity)

การวางแผนงานแบบแอลไจล๑สาเรจได เพราะพวกเราจะวางแผนงานของฟเจอร๑ บนสงทพวกเราพสจน๑แลว วาพวกเราสามารถทามนไดจากในอดต และถาเราไมรวาความเรวในการทางานของทมเราเปนเทาไร ในตอนเรมตนโปรเจคเรากแคเดา

ถาทกๆStoryของคณมขนาดเทากนหมด งายมกๆ กแค Team velocity = stories completed/iteration

สวนใหญมนไมเปนอยางนน แตละ story มกจะมขนาดไมเทากนเสมอไป ในกรณน เราสามารถคานวณ ไดจากสตร

Page 129 of 220

Team velocity = story pts completed /iteration

ในตอนเรมตนโปรเจคของคณ velocityมกจะแกวงขนๆลงๆ อยาตกใจ นเปนสงทปกตมาก ระหวางททมกาลงจดระเบยบของทม และคนหาวธทดทสดทจะทางานรวมกน

แตหลงจาก3-4itreationผานไป velocityของพวกคณจะเรมเสถยรขน และคณจะเรมรแลววาความเปนจรง ททมของคณจะสามารถทาได ไมมวธทจะทาใหสามารถประเมนความเรวในการทางานของทม(team velocity)ไดอยางแมนยาและรวดเรว ถามทมของคณวาอะไรบางทพวกเขาคดวาพวกเขาสามารถทามนเสรจไดในแตละiterationและตองแนใจวาสงทจะทานนเปนสงทลกคาตองการจรงๆและทมพรอมทจะรวมมอหรอเปลา

รวมถงตองยากบทมวาความหมายของคาวาทาเสรจแลวคออะไร(Section 1.3 Done Means Done) และการสงงาน(story)ในแบบแอลไจล๑หมายถงการผานทง analysis, testing, design และ coding แลวทงหมดจะดทสดถาไมยดตดกบการประเมนงานในตอนเรมตน ความลบของการทจะไดความสขมา คอคาดหวงใหนอยๆ และถาคณคาดหวงมากจะทาใหมนยากในการพดคยมากกวาการคาดหวงไวนอยๆ ดงนนจงควรพดคยกนมาก และคดอยเสมอวามนเรมจากการคาดเดาและประเมนผลในทกวนตงแตวนแรก ดวยลสต๑ของงานทคณมอยในมอและการประเมนความเรวในการทางานของเรา พวกเรากพรอมแลวทแลวท จะประเมนวนในการทางาน

Step 5: จดสรรวน

ทางเลอกในการประเมนวนมสองทาง สงงานแบบกาหนดวนสง หรอสงงานแบบกาหนดเปนชดชดของฟเจอร๑

Page 130 of 220

สงงานตามวนทกาหนดกคอการขดเสนอยางคราวๆแลวบอกวา เราจะสงงานชนงานวนน ไมวาจะเกดอะไรขนกตาม เมอพบวา story ใหมๆทมความสาคญถกนาเขามา story เกาๆทสาคญนอยกวา ทมขนาดเทากน กควรถกนาออกไปดวย สงนเปนการบงคบใหคดตดสนใจและสงทตองแลก(ประเมนสงตางๆอาทเชนscope)เพอทจะเพมงานเขามา อยางเรงดวนและใหทกคนรบรวาพวกเขาจะทาอะไรตอไป

Page 131 of 220

ถาคณตองการใหวนทจะสงงานยดหยนได และตองการทสงฟเจอร๑แบบเปนชดๆ คณกสามารถทจะเลอก สงเปนแบบชดของฟเจอร๑ได วธนใหทาการเลอกชดของฟเจอร๑ทสาคญๆขนมาทา ทาจนกระทงพวกมนเสรจแลวจงสง การยดหยนในเรอง scope

ของงานกยงเปนสวนหนงของวธน(คณยงคงจะพบฟเจอร๑ใหมระหวางทางอยด) แตถารสกวามนเปนสงททมตองการทจะทามนสงจรงๆ และคณพรอมอยแลวทจะปรบเปลยนวน เพอทจะทาใหฟเจอร๑หลกๆสามารถจดสงได ขอไดเปรยบของการสงงานดวยชดของฟเจอร๑คอคณจะไดฟเจอร๑หลกๆ และลดคาใชจายในความเสยง จนถงจดทพอรบได ความเสยงทรบได เปนเทาไรนนขนอยกบ การตดสนการรวมกนของคณ ลกคาของคณ และคนจายเงนตดสนใจรวมกน

และแลวคณกไดสรางแผนงานแบบแอลไจล๑! คณไดสรางการประเมนงาน, กาหนดความสาคญของแตละ storyใน Master

story list, ประเมนความเรวในการทางานของทม และเลอกวนทสงงานกอนทพวกเราจะไปกนตอ มสงพเศษอกหนงอยาง ทคณตองรกอนทเราจะจบ เรองการวางแผนงานแบบแอลไจล๑ๆ: Burn-Down Chart.

8.5 Burn-Down Chart

แมวาเราจะไมไดมการพดถง Project burn-down chart อยาเปนทางการมากอนหนาน แตพวกเรากไดผานๆตามนมาบางแลว มนกคอกราฟทแสดงถงความเรวของเรา(ซงหมายถงทม) วามความเรวในการทาให story ของลกคาเสรจเรวมากแคไหน และมนกบอกพวกเราวา เมอไรทเราคาดไดวาโปรเจคจะเสรจ

เมอแกน y ของเราคอจานวงานทยงคงเหลออย (จานวนวนของงาน หรอ จานวน pts) และแกน x เวลาในหนวย iteration

โดยทวไปเราจะบนทกจานวนของงาน(pts) ทเหลอทกๆ iteration และทาการใส ลงในกราฟ เสนสโล๏ปของกราฟกคอความเรวของทมนนเอง (จานวนของงานททมทาเสรจในแตละiteration)

Burn-Down chart เปนกลจกรสาคญสาหรบแสดงใหเหนถงสถานะของโปรเจคของคณ แคเหลอบมอง คณกบอกไดแลววา:

● โปรเจคของคณเสรจไปแลวเทาไร

● เหลองานเทาไรทคณตองทา

● ความเรวในการทางานของทม

● วนทคาดวาโปรเจคนาจะเสรจ

แตละคอลมน๑(iteration)ทอยบนกราฟจะแสดงถงจานวนของงานทเหลออยในแตละโปรเจค เราจะปดโปรเจคไดกตอเมอคอลมน๑ของ Burn-Down เหลอศนย๑

Page 132 of 220

โลกแหงอดมคต(...)ความเรวในการทางานควรจะเปนคาคงท มนควรทจะเรมตนท 15 pts แลวคอยๆลง คอยๆลง จากซายไปขวา และเปนอยางนนไปจนจบโปรเจค ในโลกแหงดามา Burn-Down หนาตามนจะประหลาดเยยงน

มนไมไดเปนไปตามแผนทวางไวเลย ความเรวของทมกขนๆลงๆ ม story ใหมเกด story เกาโยนทง

Page 133 of 220

Burn-Down chart ทาใหคณสามารถทราบไดถงเหตการณ๑เหลาน ถาลกคาตดสนใจทจะเพม scope โปรเจคคณกจะสามารถเหนผลกระทบไดทงททจะปรากฏบนวนสงงาน ถาทมกาลงทางานไดชาลง เพราะวาคณสญเสยคนสาคญของทมไปมนกจะแสดงใหเหนเลยวาความเรวของทมลดลงทนทเหมอนกน

Burn-Down chart สามารถบอกเรองราวตางๆผานตวเลขเทานน เมอมบางสงเกดขนกบBurn-Down chart มนสามารถชวยอานวยความสะดวกใหเราในการพดคยกบเจาของเงนลงทนของเราเกยวกบสงทเกดขนกบโปรเจคและผลกระทบทเกดจากการตดสนใจทาอะไรในโปรเจค

Burn-Down chart ของโปรเจคจะบอกถงสงทโปรเจดเปนอย นคอสวนททาใหแอลไจล๑ เปนโปรเจคแบบโปรงใส เราจะไมซอนหรอปดบงอะไรหรอปนแตงความจรงใหดสวยหร โดยปกตทเราจะรวว burn-down chart รวมกบลกคาของเรา เราจะสามารถกาหนดความคาดหวงไดอยางเปดและอยางซอตรง และยงแนใจไดวาทกคนเขาใจดกวาเมอไรทพวกเราคาดวางานจะเสรจสน

The Burn-Up Chart กราฟอกกราฟทไดรบความนยมไมแพ Burn-Down chart ซงมนกเปนแค Burn-Down chart กลบขาง

คนบางกลมชอบทจะใช Burn-Upสาเหตเพราะมนสามารถบอกไดทนทเมอม Story ใหมๆเขามา เสนคงทอยบนสดของกราฟ เมอมอะไรเพมขนใน scope มนกจะเหนไดในทนท ชวยใหตรวจสอบไดงาย เมอเวลาผานไป

ถาคณชอบทจะมองเหน scope งานในแบบ Burn-Up แตยงคงตองการความเรยบงายและคอนเซ๏ปของ Burn-Down กรวมทงสองอนมนเลย ดวยการหาผลรวมของงานทลดลงในแตละ iteration บนกราฟ Brun-Down ไปพรอมกบจานวนของงานทเหลออย

Page 134 of 220

กราฟBurn-Down หรอวา Burn-Up ทสดแลวกอยทตวคณ กแคตองแนใจวาคณมวธทงายๆ และสามารถดไดงายทจะใชในการคาดการณ๑ในเรองจานวนงานทเหลออยและวนทคาดวาจะเสรจงาน

8.6 เปลยนโปรเจคตางๆใหกลายมาเปนแอลไจล

มวธมากมายทจะเปลยนมาเปนแอลไจล๑แมวาโปรเจคของคณจะเรมไปแลวกตามสาเหตทคณตองคดวาจะทาแบบนกเพราะวา: a) อะไรกตามทคณเปนอยขณะนมนไมเวรค หรอไมก

b) คณตองการทจะเรมตนสงทเรวกวา

ถาปญหาของคณคอหนงในสงขางบน ใหเรมจากการสราง Inception deck (บทท 3, How to Get Everyone on the Bus)

คณอาจจะไมตองทาDeckทงหมดแตคณตองแนใจวาทกคนรวาสงเหลาน ● ทาไมพวกคณถงมาอยจะน ● อะไรทพวกคณพยายามทจะทาใหเสรจ

● ใครคอลกคาของคณ

● อะไรคอปญหา(หน)กอนใหญทพวกคณตองการแก

Page 135 of 220

● ใครเปนคนกาหนดภาพรวม

ถายงคงมขอสงสยเกยวกบเรองเหลานหรอวาคาถามอนๆทเกยวของกบ Inception deck, วธการเลนการ๑ด Inception deck ทเหมาะสม, การถามคาถามยากๆ และการเรมจดอะไรบางอยาง

ถาคณตองเลอนบางสงบางใหเรวขน โยนแผนงานปจจบนของคณทงซะ และสรางแผนงานใหม ทคณสามารถจะเชอถอได เหมอนกนกบทคณสรางแผนงานแบบแอลไจล๑ สรางลสต๑ของงาน กาหนดขนาดของงานแตละงาน กาหนดลาดบความสาคญของงาน และ สงมอบงานจานวนทนอยทสดของฟงก๑ชน เพอทใหไดผลลพธ๑ออกมา

ถาคณตองการทจะโชวว๑ใหเหนถงความคบหนาของงาน แตตองทางานภายใตขอบเขตของแผนงานเดม ใหเรมจะการสงชนงานทมคณคาในทกสปดาห๑ เลอกมาสกหนงหรอสองฟเจอร๑ทมคณคาในแตละสปดาห๑ และทามนใหเสรจสมบรณ๑ เมอคณไดแสดงใหเหนแลววา คณสามารถจดสงงานได (และไดเรยกความไววางใจคนกลบมาได) คอยๆปรบแกไขแผนดาเนนงาน และกาหนด release ทอยบนพนฐานความเรวของทม และจานวนของงานทยงคงเหลออย สดทายใหสงหมอบงานจนกวาคณไดสงทคณสามารถปดมนได ปรบปรงงานใหสอดคลองกบสงทคณเปน, กะตอรอลนในการปฏบตงาน และใชความรสกทเหมอนกบวาคณพดสงทมาขวางคณออกจากทางของคณ มาดกนวาอะไรทดเปนการฝกหดทแทจรงกน

8.7 ปฏบตจรง

เราไดผานเรองยากๆกนมาแลว คณรทฤษฏทงหมดแลวตอนน มาเรมนาทฤษฏมาปฏบตจรงๆกนดกวา และเผชญกบความทาทายทงสอยางทเราเคยเจอตอนเรมของบทนอกครง และลองดวา เราสามารถควบคมพวกมนไดอยางไรบางดวยการวางแผนดาเนนงานแบบใหม แบบแอลไจล๑

Scenario 1: ลกคารสกตววาอยากไดเพม

Page 136 of 220

เมอลกคาของคณพบวา มอะไรบางอยางทเขาอยากไดเพมเตมในซอฟต๑แวร๑ ใหถามพวกเขาวา พวกเขาอยากใหรบมอกบมนอยางไรในเรองน คณสามารถเลอนวนท release ออกไปกได (ซงคณกาลงจะบอกกบลกคาวา เราตองการเงนมากขนดวยสาหรบฟเจอร๑ใหมนนๆ) หรอไมคณสามารถเอาฟเจอร๑ทมความสาคญนอยกวา ออกจากลสต๑งาน (ซงแนะนาใหทาแบบน) อยาใชอารมณ๑ เมอคณตองเจรจาเรองเหลาน มนไมใชสทธของคณทจะเรยกรองใหทาหรอไมทาอะไร ตวคณเปนไดเพยงแคเครองมอสอสารวา อะไรเปนอะไร และจะเกดผลอะไรขน ดวยใจทเปนธรรมทสด (ไมบวกอารมณ๑ในคาตอบ) สงทคณตองรบผดชอบกคอ ทาใหพวกเขารสกถงผลกระทบ ของสงทพวกเขาตดสนใจทามนลงไป และใหขอมลพวกเขาใหมากทสด เพอทเปนองค๑ประกอบในการตดสนใจ

ถาลกคายงตองการทงหมดจรงๆ ใหสรางลสต๑ของฟเจอร๑ทมกจะดมาก(nice-to-have list) และตองบอกกบพวกเขาวา ถามเวลาพอทจะทามนเมอใกลจบโปรเจค ฟเจอร๑พวกนจะเปนฟเจอร๑แรกๆ ทคณจะจดการทามน แตบอกใหเคยร๑ดวยวา nice-to-

have ณ ขณะทคยกนอย พวกมนมสถานะคอ ไมทาและมนไมไดเปนสวนหนงของแกนหลกของแผนงาน

Scenario 2: คณไมสามารถไปไดเรวเทากบทคณคาดหวงเอาไว

Page 137 of 220

เวลาผานไป3-4 iterationแลวคณกพบวาความเรวทคาดไวกบความเปนจรงมนไมเปนไมอยางทคด อยาตกใจ เรารกนอยแลววามนเกดขนไดเรองแบบนนนเปนสาเหตทพวกเราตองกาหนดความคาดหวงรวมกน (กบลกคาดวย) พรอมทงบอกกบลกคาดวยวาอยาเชอแผนงานเรมตนใหมากนก ขาวดคอ เรารอยคราวๆแลววามนนาจะเกดขนได และสามารถปรบเปลยนสงตางๆไดเสมอตามความจาเปน การทเราวางscopeไวแบบยดหยนไดอยแลว นนคอการทเราเตรยมเครองมอ สาหรบเรยกความ สมดลของโปรเจคคนมาอยแลว คณอาจจะมองหาคนทามาเพม (ซงแรกๆมนจะทาใหคณชาลง) หรอวาขยบวนทจะสงงานออก (หรอทาทงสอบอยาง) สงสาคญทสดคอตองพดคยและเสนอทางเลอกใหกบลกคา ใชแลวมนอาจทาใหคณรสกอดอด แตคณไมสามารถทจะซอนสงเหลานไวได ขาวรายนแหละคอวถแหงแอลไจล๑ ตอนนเราเปรยบเหมอนไรสงปองกนใดๆทงสนเมอถงตอนนนมนจะเหนไดในทนทวาเรามเวลาเพยงพอใน การทาโปรเจคหรอไม ทางเดยวทจะทาใหพดออกมาไดอยางแนใจวา “มสงทเราตองทามากกวาเวลาทเราม” คอคณตองมาถงจดนนดวยความซอสตย๑ โปรงใส ทสด

วถแหงนกรบ Spartan

วถแหงSpartanตงอยบนหลกฐานเปนหลก ถาเราไมสามารถนาสง minimalist version of application ไดดวยเวลาและจานวนคนทเรามอย และดเหมอนวาแผนทเตรยมไวจะผดพลาด และตองการการเปลยนแปลงแลวละก

Page 138 of 220

กลไกในการทางานของมนกคอ: ใหนาเอาฟเจอร๑ทสาคญๆของโปรเจคของคณ (สงทเปนหวใจของระบบ ทจะเกยวของกบทกๆสวนของซอฟต๑แวร๑) และคานวนหาเวลาท จะใชทามนใหเสรจสนแบบไมเกยวกบสวนอนๆเลยออกมา, minimalistic version

of feature จากนนใหนาสงนนไปเทยบกนกบขนาดของ story ทมอยวาดวยเวลาและจานวนคนทมอย เปนไปไดไหมทจะทาให minimalistic version of applicationเสรจสนลงได ถาดๆแลววนทสงงานพอกบความตองก โอเคไปกนตอไดเลยบนวธน ถาดแลวมนทาจะแยๆ ไมพอแนๆ เยยมเลยอยางนอยกรตงแตตอนนละกนวาไมพอแนๆ

บนวถของSpartanนนอนญาตใหคณสามารถมการเจรจาเพอเปลยนแผนงานกนไดตามสภาพความแขงแรง และความสมบรณ๑ มนไมไดตงอยบนความปราถนา ไมมการใชอารมณ๑นาทาง มนเปนแคเพยงการเผชญหนา มนยอมดกวาแนๆทจะรวาจะเกดอะไรขนตงแตตอนนแทนทจะเปนหลงจากนและดวยขอมลเหลานคณและลกคาจะสามารถตดสนใจไดอยางถกตองวา ฟเจอร๑ไดทควรอยรวมกนกบวถ Spartan หรอวาอนไหนทตองการการนาลายและการขดอกนดหนอย แลวคณกจะสามารถรบจนแผนงาน โปรเจคเพอทสงงานทดๆได ทกสงขนอยกบวธทคณใชงานมน

Senario 3: คนในทมหายไปสกคน

Page 139 of 220

การรบมอกบผลกระทบเมอมคนทมคากบทมหายไปสกคนเปนเรองไมงายเลย คณกรวาคณจะเจอเขากบมนสกวนหนง มนเปนเรองยากวามนเจบปวดแคไหนทตองศนย๑เสยเขาไปเมอมนมาถงกาหนดความขาดหมายเรองงานเมอมการเปลยนแปลงภายในทมคณไมตองอาศยหลกการทางวชาการอะไรทงนน เดนเขาไปบอกลกคาของคณเลยวาโปรเจคของคณกาลงมปญหาแนๆ (เดาวาคณสามารถทามนได) และตองการมการเปลยนแปลงตววด และประเมนผลกระทบของความเรวของทมกนใหม (โดยมากใชเวลาประมา 2-3 iteration) คณจะเปนผทสามารบอกพวกเขาไดวาผลกระทบมมากนอยแคไหน

แนละหวหนาของคณอาจจะหนหนามาแลวบอกคณวาจะหาคนใหมมาให เขาจะจางคนใหมมาทดเทากน (หรอแมกระทงดกวา) คนเกามาใหแลวคณจะไมรสกเลยวาความเรวในการทางานของทมลดลง บางทอยาคาดหวงกบสงนนมากนก คนใหมอาจจะไมเหมาะกเปนได หรอเขาอาจจะมการตกตก ในขนตอนเขามาทางาน สมภาษณ๑ พรอม resume ขนเทพและการจบมอจบไม เชอในสงทคณเหนเทานน จนกวาจะถงตอนนนเราตองแกความสงสยตงเปาหมายรวมกนไปกอน

Scenario 4: โดนลดเวลา

Page 140 of 220

คาตอบทอยในหนงสอนคอใหกาหนด scope ในแบบทมนยดหยนได ถาคณลดเวลาลงครงหนง คณกตองลดจานวนของฟเจอร๑ลงครงหนงดวย มนเปนธรรมชาตมากอกคาตอบหนง (ไมไดอยในหนงสอ) แตอยางไงกดลองไปคยกบลกคาของคณดส และเสนอทางเลอกใหมๆทสรางสรรค๑ทจะชวยเขาซะบางทอาจจะมงานบางงานกไดทจะสามารถสงไดในแบบเปลอยๆ/Spartan หรอวาบางท หนารายงานแบบสเตตค20หนา อาจจะสามารถทดแทนดวยหนารายงานแบบไดนามดสกหนาหนงกเปนได การชวยใหพวกเขาหาทางออกไดทนเวลานนสงทตองการควบคกนไปดวยเพอใหดาเนนการไปไดนนคอ การสรางความสมพนธ๑ทดกบลกคาดวย คณตองถกมองจากลกคาวาสามารถใหคาแนะนาทไววางใจได และวธทจะทาอยางนนไดกคอการใหทางเลอกกบลกคาแตอยารบหรอยอมทาหรอตกลงในอะไรกตามทคญไมสามารถทามนได นนไมไดทาใหใครยนดหรอก การตดตอสอสารกนจะตองเปนแบบสองทาง ซอสตย๑เขาไว และบอกพวกเขาวาอะไรทมนกาลงจะเกดขน

ทานปรมจารย๑ตองการทจะพดคยกบคณทโรงฝกแอลไจล๑เพอทจะดวาคณไดเรยนรอะไรมาบาง

Page 141 of 220

ยนดตอนรบลกศษย๑ของขา ขาดใจมากทไดเหนเจายงคงมชวตอย เอาละขาจะพาเจาไปเผชญกบ โลกของความเปนจรงกนละ เหตการณ๑ทหนงในบรรดาศษย๑ไดไปรบประสบการณ๑จรงจากสมรภมมา Scenario(เรองมอยวา): ทกสงทกอยางหามเปลยนแปลงคงทตายตวนงๆตนๆหมดในโปรเจคน ไมสามารถเปลยนแปลงอะไรไดเลยสกอยาง

ปรมาจารย: นคอโปรเจคของหนวยขนาดใหญของรฐ และเพราะวามนใชเงนภาษของผเสยภาษ โปรเจคนจงตองโดนตรวจสอบ

อยางใกลชด และไมสามารถรบไดกบการเปลยนแปลงใดๆทงสน ซงหมายความวา scope, คาใชจาย และวนสงงาน ทกอยาง

ตองตายตวหมด โปรเจคนสามารถทจะนาแอลไจล๑ทใชในการประเมนและดาเนนงานไดหรอไม

ลกศษย: ถา scope, วนทสงงาน และงบประมาณ ทตายตว และพวกเขากไมสามารถ ทจะเปลยนแปลงแผนอะไรไดเลย ขากไม

เหนวธทแอลไจล๑จะสามารถนาไปใชงานไดเลย ทาอาจาย๑

Page 142 of 220

ปรมาจารย: เจาคดอยางนนร? เมอโปรเจคใดกตามทพยายามจะกานดให เวลา, งบประมาณ, scope และคณภาพตายตว ในไม

ชาพวกเขากจะพบวา การควบคมทง4อยางนอยางเครงครด ไมสามารถทาไดตลอดไปหรอก ตองมบางสงเปลยนแปลงเสมอ

เพราะการเปลยนแปลง จะปรากฎตวขนมาเสมอ พวกเขาเพยงแคตองเลอกวาพวกเขาตองการทจะซอนมนไวหรอแสดงมน

ออกมา

ลกศษย: แตจะทาอยางไรทจะสามารถแสดงถงความเปลยนแปลงนนออกมาได และเมอยงตองปฏบตตามคาสง ทวาหาม

เปลยนแปลงอกตางหาก

ปรมาจารย: นกคอททยอดนกรบจะตองใชประสบการณ๑และทกษะทงหมดของพวกเขา จะเปนอยางไรถาสรางททไวเกบ story

เกาๆทไมไดอยใน scope อกตอไปเพอเพยงพอกบการตดตาม และตรวจสอบยอนหลงไดวาการเปลยนแปลงอะไรบางทเกด

ขนกบโปรเจคน? สงนจะชวยใหพวกเขา ในความสามารถทจะตดตามเพอทจะแสดงถงความตางระหวางแผนเกาและแผนงานท

ดาเนนอย ในขณะทไมมการสญเสยของความสมบรณ๑ของแผนเดมเลย

ลกศษย: ทานอาจารย๑ ทานกาลงจะบอกวาไมวาพวกเขาจะชอบมนหรอไมกตาม แผนงานกจะมการเปลยนแปลงเสมอ

ปรมาจารย: ไห(ใช)

ลกศษย: และดวยการจดบนทกการเปลยนแปลงเหลานนเอาไว พวกเขาอาจจะมความสามารถ ทจะตอบโจทย๑ความตองการของ

คนตรวจสอบได ในขณะทกกาลงทาระบบทตอบโจทย๑ในสงทลกคา ของพวกเขาตองการไดพรอมๆกน

ปรมาจารย: แนนอน

ลกศษย: ขอบคณมากทานอาจารย๑ ขาจะตรกตรองใหมากวาน

Lesson(บทเรยนนสอนวา): ความเปลยนแปลงมอยในทกท บางครงเราแคตองการความคดสรางสรรค๑นดหนอยในการทเราจะ

แสดงมนและบรหารมน

What's next?

เอาละคณรอดมาไดจาก inception deck คณมทกษะของปรมาจารย๑ทงศาสตร๑และศษปในการประเมน story และคณกเรยนรท

จะนามนรวมกนแลวสรางแผนงานในแบบแอลไจล๑อกตอนนคณพรอมแลวทจะกาวออกไปผจญกบการปฏบตงานโปรเจคใน

รปแบบแอลไจล๑ ในขนตอนตอไปคณจะไดเรยนรวาจะเปลยนให iteration และแผนงานดๆ กลายมาเปนความจรงไดอยางไร --

working, test ซอฟต๑แวร๑ทพรอมใชงานและทงหมดจะเกดขนไดอยางทไมทนไดตงตวเลยดวยซา

Page 143 of 220

ตอนท 9 การจดการ iteration

ท าใหมนเกดนะ!

ยนดตอนรบสสวนท 4 ทเรยกวา Agile Project execution หรอ การดาเนนการโปรเจคแบบแอจไจล๑ ถงขนตอนนเราจะนาแผน

ทเราวางไวทงหมดในสวนท 2 และ 3 มาใช และจบมนแปลงใหเปนสงทลกคานาไปใชงานตอได คอ ซอฟท๑แวร๑นนเอง ในบทนจะ

มการพดถงสงทเรยกวา iteration เราจะพาคณไปดเบองหลงและแสดงใหคณเหนกนแบบจะๆ วา โปรเจคแอจไจล๑สาเรจไดดวย

พลงของ iteration !!! และจากนน ในตอนท 10 เรองการสรางแผนงานตดตอสอสารแบบแอจไจล๑ ในหนา 179 คณจะไดเหน

ตวอยางวา iteration ในแอจไจล๑ทางานไดอยางไร การประชมในแบบตางๆ และการทาใหพอยท๑ในทมแอจไจล๑สอดคลองกน

เพอใหทกอยางดาเนนไปขางหนา และในตอนท 11 เรองการสรางพนททางานแบบเสมอน ในหนา 91 คณจะคนพบวา ทาไมการ

เปลยนแปลงสงเลกๆนอยๆ ในพนททางานจะทาใหงานมนชดเจนมากขน

9.1 ท าอยางไรจงจะสามารถสงงานทมคณคาแกลกคาไดในทกๆสปดาห ?

อม..คณมแผนแลวสนะ คณรมยวาทาไมคณมาอยตรงนแลว? เพราะคณพรอมทจะดาเนนการแลวนะส! แลวงยตอ? คณจะทา

ยงงยในการทจะแปลงการ๑ดตางๆ ทมคาอยไมกคา ใหกลายเปนสงทพรอม สาหรบการเปน software?

เอาละ ขนแรก คณไมมเวลาทจะเขยนทกอยางออกมาใหหมดหรอก คณตองการแนวทางททาใหเกดการวเคราะห๑ ทไมเยอะ

จนเกนไปทาเทาทจาเปนมความถกตองและใหในสงทคณตองการได แค ณ เวลาทคณตองการเทานน

Page 144 of 220

ขนทสอง ทกษะการพฒนาซอฟท๑แวร๑ของคณตองอยในระดบเทพ คณไมมเวลาทจะกลบไปยงโคดเดม และแกบกทเกด มนควรจะ

ทางานไดอยางด ซงหมายถงมดไซน๑ทด มการเทสมาอยางด และรวมกนกบโคดทอยในโปรเจคไดอยางด (ไมใชวาอยทเครองคน

เขยนแลวทางานไดไมมบก แตพอไปรวมกบโคดอนแลวพง)

ขนทสาม การเทสของคณควรจะไปควบคกบการพฒนา คณไมสามารถรอจนโปรเจคจบ แลวคอยดวาทกอยางทาไดจรงหรอเปลา? คณตองดแลสขภาพและความถกตองของโปรเจคตงแตวนแรกเลย

ถาคณทาทงสามอยางนได คณกสามารถทจะสรางบางอยางทมประโยชน๑ในแตละสปดาห๑ไดแลว! และอกสงหนงทดคอ แบบแผน

ในการทาแบบดงกลาวนนเพอการทางานแบบ iteration อกดวย

9.2 iteration ในแอจไจล

จนถงตอนนแลวคณเรมมไอเดยแลววา iteration ในแอจไจล๑จะหนาตาเปนอยางไร มนคอกลองของชวงเวลาในการพฒนา

ซอฟท๑แวร๑ (อาจจะเปน 1 หรอ 2 สปดาห๑ตอกลอง) ทเราจะเอาสตอรทอยดานบน (หมายถงเรยงตามความสาคญ) มาแปลงให

เปนซอฟท๑แวร๑ททางานได

Page 145 of 220

มนเปนเครองมอของคณทชวยใหทางานในโปรเจคแบบแอจไจล๑ไดสาเรจ เปาหมายคอการสรางบางอยางทมคาตลอดเวลาทเรา

แปลงมนเปนซอฟท๑แวร๑ นนหมายความวาอะไรกตามทคณสรางเพอใหมนทางานได มนจะตองเปนสงทถกทดสอบในระหวาง

iteration ดวย (กเพราะตองแนใจวาทางานไดงย)

iteration ยงเปดโอกาสใหเราสามารถปรบเปลยนลาดบการทางาน เมอเกดความจาเปนไดดวย ถาลาดบความสาคญของงาน

เรามนเปลยนไป หรอวาเกดสงทเราไมคาดหวง เราสามารถปรบเปลยนลาดบของสงทจะทาในอนาคตไดในตอนจบ iteration

โดยปกตเราจะไมเปลยนสตอรกลาง iteration (เพราะมนจะกระทบกบทมมากเกนไป) แตสงทคณกาลงจะเหนใน ตอนท 10

เรองการสรางแผนงานการตดตอแบบแอจไจล๑ คณจะพบวาโอกาสในการเปลยนแปลงเปาหมายของโปรเจคมนเกดขนได ถาคณ

อยากใหมนเกด

เราคยกนพอแลว ทางทดทสด ไปดกนดกวาวา iteration ทางานอยางไร เพอเหนพฤตกรรม ตอนนเราเอา user story มาดกน

เถอะ วาจะเอามาแปลงเปน product ทพรอมใชงานไดอยางไร

Page 146 of 220

9.3 ชวยดวยยยย !!!

ชวยดวย วนเรมของโปรเจคการกอสราง BigCo เพงถกเลอนขนมาอก 1 เดอน และเคลล เพอนทแสนดของเรา ตองการเวบไซต๑ท

ใหผทาสญญาสามารถเขาไปสรางใบอนญาตความปลอดภยสาหรบการกอสรางได

เราไมมเวลาสรางเวบไซต๑ใหเสรจทงอน ภายใน iteration เดยวอยางแนนอน แตคณเคลลของเรากจะดใจมาก หากเราสามารถ

สงงาน 2 สตอรนใหเคาไดในอก 2 สปดาห๑ถดไป

เพอทาใหมนเกด เราม 3 ขนตอนทตองดาเนนการกบสตอรแตละอนในการทจะแปลงมนเปนซอฟท๑แวร๑

1.วเคราะห๑และออกแบบ (ทาใหงานมนพรอมจะดาเนนการ)

2.การพฒนา (ลงมอทางาน)

3.การทดสอบ (ตรวจสอบงาน)

มาดกนใกลๆ วามอะไรเกดขนบางในแตละขนตอน

Page 147 of 220

9.4 ขนทหนง: การวเคราะหและออกแบบ: ท าใหงานมนพรอมจะด าเนนการ

มอย 2 สงสาคญในการวเคราะห๑แบบแอจไจล๑ คอ just-enough (ทาเทาทใช) และ just-in-time (ทาในตอนทใช-เผาเอา) โดย

การวเคราะห๑แบบ Just-enough การทาอยางไรกไดทใหเกดความพรอมทจะทางาน โดยท “ไมมาก และ ไมนอย” จนเกนไป

สาหรบทมเลกๆ ททางานรวมกน และอยกบลกคาอยางใกลชด ไมจาเปนตองสรางเอกสารอยางเปนทางการ แคมการ๑ดและการ

สนทนา (ทมการอธบายดวยไดอะแกรมและรปภาพทด) กเพยงพอแลว สาหรบทมขนาดกลางทอาจจะกระจายกนออกไป (แตยง

เดนไปมาหาสกนได) อาจจะตองทาอะไรมากขนอกนด หากมสกหนาหนง ทมคาอธบายสนๆ มการแบงงานออกเปน task และม

รายการของเงอนไขการทดสอบ กอาจจะเหมาะสมกบทมมากขน

Page 148 of 220

สาหรบโปรเจคขนาดใหญ ทมทมกระจายอยตามทตางๆ เชน ชคาโก ลอนดอน สงคโปร๑ กตองทาบางอยางมากขนไปอกเพอให

ทกๆ คน ยงคงอยบนพนฐานความคดเดยวกน เพอใหไปยงเปาหมายทถกตอง ประเดนคอ จรงๆ แลว ไมสามารถบอกไดวาอยาง

แนชด การวเคราะห๑ระดบไหนทถกตองเหมาะสม ในแบบแอจไจล๑ มนขนอยกบวามนเขากนไดกบคณและโปรเจคหรอเปลา? คณ

จะใสนาหนกใหมนในตอนหลงกไดถาคณตองการ แตการแบกของทไมสาคญไปดวย มนจะยงทาใหคณเดนชาลง ดงนนตอนน

เรมตนแบบงายๆ เบาๆ แลวคอยเพมนาหนกเมอคณตองการจะดกวาและอกแกนหลกหนงของการวเคราะห๑แบบแอจไจล๑ คอ

just-in-time (ทาในตอนทใช-เผาเอา)

การวเคราะห๑แบบ just-in-time คอการทเราวเคราะห๑ลงไปในระดบลกของสตอรเฉพาะตอนทเราตองการใชมน (ปกตจะทาการวเคราะห๑ story ของ iteration ถดไปหนง iteration เสมอไมเยอะกวานน แนวๆตาขาวสารกรอกหมอ)

Page 149 of 220

เพราะเราไมรหรอกวาโลกจะเปลยนไปอยางไรในหนงเดอนขางหนาน ทกอยางเปลยนแปลงได ดงนน การวงอยางเตมฝเทาและพยายามทจะทาใหทกอยางถกตองตงแตตน มนจะจบดวยการผลตขยะจานวนมาก เสยเวลาและเหนอยสลดดด แทนทเราจะทาแบบนน เราควรจะหยดการวเคราะห๑สตอรแบบลกๆ ไวกอน จนกวาทเราจะตองการมนอกครงกคอยมาวเคราะห๑มน

การทาแบบน ทาใหแนใจวา:

การวเคราะห๑แบบละเอยดจะถกทาโดยมขอมลทใหมลาสดใชประกอบในการทางาน

คณและลกคาใหโอกาสตวเองในการเรยนรสงทกาลงจะเกดขน

คณหลกเลยงทจะตองทางานซาอกครง

ถาสงทคณทามนซบซอนมากและตองการเวลาทมากขนกใหทาไป ทาอะไรกไดททาใหงานมนพรอมทจะดาเนนการ แคอยาเดนไปใหไกลเกนไปแลวจบดวยการทคณตองทงทกอยางเพราะมนมอะไรเยอะเกนไปทตองเปลยนแปลงดงนน เราควรใชอะไรนาเสนอการวเคราะห๑สตอร เชน “สรางใบอนญาตงาน” ?

โฟลวชาร๑ทเปนสงทดทสดเพราะมนมองงาย ทาไดแนนอน มนแสดงใหเหนการทางานของระบบ แสดงใหเหนขนตอนทคนตองการ

จะดาเนนการหรอถาตองการรายละเอยดมากขนกสามารถเขยนคาอธบายประกอบลงไปกได เพอเนนสงทตองการในมมมองของ

การหมนเวยนของกระบวนการแลวเรากจะไดความเขาใจมากขนวาใครจะเปนผใชระบบน และรวาตองทาอะไรกบสงทเรยกวา

personas

Page 150 of 220

Administrator ตองการมสทธทจะเพมและลบผใชออกจากระบบใชงานคอมพวเตอร๑ไดอยางสบาย เปนคนททางาน office ดาเนนการงาน

Requestor ผจดการหรอวศวกรรมกอสรางผทจะขอใบอนญาตทางานใหกบลกจางของตวเอง เปนคนทรรายละเอยดงานรบผดชอบทในการรองขอใบอนญาตตามเวลาทกาหนด

Approver ผปฏบตการดานความปลอดภย รบผดชอบเรองความปลอดภยทกๆ อยางในงาน เปนคนเซนอนญาตในใบอนญาตงานกอนจะนาสงถาคนนเซนกแสดงวาใบอนญาตนถกตองสมบรณ๑

Personas คอสงทใชอธบายความแตกตางของคนในแตละบทบาทของการใชซอฟท๑แวร๑ ซงชวยใหระบบเปนไปตามลกษณะการ

ใชของคนเหลานดวย คนเหลานเปนผทใชระบบจรง เจอปญหาจรง และการเขาใจวาพวกเคามาจากไหน เปนอยางไร จะทาใหเรา

สรางระบบทตอบสนองความตองการไดอยางแทจรง ดงนนในเวลาทออกแบบระบบจรง โลกนกเปนแคเรองหอยๆ ของเราละ

แทนทจะตองไปลงแรงกบดไซน๑ทตองคดหวแทบแตก (ไอแบบทเคยเหนในทองตลาด แบบทเราคดอยในหววาซบซอนนนแหละ)

เรากสรางโปรโตไทปขนมาอยางรวดเรว สรางหลายๆ อนทลกษณะแตกตางกนออกไป (กตามผใช) แถมราคาถกอกดวย

Page 151 of 220

สงทดในการทจะใหทมทางานรวมกนไดบนกระดาษ คอ คณมกจะไดผลงานทดกวาเสมอ ดกวาการทใหแตละคนไปทาอยคนเดยวแลว (เพราะทาคนเดยวกไมไดคยกบใคร คดไปเองซะเยอะ)

เมอคณทางานดไซน๑เรยบรอยแลว คราวนกนงคยกบลกคาและเขยนออกมาเปนเงอนไขการทดสอบไดละ ซง ณ ตอนน เราควรจะตองโคตรจะกระจางแจงเกยวกบสตอรนนไดละ

สงนเปนททคณนงคยกบลกคาแลวถามเคาวา เราจะรไดงยวาไอสงนมนจะทางานได?

คณอยากจะลงรายละเอยดเยอะๆ หรอวานอยๆ กแลวแตคณตองการ คณสามารถเรมจากระดบบนๆกอน และทาใหแนใจวาทมเขาใจงานชนหลกๆ ทตองทางานไดเพอใหระบบสาเรจ

Page 152 of 220

What About Pair Programming? Few agile/XP practices have attracted more attention and controversy than this one.Pair programming is the act

of two programmers sitting down at one computer and worki ng together on a story.Seeing two val uabl e

resources sitting down at one computer would understandably make any manager nervous. They think

their team’s productivity has just been halved, and that would be true if programming were merely typing.

But it’s not. And one good idea or innovation can often save teams a ton of work and rework later. With pairing

you spread val uabl e knowledge and practices throughout the team, you catch more bugs early, and you increase

code quality by having two people reviewing every line of code. It’s not for everyone, and you have to respect

how people work. But if your team is open to pairing (this applies to analysis and testing too), it can often more

than pay for itself in return.

การทางานแบบ Pair Programming กคอการทเรานาเอาโปรแกรมเมอร๑สองคนมานงทางานดวยกน ชวยกนสราง

โคดสาหรบ Story เดยวกน

หรอวา ถาสตอรของคณมนไปในทางเทคนคและมเงอนไขรายละเอยดทางดานธรกจเยอะ คณอาจจะตองใชเวลามากขนและเขยนมนออกมา (และอาจจะดกวาถาคณเขยนมนออกมาในรปแบบทจะทดสอบไดในอนาคต) มเทคนคหรอเครองมออนๆ อกมยทชวยในการวเคราะห๑? แนนอนอยแวว ม storyboards, concurrency diagrams, process

maps, wireframes, และเครองมอวเคราะห๑ทมประโยชน๑ชนอนๆ ทเปนทรจก (อยากรอกกตามไปด สวนท 6.4 How to Host a

Story-Gathering Workshop, on page 108) จาไววา เราไมสามารถไปโรงเรยนเพอใหมคนสอนวา ของพวกนทาไดอยางไร เราตองจนตนาการดวยตวเอง มนบอกไมไดวาอนไหนถก อนไหนผด โอ๏ะ และถาคณสงสยวาเกดอะไรขนกบสตอรทเกยวกบการปรนท๑ มนอาจจะแปลไปในทางทวาเราไมตองการมนแลว การปรนท๑ใบอนญาตผานบราวเซอร๑อาจจะดเพยงพอแลวสาหรบรลสแรก ดงนนเราจงตดมนไปกอน ดจรง เราไมตองเสยเวลากบการวเคราะห๑มนแลว

เมอการวเคราะห๑ของเราเสรจสนแลว กถงเวลาเรมตนทางานซะท

9.5 ขนทสอง: การพฒนา: การด าเนนงาน

ตอนน เรานาเอาการวเคราะห๑ (ททาเฉพาะตอนทใช) และแปลงมนใหเปนทอง หรอในสถานการณ๑นคอ ใหมนเปนซอฟท๑แวร๑ททางานไดจรง

Page 153 of 220

ตอนนการทาซอฟท๑แวร๑ทใชงานได หรอทาทองขนมานนมน ไมไดมาแบบฟรๆ มนตองใชพลงงานอยางหนก มระเบยบวนยอยางยง และตองโคตรเทคนคระดบเทพ ตวอยางเชน ในแอจไจล๑โปรเจคมบางสงทเราตองทา

เราตองเขยน automated tests

เราตองปรบปรงดไซนอยางตอเนอง

เราตอง integrate code ทเขยนเขากบ production อยางตอเนอง

เราตองแนใจวา code เขากบภาษาทลกคาใชเวลาทพวกเคาพดถงระบบ

เราไมมเวลาหรอชองวางทจะครอบคลมถงวธการทางวศวกรรมซอฟท๑แวร๑ทดทสดหรอกตอนน แตเราจะครอบคลมถงสงทเรยกวา non-negotiables (หรอสงท หากเราไมม เราอาจจะตายได เพราะโดนลกคาฆาปาดคอ)ในบทถดไป เชน Chapter 12, Unit

Testing: Knowing It Wor ks, on page 203; Chapter 13, Refactoring: Paying DownYo ur Technical Debt,on

page 213; Chapter 14, Test-Driven Development, on page 225; as well as Chapter 15, Continuous

Integration: Making It Production-Ready, on

page 236 เราจะครอบคลมรายละเอยดเรองการรแฟคเตอร๑ TDD และการอนทเกรตโคดอยางตอเนอง และแสดงใหดวาสงเหลานเปนสวนทาใหเกดซอฟท๑แวร๑ทพรอมใชงานไดอยางไร

แตตอนนกเพยงแคเขาใจไววา ไมมเวทมนต๑แอจไจล๑ทไหนหรอก จรงๆ มนกมแคเรองพนฐานทหนกแนนทางวศวกรรมซอฟท๑แวร๑ทอยเบองหลงทกอยางนนเอง ตอนนไปด iteration พเศษสาหรบโปรเจคคณกนดกวา คอ iteration แรก นนเอง (หรอบางคนเรยกวา iteration 0)

ทาทกอยางใหพรอมท iteration 0

มนกขนกบวาคณจะมองมนยงงย แตจรงๆ iteration 0 คอ iteration เรมแรก หรอเปน iteration กอนทจะเรมออกตวจรงมนเกยวกบการ setup นนเองถาเราอยกลางโปรเจค เรากแคขบเคลอนมนไปตามปกต แลวกเรมทางานกบสตอรทไดรบ แตถาเราสรางโปรเจคใหม มนกตองมบางอยางทโดนเตรยมพรอมเอาไวกอนทเราจะเรมทางานจรง มนกเลยถกเรยกวา iteration 0

Page 154 of 220

Iteration 0 เหมอนกบการสรางบานตามคาสง มนเกยวกบการเตรยมทกสง เชน version control, automated build, สราง development และ test environment (หรอวา production environment ดวย ถาทาได) เพอใหเราสามารถ deploy

software ลงไปไดแตถาคณอยากจะโชว๑เทพแลว กลองขามไปทาสตอรอน (อะไรกไดททาใหคณไดทาตงแตเรมจนไปถงการเทส)เมองานทตองพฒนาทงหมดเสรจเรยบรอยแลว เรากเกอบถงเสนชยละ สงทตองถดไปคอ ตรวจสอบงานทงหมดททาไป

9.6 ขนทสาม: ทดสอบ: ตรวจสอบงานทท า

ตอนนมนคงจะเจอนมากถาเราทาทกอยางมากขนาดนแลวดนลมทจะลองดวา สงททามนเวร๑กจรงๆ การตรวจสอบงานคอ การทเราทาใหแนใจวาเราจะสามารถสดหายใจไดอยางเตมปอด เวลาทลกคากาลงทดสอบงานของเรา

XP เรยกสงเหลานวา เปน collective code ownership และมนกเปนอกแนวทางทแอจไจล๑โปรเจคใชในการชวยสอสาร เกยวกบสถาปตยกรรมและมาตรฐานการเขยนโคดภายในโปรเจค

Page 155 of 220

การนาเสนอซอฟท๑แวร๑ใหลกคาโดยการทาไปตามขนตอนของเงอนไขการทดสอบ ( test criteria) กเปนอกทางเลอกทนาสนใจ แตจรงๆ มนจะดกวานน ถาใหลกคา ปนคนเลนเดโมซะเองแลวเรากนงดานหลงเพอดวา ลกคาใชซอฟท๑แวร๑ของเรายงงย ตอนนเรารละวาคณกาลงคด(บา)อะไร เราลงมอทาเทสท๑กนซะยบและดวยทกเทสทเรามในโปรเจคแบบแอจไจล๑ เรายงตองการ User

acceptance test (UAT) ตอนท production รเปลานะ? คาตอบคอ ใช เหตผลมนกคอวา... เปาหมายของคณในฐานะผพฒนา(คอใครกอไดในทมพฒนา) คอการทาให UAT มนเกดไดอยางปกตนนคอ ถาคณทาการทดสอบด ใหฟดแบคแกลกคาในตอนทสงงาน นนคอสงท UAT ทาทงสน ผคนสวนใหญมกจะตดอยกบ การตามหาความผดพลาดของระบบ

บางทมกมคณภาพไปถงขนดงกลาวตงแตครงแรก (แตหลายทมกไมเลย) ดงนน คาแนะนาผเขยนคอการให UAT มนอยรอบๆ จนกวาเราจะเราจะพสจน๑ใหทกคนเหนวา คณและทมเขยนโปรแกรมทมคณภาพไดเปนปกต การทา UAT แบบเตมทจงไมจาเปน

และแนนอน มนมแนวทางของแอจไจล๑ทเหมาะสม ซงเรยกวา Kanban

9.7 Kanban

Kanban เปน card-based signaling system (ระบบการใหสญญาณดวยการใชการ๑ด) ของโตโยตา ทถกพฒนาขนเพอเปนกระบวนการเตมเตมชนสวนในสายการผลต มนคลายๆ กบสตอรบอร๑ดของเรา แตมความแตกตางกนเลกนอย

Page 156 of 220

งานของ Kanban

จะถกจากดดวยคอนเซปต๑ทเรยกกวา work in progress (WIP) โดยจะอนญาตใหทมทางาน ในจานวนชนทจากดในขณะเวลาใดเวลาหนง

ตวอยางเชน ถาทมสามารถควบคมสงของได 4 อยางในครงเดยว WIP ของทมกจะเปน 4 สวนอยางอนทจะตองทาใหเสรจกจะถกโยนออกไท back burner แลวกจดลาดบความสาคญ แลวทมกจะไปทามนเมอตองทา สงอนทแตกตางออกไปอกคอ Kanban ไมตองการการทางานแบบ iteration เราสามารถสามารถเลอกสงทสาคญเพอเอามาทาถดไป ไดงายๆ จากลสต๑ทเราม

Page 157 of 220

แลวดงมนเขามาเวลาททมพรอม เปาหมายของ Kanban คอ flow เราตองการใหม flow ของสงตางๆ บนบอร๑ดใหเรวทสดเทาทจะเปนไปได โดยการทาเฉพาะเพยงสงเลกๆ นอยๆ ในหนงครง ประโยชน๑บางอยางของการทางานลกษณะนคอ

● เราไมตองมความเครยดเกยวกบ iteration

○ ถาเราแยกแยะระหวางการปฏบตการและการทางานโครงการ เราจะไมมวนเครยดเกยวกบการถก interrupt ระหวางททางานใน iteration เพราะมนไมม iteration เราสามารถทางานไดงายๆ โดยการเลอกชนงานถดไปทจะทาเมอคณพรอมทจะทาและไมตองรเซตเปาหมายของ iteration เวลาทเราเลอกทางานใหม ● เราไมถกจากดใหทางานทตองทาใหเสรจภายใน iteration

○ แมวามนจะเปนไอเดยทดในการแยกของชนใหญใหออกมาเปนชนเลกๆ แตมนกอาจะมบางเวลาทสงของบางอยางมนใหญจรงๆ และเรากตองการเวลาประมาณ 2 สปดาห๑ในการทาใหมนเสรจ

● เปนทางเลอกทดในการใชเพอ manage expectation (จดการความคาดหวง) ○ ทมสวนใหญยงทาการ estimation หรออยางนอยกจดขนาดของงานในบอร๑ด kanban ตามขนาดทสมพนธ๑กน (อยางนอย มนกตองทา ถาเราอยากจะตงความคาดหวงในการทคณอยากจะทางานบางอยางใหเสรจ) แตมนกยงมความเรยบงายทเหนไดชดใน Kanban มนเหมอนกบ “เฮ สดหลอ เรากาลงทางานหนกมาก เราอยากใหคณทางานใหเสรจ แตเราสามารถทางานไดแค 4 อยางในแตละครง” มนไมมพอยท๑ ไมมการตองอธบาย estimation แคเปนการนบงายๆ เราสามารถจดการอะไรมากๆ ไดในแตละครง ทงหมดฟงดแลวบามาก เพราะวาเราเพงพดไปหยกๆ ในหนงสอเกอบทงเลม วาการทาเปน iteration มนดยงงย - -” เฮอ.. โปรดทาใจใหสบาย..

iteration ของแอจไจล๑มนมอนภาพมาก และถาเรากาลงทาโครงการทเปนโปรเจค และมเงอนไขในหลายอยาง เชน เวลา และเงน ในทกวนนในโลกของอตสาหกรรมทมการตงงบประมาณ การใช iteration ยงคงจาเปนอย แตแอจไจล๑กเปนมากกวาแค iteration การเปนแอจไจล๑หมายความถงการทางานอะไรกไดใหคณ ถาการทางานแบบไมม iteration มนดกบคณมากกวา กทามนไปแบบนนแหละ Kanban มนกดกบงานทเกยวกบทมปฏบตการ ทมสนบสนน (support team) ทตองการตอบสนองใหรวดเรวและไมตองการความฟมเฟอยในการทางานแบบ iteration ทมการจากดความยาวของเวลา

คาแนะนาผเขยน คอ คณเพงเรมตนและทางานเปนลกษณะโครงการ คณจะชอบแนวทางและความแมนยาทไดมากจากการซอฟท๑แวร๑ ทไดสงมอบใหลกคาเปนระยะในทกสปดาห๑ ใหคณเลอกใช การยดมนการการทางานแบบ iteration ทกาหนดความยาวถาคณทางานแบบเปนงานปฏบตการ งาน support ใหลองใช Kanban หลกการกเกอบจะคลายกน การดาเนนงานไปตะหากทแตกตางกนเลกนอย

เพอเรยนร Kanban ลาสดและดทสด ใหลองเชคดทเวบไซต๑น http://finance.groups.yahoo.com/group/kanbandev/messages

ตอนนคณพรอมทจะเรยนรกบทานเจาสานกแลว

ทานเจาสานกกบนกรบเจาผทะเยอทะยาน

Page 158 of 220

นกเรยน: อาจารย๑ฮะ ผมกาลงทางานเกยวกบโครงการคลงขอมลอะฮะ และเรากตองผลตรายงานดานการเงนสาหรบผบรหารระดบสง มนไมมทางไหนเลยฮะทเราจะผลตบางอยางทมคา ในแตละสปดาห๑ได แคไอคลงขอมลอยางเดยวกกนเวลาผมไปอยางนอยเดอนนงแลวฮะทจะตดตง ผมจะจดการ iteration ของผมยงงยละ ฮะๆๆๆๆๆ ทานอาจ๏านนนนน - -”

ทานอาจารย๑: เทคนคในการสงมอบบางอยางทมคานน ใหโฟกสไปท สงททางานไดเลกๆ ทผใชใชงานไดใน application แทนทจะสรางคลงขอมลอยางเดยวในเวลาทงหมด กแยกสวนเลกๆ ของรายงาน และสรางเฉพาะโครงสรางของรายงานเลกๆ นน

นกเรยน: แตยงงยกตามหลงจากนนอะฮะ เรากตองรนบางอยางทใหญๆ แลวเรากยงเอามนมาใสใน iteration เดยวไมไดอยด นฮะ (??? ง๏ง งง งงงง) ทาอาจารย๑: ถามนไมพอ มนกจะไมพอนนแหละ! กใชจานวน iteration เทาทตองการในการสรางโครงสรางพวกนนแลวกดาเนนงานตอไป แตแคจาเอาไววาเราตองการใหลกคาตกลงตามน และบอกพวกเขาวาเราจะหายตวไป 3 เดอนตอนทพวกเจากาลงตดตงซงทาใหพวกเขาไมตองรอ และมนกดกวาหากเจาหาทางทจะสงมอบบางอยางเลกๆ ในแตละ iteration หลงจากนนได นกเรยน: ขอบคณฮะทานอาจารย๑ ผมจะคดเรองนใหมากขนสกหนอยฮะ

ตอไปมอะไร?

ตอนนคณมละ วเคราะห๑ พฒนา ทดสอบ ทกบทบาทททาใหสงมอบบางอยางทมคาในทกสปดาห๑ได จาไววา มนไมไดมทางเดยวในการทาสงน และวธการทางานของคณกอาจจะเปลยนไปในแตละโครงการ ดงนนไมตองกลวทจะทดลองและพยายามในสงทแตกตาง :) ดวยทกสงทกอยางเบองหลงเรานน เราพรอมละทจะดวา แอจไจล๑ทมเคาตดตอสอสารและรวมงานกนในทกกจกรรม ทเกดขนพรอมๆกน นอยางไรในแตละ iteration มาดกนเถอะวา แผนการตดตอสอสารในแบบแอจไจล๑ ทาไดอยางไร

….. (จบบทแวว ครๆ)

Page 159 of 220

ตอนท 10: การสรางแผนการ

สอสารแบบแอจไจล

นอกเหนอจากการแนะนาใหรวมทกคนในทมแอจไจล๑ไวในสถานทเดยวกน ใหทางานอยดวยกนแบบตวเปนๆ และโชว๑เดโม

ซอฟท๑แวร๑ใหลกคาดอยางสมาเสมอแลวนน แอจไจล๑แทบจะไมใหแนวทางอะไรอกเลยในการจดการงานใน iteration หนงๆ มน

ขนอยกบคณและทมของคณวาอยากจะจดแจง สอสาร รบคาเสนอแนะ และทาใหทกสงมนเขาทายงไง

ในบทน คณจะไดคนพบวาสงทขาดไมไดเลยในแผนการสอสารแบบแอจไจล๑คออะไร คณจะทาใหมนเหมาะกบคณและทมของ

คณยงไง และเมอจบบทน นอกจากคณจะไดแผนการสอสารของคณเองแลว คณจะเรมรสกไดถงทวงทานองและพธกรรมอน

ศกดสทธเพอใหไดมาซงผลตผลอนมคณคาตอโปรเจคของคณอยตลอดเวลา

10.1 สอยางทจะตองท าใน Iteration ใดๆ

ในโปรเจคแบบแอจไจล๑ใดๆกตาม สองสงทไมเคยเปลยนแปลงเลยคอการสรางความคาดหวง (ตงเปา) และการเกบ feedback

การตงเปาเพอสรางความคาดหวงอยางสมาเสมอมนจาเปนกเพราะหลายๆสงมนเปลยนแปลงอยตลอดเวลา คณจาเปนทจะตองสรางนสยทดในการตองพบปะกบลกคาของคณอยบอยๆ เพอใหเคาเหนวาตอนนสถานะของโปรเจคคณเปนอยางไร และเพราะเรองงายๆอยางการสงมอบซอฟท๑แวร๑ใหถงมอลกคาคณจะนาพามาซงการเปลยแปลงของ requirement คณกจะตองอยากใหวงวนของการใหและการไดรบ feedback นเกดขนอยางสมาเสมอ เพอทคณจะไดไปถงเปาหมายทถกตอง ไมนอกลนอกทาง

และในวงวนนน สอยางทคณจะตองการเพอใหพธการศกดสทธของคณเกดขนไดอยางสมาเสมอในแตละ iteration คอ

1. การเตรยมงานสาหรบ iteration ตอไปใหพรอม (การตรวจความพรอมของงาน - Story Planning Meeting)

2. การเกบ feedback ของงานใน iteration ทผานมา (การนาเสนอผลงาน - Showcase)

Page 160 of 220

3. การวางแผนงานสาหรบ iteration ตอไป (การวางแผน iteration - Iteration Planning Meeting)

4. การพยายามหาจดทตองปรบปรงอยตลอดเวลา (mini-retrospective)

งนกอมาเรมจากการพยายามเตรยมงานสาหรบ iteration หนาใหพรอมกนเถอะ

10.2 The Story Planning Meeting การประชมเพอวเคราะหเนองาน

นคอการจดจดตรวจเพอดความพรอมของตวงานแบบทนเวลาพอด ในการประชมน เราจะไลยาความเขาใจในตวเนองาน (exit

criteria) ระหวางเรากบลกคาวาตรงกน ทบทวน estimate กบนกพฒนา เพอเปนการใหแนใจวาทกคนไดทาการบานและเตรยมความพรอมกอนการเรมงานใน iteration หนามาด

ยงไงใครมนกอตองมพลาดกนบาง - เพราะฉะนน อยาไดกลว

ผมไดเคยพฒนาระบบการพมพ๑ใหกบโปรเจคกอสรางอนหนง และผมกอไดเดนทางสายเดยวกนกบนกรบแหงเมองสปาตาร๑ (นนคอการทาใหมนทางานได โดยไมใสใจในรายละเอยด) ทนททผมสาธตมนใหกบลกคาด ผมรทนทวาพวกเคาไมชอบ

คณลกคากอสภาพเกนไปทจะพดทอะไรทมแทงใจผมออกมา แตผมเองกอรตวดวา นไมใชงานทดทสดของผม ถงจดนน ผมกอไดแตกลากลนฝนทน และขอโอกาสเคาใหผมแกตวอกท ซงพวกเขากอยนยอม

ถาผมไมไดทางานสงพวกเขาอยางดเดอดตลอด 7 อาทตย๑ทผานมา คาตอบทเขาใหอาจจะเปนอยางอน แตถาคณทาใหลกคาของคณตระหนกไดวาคณไดทางานตวเปนเกลยวเพอพวกเขาแคไหนในทกๆอาทตย๑ทผานมา มนกอยอมจะมโอกาสมากกวาทเขาจะยกโทษใหคณ และไมถอสาหาความมากเมอคณทาอะไรพลาดในบางครง

เพราะฉะนน อยาไดกลวทจะลองอะไรใหมๆ การลองผดลองถกและการรเรมทาอะไรลวนแตเปนสวนหนงของเกมส๑ทงนน

บางทคณอาจจะพบวางานชนนมนใหญกวาทคณคด ไมเปนไร กอแคยอยมนออกมาใหเปนหลายๆกอนทเลกลง เพอใหมนทาจบ

ไดภายใน iteration ปรบแผนใหม แลวกอมงหนาทามนตอไป ขาวดกอคอ เรองอยางนมนเกดขนไดทงสองดาน (บางทเรากอ

พบวางานบางอนมน “เลก” กวาทเราคดไว!)

Page 161 of 220

คณอาจจะไมเหนวา SPM นถกกลาวถงในหลกการแอจไจล๑แบบทางการใดๆ นนกอเพราะมนเปนแคกลวธหนงทผมและคนอนๆ

เหนวามนชวยใหเราเลยงไมใหเกดการเสยเวลาไปกบการเรม iteration ทยงไมผานการวเคราะห๑ทดมาไดและนนคอความ

สวยงามและความอาร๑ตของแอจไจล๑ มนไมมสงไหนทถกทสด หรอทาไดแคเพยงทางเดยวเทานน ถาคณตองการอะไรซกอยาง กอ

สรางสรรค๑มนขนมาดวยตวคณเอง (อยาไดแคร๑วาหนงสอเลนไหนจะสอนมายงไง)

สงตอไปทคณจะอยากทามนทก iteration นนกอคอการเกบ feedback จากลกคาของคณ

10.3 โชวของ The Showcase

สาเรจแลว!!! คณไดสงมอบงานทมคณคาบางอยางกบลกคา คณรบางมยวามโปรเจคเยอะแคไหนทเคาทากนเปนเปนอาทตย๑

เปนเดอน หรอแมเปนป แตแลวสดทายมนกอไมกอใหเกดคณคาอะไรเลย

การจดแสดงผลงาน (Showcase) น เปนโอกาสทคณจะไดอวดผลงานและสงทคณและทมของคณไดทาใหโลกไดร อกทงยงเปน

โอกาสอนดทคณจะไดรบ feedback อนแทจรงจากลกคาของคณ ในระหวางการ showcase น คณและทกคนในทมคณจะตอง

demo story ของ iteration ทผานมา นนหมายพถงการโชว๑ code จรงท deploy ไวท test server มนไมใชวาคณตองสราง

ภาพทสวยหร แตเปนการโชว๑ของทคณสามารถเอาไปใชงานไดจรง และสามารถลงท production server วนนไดถาตอง แคนน

มนกอเสรจสมบรณ๑

การ showcase ควรเปนอะไรทสนกและเปนวธทดในการปด iteration ฉลอง!! หาขนมนมเนย เหลายาปลาปงมาเลยงกน โชว๑

ออฟ เกบ feedback ใหลกคาของคณเปนคนขบเคลอนการ demo แลวสงเกตดเคาใช software เราเปนยงไงบาง

ทนลองมาดการประชมนงททง Scrum และ XP แนะนาวาคณควรม นนคอการวางแผน iteration หรอ Iteration Planning

Meeting (IPM)

10.4 Iteration Planning Meeting

IPM คอชวงเวลาทคณมาจบเขาคยกนกบลกคาของคณและวางแผนงานทจะตองทาใน iteration หนา คณตรวจด velocity

ของทมคณ สารวจ stories ทกาลงจะเขามา แลวตดสนใจดวยกนวามอะไรบางทคณและทมคณจะสามารถทาไดใน iteration

หนา IPM กอเปนอกชวงเวลานงทเหมาะตอการเชคสขภาพของโปรเจค

Page 162 of 220

ณ จดนคณสามารถพยากรณ๑ไดวาโปรเจคของคณอยในสภาพไหน มอะไรหรอปลาวทคณตอง การหรอปญญาทคณตองจดการถงมนเดยวน นคอโอกาสทคณจะไดยกประเดนและเสนอตวเลอก หรอแมแตเสนอแนะแนวทางทคณอยากจะไปตอ หากมการพดถงวนท (ทจะตองสงงาน) จงใช burn-down chart ของคณใหเกดประโยชน๑ ถงแมมนจะเปนความจรงใจอนโหดราย แตมนกอไมไดเปนการหวนไหวไปกบอารมณ๑ มนจะบอกคณและลกคาของคณไดวาวนทนนๆมความเปนไปไดมากนอยแคไหน

Page 163 of 220

ท ายงไงถงจะได feedback ทสรางสรรคและเกดประโยชน

การให feedback ทาไดสองวธ คณจะพดตรงๆไปเลยกอได

“ชใจ ผมสงเกตวาคณทา print module ใน iteration ทแลวไดดมากเลย แตวา unit test ยงขาดไปอยมากนะ”

หรอจะเอาใบมดไปอาบนาผงกอนกอได “ชใจ เยยมมากเลยงาน print module ทคณทานะ ใชความปราณตขนนนกบ unit test ของคณส ไมนานคณไประดบเจาโลกแน!”

สงเกตเหนความแตกตางมย แคคณเลยงไมใชคาวา “แต” มนกอฟงและรสกตางกนฟาเหว ผมไมไดหมายความวาคณควรจะใสไขใสนาตาลในทกการสอสารของคณ แตบางทการเปลยนขอความบางอยางของสงทจะสอสารเพยงเลกนอย กอใหผลแตกตางกนอยางไดชดในการพยายามปรบเปลยนพฤตกรรมของคน

ถายงอยากจะศกษาเพมเตมเรองการสอสารอยางไรจงจะมประสทธภาพ ผมแนะนาใหอานหนงสออมตะของ Dale

Carnegie ชอ How to Win Friends and Influence

People [Car90].

นคอสวนททาใหเกด visibility ใน agile เราตองการความโปรงใสมากทสดกบลกคาและผมสวนไดเสยในโปรเจคของเรา การแจงขาวรายแตเนนๆนแหละคอวถแอจไจล๑สงสดทายทเราอยากจะทากอนทจะจบ iteration คอการถามตวเราเองวามอะไรบางมยทเรานาจะทาไดดกวาน

10.5 จด Mini-Retrospective ยงไงด

เราสามารถจด Retrospective ใหใหญโตหรหรา อลงการ เหมอนเปนงานฉลองอยาหนงเมอจบ release ใหญๆหรอเมอ project จบ แตนนไมใชสงทผมจะพดถงตอนน Retrospective ทผมอยากจะพดถงคออนททากนแบบสนๆ 10 - 15 นาท คอชวงเวลาทคณและทมคณมานงคยกนเพอพดถงสงทคณทาไดเจ๐ง และสงทควรจะทาใหไดดกวาน กฏประกาษตของการจด retrospective ทดคอการทาใหทกคนรสกปลอดภย ถาคณมปญหากบเรองน ดงเจตนารมณ๑หลกของ retrospective (The Retrospective Prime Directive) ออกมาเพอเดอนใจทกคนวาเราม retrospective เพออะไร

The Retrospective Prime Directive

ไมวาอะไรจะเกดขน พวกเราเขาใจและเชอดวา ดวยขอมลทมอย ณ จดนน รวมถงดวยทกษะและความสามารถ ทงทรพยากรทมอย และสถานการณ ณ ขณะนน ทกคนไดท าเตมทแลว

(หรอถาจะใหพดอกนยนง นไมใชยทธการลาแมมด!)

Page 164 of 220

จากนนกออนเครองดวยการถาม retrospective คาถามแรก

1. มอะไรบางทเราท ามนไดด

“มานะ unit tests ของคณเจ๐งมาก”

“ชใจ มนดมากเลยนะ ไอ Style Guide ทคณทาขนมา แลวกอทคณไปตามไล refactor style sheet ของเราใหมนเปนไปในลกษณะเดยวกน ทนเรากอจะทาใหหนาตาของ application ของเราดดและสอดคลองกนไดงายขน”

การสรรหาพฤตกรรมทดเพอมาชมเชยนนมนกอเหมอนเตมถานใหกบกองไฟของทกคน มนจะสงเสรมใหพฤตกรรมดๆนนมมากชนเรอยๆในโปรเจคของคณ

เมอพดถงดานบวกแลว เรากอตองพดถงดานลบกนบาง

2. มจดไหนบางทเราสามารถทาใหดกวานได “ทกคน ใน story ชดทแลวนมบกกหลดออกมาเยอะเลยนะ เราแตะเบรกกนหนอยดมย ใชเวลาใหเตมทจนเรามนใจแลววาทกอยางทางานได แลวกอทา unit test ใหครอบคลมดวย”

“รสกวาตอนนม code ซาๆอยในโปรเจคเรามากมาย อยาลม refactore ดวยละเวลาไปแตะแถวนน”

“ผมขอโทษ ไอ print story ทผมทาไปมนแยมากๆเลย เดยวขอผมแกตวใหมใน iteration น รบรองเวอร๑ชนหนาจะดกวานมากมายแนนอน”

ไมวาปญหาจะเปนอะไร การจด retrospective และการมาชวยกนคดแกปญหา และแบงปนขอมลกบทมก๏เปนวธทดทสดในการเตมไฟใหกบทม และชวยใหทมโฟกสกบจดทตองการการปรบปรง แลวทนคณกอสามารถทจะสราง theme ในสองสาม iteration ขางหนาเพอทจะตดตามความคบหนาของสงทตองการจะปรบปรงถายงอยากจะศกษาใหลกซงถงการจด retrospective ทด ลองอาน Agile Retrospectives:Making Good Teams Great [DL06] เพมเตมด

เอาละ เรามาจบกนดวยวธดๆทจะทาใหทกคนเหนภาพเดยวกนกอนการเรมวนทางานทกๆวนกบ Daily Stand-up กนเถอะ

10.6 อยาจด Daily Stand-Up แบบน

Daily Stand-Up คอการแชร๑ขอมลทสาคญกบทมในรปแบบทกระชบ รวดเรว มนคอการประชมทจะทาใหการประชมอนๆหมดความสาคญ และมนใชแคเพยงหาถงสบนาท ไมจาเปนตองมกราฟหรอตารางอะไรใหมากมาย (เพอเตอนใจใหเราตองทาการประชมใหกระชบ) แคบอกวาสถานะวาตอนนคณกาลงทางานอะไรชนไหนอย และขอมลอยางอนทคณคดวาทงทมตองรไว หนงสออไจล๑สวนใหญจะบอกคณวาคณตองยนเปนวงกลมและหนหนาเขาหากนเวลาทา stand-up และแตละคนจะตองบอกทกคนในทมดงตอไปน

เมอวานคณทาอะไร

วนนคณจะทาอะไร

มอะไรบางทขดขวางการทางานของคณหรอทาใหคณทางานชาลง

กอเปนขอมลทด แตมนไมคอยสรางสรรค๑แรงบนดาลใจหรอกอใหเกดการเปลยนแปลงใดๆเลย

ทน ลองเปลยนดบาง ทกครงทพวกคณมารวมตวกนในตอนเรมวน ลองแชร๑สงตอไปนใหทมฟง

เมอวานคณไดเปลยนแปลงโลกยงไงบาง

Page 165 of 220

วนนคณจะทาอะไรเพอโลกไดบาง

คณจะฝาฟนกบขวากหนามทมากนขวางคณเหลานนไดยงไง

การตอบคาถามเหลานมนเปลยนอารมณ๑ของการทา stand-up โดยสนเชง แทนทจะยนอยเฉยๆแลวรายงานสถานะ ตอนนคณกลบกาลงวางแผนกโลกอย! หากคณทาเชนนแลว สงทจะตามมากอมอยอยางสองอยาง คอคณจะทาตามแผนทคณวางไวใหสาเรจลลวง หรอคณจะไมทามน ทงหลายทงปวงแลวมนกอขนอยกบคณทงหมด แตสงนงทผมบอกคณไดกอคอ ถาคณมหนามายนในวง stand-up และประกาศกลาวตอทกคนวาคณจะทาสงนนๆภายในวนน มนจะเพมโอกาสทคณจะทางานสงนนไดสาเรจอยางนามหสจรรย๑!

10.7 ท าอะไรกอไดถามน work ส าหรบคณ

ตอนนถาคณสงสยวาเราตองจดการประชมทงหลายทงปวงนแยกกนเหรอ หรอวาเราสามารถรวมมนทงหมดไวในการประชมเดยวได คาตอบกอคอ แลวแตคณส! เพอทจะใหจานวนครงในการประชมลดลง บางทมชอบทจะรวมเอา showcase, iteration

planning และ retrospective เขาไวดวยกนใน session เดยวแลวเอาใหจบภายใน 1 ชวโมง (ซงผมกชอบแบบนมากกวา และไดนาเสนอในทนภายใต IPM 1 ครง) บางทมชอบทจะแยกการ planning ออกจาก showcase แลวกอจด retrospective ใหสนกๆตอนทายๆอาทตย๑ บางทมสนทกบลกคามาก จนแทบไมตองม story planning meeting เลย เพราะพวกเคาคยกนทกวนและม design session กนไดทนทเมอมความจาเปน จาเอาไววามนไมไดมวธเดยวในการทาอะไรพวกน ถาอะไรทาไปแลวมนไมเกดประโยชน๑ กอไมตองไปทามน ลองอะไรใหมๆแลวดวามนใชไดมยสาหรบคณ เอาเปนวาสงทคณตองทาแนๆ ณ จดใดจดหนงใน iteration คอการไปหาลกคา เอา software ทมนใชการไดไปใหเคาด สรางความคาดหวง และหาวธทจะปรบปรง

โอ๏ะโอ ถงคราวทพระอาจารย๑ตองการจะดแลววาคณตามทนแคไหน รบไปรายงานตวทสานก และขอใหโชคดกบแบบฝกหดทพระอาจารย๑เตรยมไวใหนะ! ยนดตอนรบกลบมานะเดกๆ ฉนไดเตรยมบทวชาไวทดสอบความพรอมในการรบมอกบกลไกของ iteration ในชวตจรง ใหพวกเจาไดลองด จงอานใหละเอยดกอนตอบนะ

ฉากท 1: Story ทไมครบถวนสมบรณ

อาจารย: วนหนง ในระหวาง iteration planning meeting ทมไดคนพบวาม story อนนงททาไปไดเพยงแคครงนง ดวยความทอยากจะใหดเหมอนมความคบหนา project manager เลยเสนอวาจะนบ point ครงหนงใหเปน team velocity ของ iteration น แลวอกครงนงจะเอาไปรวมกบ iteration หนาเมอ story เสรจสมบรณ๑ เจาคดวา นเปนความคดทดมย

ศษย: ขาคดวาในเมอ story มนไดถกทาไปแลวครงนงจรงๆ กอไมนาจะเสยหายอะไรทเราจะแสดงถงสถานะทถกตองของ story

โดยการนบ point ครงนงใหเปน velocity ของ iteration นและอกครงนงใหเปนของ iteration หนา

อาจารย: เจาคดเชนนนหรอ ถาอยางนน ตอบอาจารย๑มาซวาชาวนาสามารถขนยายขาวโดยใชเกวยนทมลอเดยวไดหรอเปลา คนเราสามารถใชตะเกยบเพยงขางเดยวทานขาวไดไหม แลวลกคาจะเอาของทม feature เพยงครงนงไปขน production ไดหรอปลาว

Page 166 of 220

ศษย: ไมไดครบ พระอาจารย๑

อาจารย: สาหรบนกรบอไจล๑แลวนน มนไมมสงทเรยกวาเสรจครงๆกลางๆ มแคงานเสรจ หรอไมเสรจเทานน และดวยเหตผลน นกรบจะนบเอา point มาเปน velocity ใหเฉพาะ story ทสมบรณ๑และผานการ test มาแลวเทานน story ทยงไมเสรจสมบรณ๑กอจะตองถกผลกไป iteration หนา

ฉากท 2: เมอ Stand-Up ไมกอใหเกดประโยชน

อาจารย: กาลครงหนง มทมๆนงทตองพยายามอยางมากเพอทจะใหสมาชกทกคนเขารวม stand-up meeting ประจาวน ทมรสกวา stand-up มนไมไดกอใหเกดประโยชน๑อะไรขนมาสาหรบพวกเขา มนอาจจะดกวาถาพวกเคาเอาเวลาไปทางานแลวคยกนเฉพาะเมอจาเปน ทมนควรทาอยางไรด

ศษย: ผนาทมควรทจะยาเตอนทมถงความสาคญในการทาใหทกคนเหนภาพเดยวกน และบทบาทสาคญท stand-up meeting

จะชวยใหเราบรรลจดประสงค๑น

อาจารย: ถกตอง ทมควรจะตองมาไตรตรองดจดประสงค๑ของการม stand-up ประจาวน และเหตผลทเราไดตกลงทจะมมนตงแตทแรก แตกระนน ถาหากทมยงคดวามนไมจาเปนละ

ศษย: ขาไมเขาใจ ทานอาจารย๑ การทเราใหทกคนมาพรอมหนากน เพอทพวกเคาจะไดเขาใจตรงกนโดยใชเวลาแคเพยงนดเดยวจะถอวาเปนการเสยเวลาไดอยางไรกน

อาจารย: ถงแมวาการม stand-up meeting ทกวนจะมขอดมากมาย แตนนไมไดเปนเพยงวธเดยวทจะใหไดมาซงผลดเหลานน บางทมมสมาชกทกคนอยดวยกน เปนทมเลกๆ ทางานดวยกนอยางใกลชดทงวนทงในทมดวยกนเองและกบลกคา ทมแบบน stand-up meeting กออาจจะไมจาเปน

ศษย: อาจารย๑กาลงจะบอกวา บางทมไมจาเปนตองม stand-up meeting กระนนหรอครบ

อาจารย: ขาตองการเพยงจะบอกแตวา อะไรกอตามททาแลวไมเกดประโยชน๑ จงเปลยนแปลงแกไขมนซะ หรอไมกอเลกทามนไปเลย

ฉากท 3: Iteration ทอะไรกอไมเสรจ

อาจารย: กาลครงหนง มอยทมทมนงททางานจนจบ iteration แลว กอไมมอะไรเปนชนเปนอนทมมลคาตอลกคาเลย และความลมเหลวนกอเปนเพราะพวกเขาเองทงหมด เคาไมไดวางแผน เรมทางานกอชา แถมยงขเกยจ ดวยความทรอยเตมอกวาการจะไปบอกลกคาเชนนมนชางยากเหลอเกน พวกเขาเลยยกเลก showcase กบลกคา เจาคดวานเปนสงทควรทาไหม

Page 167 of 220

ศษย: ถงแมใจนงขาคดวาพวกเคาควรจะตองไดรบอะไรทสาสมกบการททางานไมเสรจ แตถาไมมอะไรทจะไปนาเสนอใหดจรงๆ จะยกเลก showcase กอนาจะพอรบได ถงอยางไรกอด ขากออยากใหพวกเคาซอสตย๑และยอมรบวาทาไมถงยกเลกมน

อาจารย: อา... เจาเรมฉลาดขนแลวสนะ การททมไมไดทาใหอะไรทมมลคาใหลกคาเลยใน iteration นงมนกอเกดขนบาง แตสวนใหญเนยมนไมไดเกดจากความตงใจ หรอพยายามไมพอ เราจะแกไขนสยความเกยจครานนไดอยางไร

ศษย: ทานกาลงแนะวาเราควรทจะม showcase อยเชนนนหรอ และเผชญหนากบลกคาทงๆทไมมอะไรจะโชว๑ใหเคาด

อาจารย: ไฮ! บางทการทาใหรสกอายซะบางกอเปนการสงสอนทด การทตองพบกบลกคาแลวไมมอะไรไปใหเคาดนนเปนประสบการณ๑ททาใหเสย self อยมใชนอย หากไดลองเพยงครงนงแลว ทมกอคงไมอยากใหมนเกดขนอก

ศษย: ขอบพระคณมากครบทานอาจารย๑ ขาจะกลบไปไตรตรองในสงททานสงสอน

อยาพยายามทจะเลยงเหตการณอนไมพงประสงคในโปรเจคของคณ บางทมนอาจจะเปนครทดทสดของคณ ยอมรบความผดพลาด แบงปนสงทคณไดเรยนรกบคนอน แลวสตอไป

มอะไรอก?

ตอนนคณมแผนการสอสารและความเขาใจอนถองแทวาการพฒนาแบบ iterative นนทางานอยางไรแลว คณกออยในสถานะทดทจะมาดกนวาสดยอดแอจไจล๑ทมนน เคาคอยๆขยบกนยงไงเมอเราตองเรมทางานกนอยางดเดอด

ในขนตอไป คณจะเรยนรเกยวกบสดยอดความลบแหง visual workspace และการนามนมาใชเพอใหคณและทมของคณเตมเปยมไปดวยพลงและความแนวแน!!!

Page 168 of 220

ตอนท 11 สรางพนทท างานท

มองเหนได (visual workspace)

กระดานสถานะการบนเปนสงทด แคมนแคแว๏บเดยวคณกเหนหมดแลววาเทยวบนไหนกาลงมา อะไรกาลงจะเกด และเทยวไหนถกยกเลกไปแลว ในคราวเดยวแลวทาไมไมทาแบบเดยวกนนกลบโครงการบางละ? ดวยการเรยนรวาจะทาอยางไรเพอสรางพนททางานทมองเหนได คณและทมจะไมมวนพลาดสงทจะทาตอไปหรอคณจะเพมคณคาใหมากทสดไดอยางไร มนไมเพยงแตจะทาใหคณมองเหนทกสงทกอยางชดเจน แตการเพมความชดเจนจะชวยในการตงความคาดหวง (expectations) ในโครงการได

Page 169 of 220

11.1 โอะ โอ งานเขาแลว

มการเปลยนแปลงครงใหญทบรษท งบประมาณโดนตด ระยะเวลาถกรนเขามา และทาทกงานใหดขน เรวขน และถกกวาเดม ดวยเหตน คณจงถกสงใหทางานใหไดมากกวาเดมดวยทรพยากรทนอยลง ผบรหารชอบทจะใหคณสงมอบงานปรมาณเทาเดม และฟงชนการทางานไดเทาเดม ดวยจานวนคนในทมครงเดยว ทาเสรจกอนตารางสกเดอนนง หรออะไรกแลวแต (ตลอดอะ แฟ!) ทกอยางจะเขามาอยางหนกหนวงและรวดเรว และพรงนพวกเขากตองการจะนดประชมกบคณ เพอยนยนวาคณมแผนทจะจดการกบมนแลวเฮอก! คณจะจดการยงงย? สงทพวกเขาอยากไดคอสงท(โคตร)ไมมเหตผล คณกร ทมกร มนเหมอนกบวา มแตผบรหารเทานนแหละ ทไมร! คณจะทาอยางไรเพอแสดงใหพวกเคาเหนวา ดวยทรพยากรทเหลอแคครงเดยว คณเองกอยากจะสงมอบอะไรใหลกคาแทนทจะไมมอะไรเลยเหมอนกนแหละ(เวย)? แตมนทาไมได

ตามพวกเราใหทนซ ทานผบรหาร

แทนทจะนดประชมแลวนงด powerpoint กน คณเชญผบรหารลงมาเหนงานจรงเพอดสถานะปจจบนของโครงการกนดกวา คณเรมดวยการพาพวกเคาไปดโต๏ะทางานเรมตน (inception desk) ของโครงการ ทคณไดแปะไวอยางงายๆ บนฝาผนง คณอธบายเกยวกบโต๏ะเรมตนของโครงการ วาเปนเครองมอทคณและทมใชเพอแนใจวา คณไมเคยพลาดเปาหมายในโครงการ เพอใหเหนไดอยางชดแจง อธบายวาคณรอยเสมอวาใครคอลกคา และทสาคญทสด ทาไมเราจงตดสนใจทจะลงทนใหกบโปรเจคนในครงแรก

นาประทบใจ ผบรหารจะเอนเอยงมาทางคณมากขนและถามคณวางานไปถงไหนแลว เพอตอบคาถามนน คณกจะจงความสนใจของพวกเคาไปยง release wall ของคณ

Page 170 of 220

release wall คอททคณและทมตดตามสถานะวามอะไรเสรจและอะไรทยงทาอย ดานซายของ wall แสดงใหเหนฟเจอร๑ทถกวเคราะห๑ พฒนา ทดสอบและผานการยนยนจากลกคาอยางสมบรณ๑แลว (คอพรอมทจะสงมอบแลว) และดานขวาแสดงใหเหนสตอรทยงตองถกพฒนาตราบเทาททมทางานใน iteration น คณกวาดการจดการบนสตอรบอร๑ดของ iteration

สตอรบอร๑ดตดตามสถานะของฟเจอร๑ของ iteration น (หรอทเรยกวา user stories) ฟเจอร๑ทยงไมไดพฒนาอยดานซาย ขณะทสงทพรอมจะใหกบลกคาแลวจะอยดานขวา และสตอรทกาลงจะถกพฒนาเพม กจะโดยยายจากซายไปขวา มเฉพาะอนทพฒนา ทดสอบ และผานการตรวจสอบโดยลกคาอยางสมบรณ๑แลวเทานน จงจะถกยายไปทคอลมน๑ Done สงเกตการมองดของผบรหาร พวกเคาจะตดบทแลวถามคณวา คณคาดหวงวามนจะเสรจเมอไหร

Page 171 of 220

เพอตอบคาถามน คณนาพวกเขาไปยงแผนภาพสองแบบบนผนงทคณยงไมไดเคยใหพวกเขาเหน คอความเรวของทมและแผนภาพ burn-down ของโครงการ คณอธบายวา ความเรวของทม คอสงทคณและทมมไวเพอวดระดบความ productivity ของทม (Hyper-productivity seeker เคาบอกวา ไมตองแปลหรอกคาวา productivity) ทมจะคาดคะเนไดอยางถกตองเกยวกบเวลาทงานเสรจ ดวยการวดวาทมทาอะไรเสรจไดบางในแตละสปดาห๑ และใชการวดนนมาเปนสงทชวยวางแผนในอนาคต ซงสงนแสดงอยบนแผนภาพ burn-down นนเองแผนภาพ

burn-down ของโครงการ นาความเรวของทม และประมาณการความเรวททมจะ “เผา” งานทลกคาตองการมาคานวณ โครงการจะสาเรจเมอทมไดสงมอบทกอยางในรายการ หรอโครงการหมดเงนแลว (อะไรกตามทมาถงกอน) ดวยสถานะทกลาวมา ตอนนคณกมาถงจดทจะแสดงไดอยางรอบคอบ ใหทกคนในหองเหนอยางชดเจน ครงหนงของทมกอาจจะตด productivity ของทมไดครงหนงเชนกนดวยความนาประทบใจกบการสงการของคณในสถานการณ๑น ผบรหารขอบคณทคณใหเวลาและพวกเขากไปประชมโครงการอนตอไปอกสองสามสปดาห๑ถดไป คณจะไดอเมลล๑ทอธบายวา เพราะวาบรษทมคาสงเกยวกบกลยทธ๑ใหม ทาใหโครงการของคณโดนยกเลกไป! (ชวตบางทกเปนแบบนแหละ) อยางไรกตาม มนกคอขาวดทพวกเขาไดรวา คณจดการโครงการไดดอยางไร พวกเขาตองการใหคณยงคงเปนผนาในการเรมตนใหม! นเปนเพยงแคหนงตวอยางทวางไวเพอแสดงใหเหนวา พนททางานทมองเหนได มนชวยใหคณสามารถตงสงทคาดหวงในอนาคตกบลกคาและสรางความเปนจรงใหกบสถานการณ๑ไดอยางชดแจง แตททมนจะสองแสงสวางคอตอนทมนชวยคณและทมในการดาเนนงานและเพงความสนใจในงานเราไปยงความคดทจะสรางพนททางานเสมอนของคณเองดกวา

11.2 สรางพนทท างานเสมอนไดอยางไร?

การสรางพนททางานเสมอนทดมนทาไดตรงไปตรงมา สาหรบทมแอจไจล๑ใหม ผเขยนมกจะแนะนาใหเรมดวย:

A story wall (ผนงสตอร)

A release wall (ผนงรลส)

A velocity and burn-down graph

An inception desk (โต๏ะทางานเรมตน) ถามเนอทพอ

Page 172 of 220

โต๏ะทางานเรมตนคอสงทด เพราะมนเตอนใหทมรวาทาไมพวกเขาอยตรงนน และสงทงหมดตรงหนานนเกยวกบอะไร (ซงมนงายมากทเราจะหลดไดเมอสมองเรามนจมอยกบโครงการ)ผนงสตอรเปนสงทดเพราะทกเชาทกคนสามารถเดนเขามาแลวรไดเลยวาอะไรทตองทาใหเสรจตอไป

ผนงสตอรจะแสดงใหคณเหนคอขวดทคณมในระบบ และสวนใดทคณอยากจะจดการทรพยากร

ผนงรลสคอสงทสวยงาม เพราะใครๆ กสามารถเดนมาทหองของคณและเหนสถานะของโครงการ โดยมองแคแว๏บเดยว วานคอสงทเสรจ นคอสงทเหลอ ไมจาเปนตองมคณตศาสตร๑ยากๆ หรอไฟล๑เอกเซลมาชวยอธบายและเหมอนทเราเคยคยเรองเกยวกบการวางแผนแอจไจล๑แบบกวางๆ ไมมอะไรทจะตงสงทเราคาดหวงไดดเทากบแผนภาพ burn-down อยาลมเอาเดกนอยคนนไวบนผนงดวย แลวคณจะรความจรงอยตลอดเวลายงเหลอเวลาอกเทาไหร และตอนนเปนอยางไรและแนนอนนเปนแคการเรมตน

Page 173 of 220

ถาคณมภาพตางๆ พวกแบบจาลอง หรอไดอะแกรมทชวยในการดาเนนงานใหกบคณและทม กสามารถเอาไปแปะไวไดและทาใหทกคนมองเหนมนไดงาย

11.3 แสดงเจตนาของคณ

ขอตกลงการทางาน คอสงทเกยวกบการปกเสาหลกบนพนเปนทม และพดวา “นคอแนวทางททมจะทางาน” มนเปนแนวทางการตงสงคาดหวงใหกบทกคนในทม เกยวกบวาทมจะทางานกนอยางไร และควรจะคาดหวงอะไรจากคนในทมถาพวกเขาเขารวมในงานน เรอง shared values (คานยมรวม) กเหมอนกน มนเปนแคเรองของความรสก ถาทมเคยเจบปวดมากอนหนานเพราะวาพวกเขาถกผลกดนใหประนประนอมเรองคณภาพงาน และไมอยากถกรจกในฐานะของทมทใชทางลดและเขยนซอฟท๑แวร๑ทไรประโยชน๑ พวกเขาสามารถเขยนคานยมรวมและทาใหคนอนรบรได

อนๆ ทคณตองแนใจคอ สงทคณแบงปนออกไป เปนภาษา(คน)

11.4 สรางและแบงปนภาษาสวนกลาง

เมอคาศพท๑ทคณใชในซอฟท๑แวร๑มนมหลายคา แตละคนเรยกไมเหมอนกน คณอาจจะเกดปญหาได สรางนามธรรมทผดๆ ในซอฟท๑แวร๑ (ทางธรกจอาจคดวา locations มความหมายอยางหนง ในขณะทผพฒนาอาจจะแปลมนเปนความหมายอยางอน)ซอฟท๑แวร๑กลายเปนสงทยากจะเปลยนแปลง (เพราะวาคาทใชบนหนาจอมนไมเหมอนกบคาทใชในฐานขอมล)คณจบดวยการมบกเยอะและมคาใชจายในการดแลรกษาซอฟท๑แวร๑สง (เพราะวาทมมงานเพมในการทปรบเปลยนซอฟท๑แวร๑)เพอหลกเลยงความผดปกตน จงควรสรางภาษาสวนกลางทคณและฝงธรกจใชรวมกน และใชมนอยางเครงครดใน user stories, โมเดล, รป และ โคด

Page 174 of 220

ตวอยางเชน ถามบางคย๑เวร๑ดทคณและลกคาใชเมอคณพดถงระบบ ใหเขยนมนออกมา แลวนามาซงความหมายทชดเจนเกยวกบคาศพท๑นน และแนใจวามนเปนความหมายเดยวกนกบทอยในซอฟท๑แวร๑ (นนคอ หนาจอ และคอลมน๑ในฐานขอมล) การทาแบบน ไมเพยงแตเปนการลดบกและการทางานซบซอนทจะเกด แตเปนการสรางการทางานทงายขนในการคยกบลกคา เพราะโคดของคณจะเปนภาษาเดยวกนกบภาษาทใชคยในธรกจ เราไมมเวลาหรอเนอททจะคยเรองนตอ แตกมหนงสอทดมากๆ เกยวกบเรองน โดย Eric Evans คอ Domain-Driven Design: Tackling Complexity in the Heart of Software. [Eva03]. มนดทเดยวสาหรบทจะอานเรองน สดทาย มาดบกของคณกน

11.5 เฝาดบกของคณ

เพอแนใจวาคณและทมจะไมรสกพายแพหมดหวง หากวาเจอบกทไมไดคาดคดกอนทจะขนโปรดคชน กใหกรณาตดตามและเกบขอมลของมนไวในแตละวนทเจอในโครงการ

Page 175 of 220

ถามนชวย กขอใหสละเวลาสก 10 เปอร๑เซนในแตละ iteration เพอใชในการบดขยบกและจายหนทางเทคนคกนบาง แคกาจดมนในเวลาทเกด และอยาใหมนกลบมาไดอก

นกเรยน: จานฮะ ถา workspace ของผมมนไมยอมใหผมสราง visual workspace ผมจะทางยดฮะ ทานอาจารย: มนเปนความจรงทบางสานกงานตอตานการใหทมเอาของไปแปะบนผนง ถาเจอการตอตานแบบน กใหยอมรบมนและตดสนวาจะทาอยางไรตอไป นกเรยน: ใชแลวฮะทานอาจารย๑ แลวผมควรจะตอสเพอ visual workspace ปะ? หรอวาแคยอมรบวาผมจะไมไดใชมนแนๆ แลว (โฮๆๆๆ) ทานอาจารย: มนกแลวแตเจา ถาเจาสามารถประนประนอม ยอมทาตาม หรอเผชญหนา มนมเวลาและสถานทสาหรบทาสงน คนหาหวใจตวเอง หาพวก และตดสนใจวาการตอสนมนจะคมคาความพยายามหรอไม นกเรยน: ถานเปนทกษะทสาคญจรงๆ ควรทางยใหเกดการประนประนอมฮะ?

Page 176 of 220

ทานอาจารย: ถาเผชญหนากบสถานการณแบบน นกรบทงหลายมกจะพบวา สตอรบอร๑ดแบบพบเกบไดมนมประโยชน๑และทาใหพนททางานสะอาดอยเสมอ ในขณะทกทาใหทมไดสอสารกนอยางเปดเผยในระหวางวน บางคนกใชพวกเครองมอออนไลน๑ หรอวาสตอรบอร๑ดเสมอนในการแบงปนขอมลทสาคญ หรอการทาใหทมรเทาๆ กน นกเรยน: ดงนน visual workspace กไมจาเปนตองจบตองไดนะสฮะ? ทานอาจารย: ใชแลว การจบตองไดมนกดทสดอะนะ แตบางทมนกเปนไปไมได ;P นกเรยน: แลวอะไรละฮะทผมควรเผชญหนา ผมควรทางยฮะ? ทานอาจารย: เจาสามารถเรมตนจากการสราง visual workspace งายๆ ใชมนในแตละวนในโครงการ และหวงวาสงทพดและเรยนรมนจะมประโยชน๑ นกเรยน: แลวถาไมละฮะ? ทานอาจารย: ดงนนตนตอของปญหาคอเรองของความรสก มนอาจจะมการตอตานมาจากสวนกลางในสงทเจาพยายามจะทา ใหพยายามทจะตอกยาและเขาใจแรงผลกดนนน บางทในการพดจากน เจาอาจจะสามารถคนพบวธการแกปญหาทมนรบไดกนทงสองฝาย เวลาและความอดทนเทานนทจะทาใหมนเกด ตอไปมอะไร? การเดนทางของคณใกลจะสมบรณ๑แลว คณไดนาทกคนขนรถบสแลว (บทท 3 ชวนคนขนรถแอจไจล๑) และคณกมแผนงานแลว (บทท 8 ดรามามหากาฬ) และคณกรแลววาอะไรจะตองดาเนนการ สวนตอไปของหนงสอเลมน “วศวกรรมแอจไจล๑ซอฟท๑แวร๑” เนนไปยงสวนหลกของทกษะดานวศวกรรมแอจไจล๑ซอฟท๑แวร๑ทคณและทมจะตองการ เพอใหแนใจวาสงทเปนแอจไจล๑ทงหลายจะเกดขนจรง มนเปนสงทตองอานถาคณตองการจะทาใหโคดสนลง แตมนจะถกแนะนาใหอานถาคณเคยวางแผนในการควบคมโครงการแบบแอจไจล๑ ไมมอะไรในแอจไจล๑ทจะทางานไดหากมนไมมทกษะดานเทคนคทแขงแกรง และแมวาสบทถดไปจะสามารถเปนหนงสออกเลมไดดวยตวมนเอง แตบทตางๆ ในเลมนกจะใหรมชาตทเพยงพอกบคณ เพอจะเขาใจทกษะการทางาน และเขาใจวามนสาคญอยางไร ทจะแอจไจล๑ เราจะเรมดวยการดวธหนงในการประหยดเวลาทดทสดในการทาโครงการซอฟท๑แวร๑ นนคอการทา automated unit testing (Hyper-productivity seeker บอกมาอกแลววา ไมตองแปลหรอก)

(อะคร อะคร เสรจแวว...)

Page 177 of 220

ตอนท 12 ยนตเทส: รเสมอวา

works

จากเวลาทงหมดทเราใชไปกบการวางแผน ตามแนวทางแบบแอจไจล๑จะไมประสบความสาเรจเลยถาสงเหลานนไมมการสนบสนนจาก หลกปฏบตในการพฒนาซอฟต๑แวร๑ทดเยยม ถงแมวาในบางแบบการปฏบตแบบแอจไจล๑เหลานบางอยางเชนการทา แพร๑โปรแกรมมง (Pair Programming) จะยงเปนสงทโตเถยงกนอย แตกมอกหลายแบบการปฏบตแบบแอจไจล๑ทไดเปนทยอมรบกนอยางแพรหลาย เชน การทายนตเทสแบบอตโนมต ในสบทสดทายของหนงสอเลมน เราจะไดเรยนรเกยวกบสงทผมมกจะเรยกวา เปนหลกพนฐานของการพฒนาซอฟต๑แวร๑แบบแอจไจล๑ ซงไดแก

5. ยนตเทส 6. รแฟกเตอร๑ (Refactor) 7. ทดด (TDD) 8. Continuous Integration

ในเนอหาของแตละบทนนเรยกไดวาเปนหนงสออกเลมนงดวยตวมนเองแลวกวาได แตดวยการอธบายเบองตนในทน อยางนอยคณกจะไดเขาใจอยางด วามนคออะไร และทางานอยางไร ซงเพยงพอทจะใหตวคณ หรอทมสามารถทจะนาสงนนไปเรมตนใชงานได

ตวอยางตางๆเหลานจะเขยนดวยภาษา Microsoft .NET C# ทงหมด ซงจรงๆแลวโดยหลกการทวไปแลว มนกสามารถทจะนาไปประยกต๑กบภาษาอนๆ ได และคณกไมตองกงวลไปนะครบ ถาคณไมไชโปรแกรมเมอร๑ สงทอยในโคดตวอยางนนจะมจดทนาสนใจ และสาคญทผมจะเนนใหเหนไปดวยตลอด

Page 178 of 220

เรามาเรมกนเลยกบเรองของการทายนตเทสอยางเตมรปแบบ ซงเปนสงพนฐานทสนบสนน หลกการอนๆ ของการพฒนาซอฟต๑แวร๑แบบแอจไจล๑

12.1 ขอตอนรบสเวกสครบทกทาน

คณคอผโชดดสดๆ ทเพงจะเขามารวมทมพฒนาซอฟต๑แวร๑ทกาลงจะเรมพฒนาเกมจาลองการเลนไพ Black Jack! งานแรกของคณคอการออกแบบไพ 1 สารบโคดดานลางนคอโคดบางสวนทเขยนดวยภาษา C# เพอแสดงถงไพ 1 สารบ

กอนทคณจะแกบกใหเขยนยนตเทสทไมผานกอนเสมอ

ถาคณเจอขอผดพลาดในซอฟต๑แวร๑ของคณ คณกอาจจะรสกอยากทจะกระโจนเขาใปทสวนทคดวาผดและแกไปทโคดในทนท อยานะครบอยาเพงทาอยางนน สงทควรทาคอกอนอนเลยคอ การทาใหบกนนมาอยในรปแบบของยนตเทสเสยกอน แลวคอยเรมพยายามแกไขโคดเพอแกบกนน ซงประโยชน๑ของการทาแบบนคอ

● เปนสงทใชพสจน๑ไดวาคณเขาใจบกนนๆแลว (เพราะคณไดจาลองการเกดของบกนนไดแลว) ● เปนสงททาใหคณมนใจไดเลยวาคณไดทาการแกบกนนไดเรยบรอยแลว (เพราะยนตเทสผานแลว) ● เปนสงทใชปองกนไดวาบกนนๆ จะไมกลบมาหลอกหลอนคณอกในอนาคต

โคดของคณผานการตรวจทานเรยบรอยแลว ทกอยางดไปไดดวยด แตแลวในวนาททโคดของคณกาลงจะไดรบการนาไปลงทโปรดกชน ทมเทสกเจอบกตวนงซงพบวามไพโจ๏กเกอร๑ในสารบ คณรบแกบกโดยการนาไพโจ๏กเกอร๑ออกจากคลาสไพทนท และใหทมเทสตรวจดอกครง จากนนกนาซอฟต๑แวร๑ไปลงทโปรดกชน หลงจากนนสองสปดาห๑คณไดรบขาวรายทางอเมล๑ จากผจดการทม

Page 179 of 220

เทสบอกวาพบบกทรนแรงมากในระบบเมอคนน ซงทาใหทางบรษทตองคนเงนใหกบลกคาเปนจานวนเงนกวาหลายแสนดอลลาร๑ เพยงเพราะวามบางคนเอาไพโจ๏กเกอร๑เขาไปในคลาสไพ “วาไงนะ” คณพด “ไมมทาง ผมเพงแกบกนไปเมอประมาณสองอาทตย๑กอนนเอง” หลงจากตรวจสอบโดยละเอยดอกครง คณกพบวามนองฝกงานภาคฤดรอนคนนงในทมทคณดแลอย ไดทาตามทคณบอกใหเธอชวยตรวจสอบวาในคลาสไพนนมไพครบเรยบรอยตามทไพทเปนไพสารบจรงๆ มทกใบ และเธอกไดทาตามทคณสงทกคา และเหมอนวาเธอจะทาการใสไพโจ๏กเกอร๑กลบเขาไปในคลาสไพอยางไมไดตงใจ โดยเธอคดวานนเปนบกของคลาสดวยความรสกผดและอบอายนองฝกงานกขอโทษคณและทกคนในทม หลงจากนนเธอเขามาถามคณวา เธอจะทาอยางไรไดบางเพอเปนการปองกนไมใหสงทคลายๆ กบเรองนเกดขนอก

คณจะตอบเธอวาอะไร อะไรคอวธทคณหรอนองฝกงานจะทาไดเพอใหมนใจไดวาไพโจ๏กเกอร๑จะไมมวนกลบเขามาในสารบไดอกเลยตลอดไป ดวยเหตน เรากมาเรมดเรองยนตเทสกนเถอะครบ

12.2 เรมตนท ายนตเทส

ยนตเทสเปนอะไรทเลก และใชทดสอบอยในระดบ Method ในทกครงท Developers จะทาการแกไขปรบปรงโคด จะเขยนยนตเทสขนมาเพอทดสอบใหมนใจวาสงทแกไขไปนนไดใหผลทถกตองตามทตงใจไว ยกตวอยางเชนถาเราตองการทจะทดสอบวาไพในสารบของเรานนมไพครบ 52 ใบ (ไมใช 53 ใบ) เราสามารถเขยนยนตเทสไดดงน:

ขอเนนตรงนนะครบวาโคดทเปนยนตเทสขางบนน เปนคนละสวนกบโคดทเราจะไปใชบน Production นะครบ ยนตเทสนใชเพอตรวจสอบวาโคดทจะใชทางานจรงนน ทางานไดถกตอง เมอไหรกตามทเราเกดความสงสยวา โคดสวนนน สวนนจะทางานอยางไร และทสาคญเปนไปตามทเราอยากใหมนเปนหรอเปลา กใหเขยนยนตเทสเลยครบ (อยางทเราทาเปนยนตเทสขางบนกอนหนาน เพอตรวจสอบวาไพในสารบมไพอย 52 ใบจรง)

ถาเราทาใหยนตเทสของเรานนสามารถรนแบบ automate และรนไดงายๆ ไดดวยแลวนนมนจะเปนประโยชน๑มาก เพราะเราจะสามารถรไดทนทเลยวา สวนทเราเพงแกไขไปในโคดนน จะไปทาใหโคดสวนอนทางานผดหรอไม (more on this in Chapter

15, Continuous Integration: Making It Production-Ready)

ในแอจไจล๑โปรเจคทวๆไป จะมยนตเทสกนอยในระดบจานวนรอย ถงพนกเปนได ซงกจะรวมไปถงการตรวจสอบโคดทงหมดไมวาจะเปนสวนทเปนการคานวณ Business Logic ของระบบ ไปจนถงการจดเกบขอมลของลกคาลงดาตาเบส คณประการตางๆ ทเราจะไดจากการเขยนยนตเทสอยางมากมายกบโคดของคณ ไดแก:

● ยนตเทสสามารถบอกเราไดในบดเดยวน ○ เมอไหรกตามทคณไดทาการเปลยนแปลงโคด และทาใหหนงในยนตเทสของเราไมผาน คณกเกอบจะเรยกได

วารโดยทนทวาสงทคณแกไปนนตองไดรบการแกไข ไมใชวากวาจะรกขน Production ไปแลวสามอาทตย๑

Page 180 of 220

○ ทดสอบทกจด ทคดวาเปนจดเสยงทจะเกดปญหาได ■ Extreme Programming (XP) มคตพจน๑ประจาใจขอนงกลาววา “จงทดสอบทกจด ทคดวาเปนจด

เสยงทจะเกดปญหาได” ขอความดงกลาวจะชวยเตอนนกพฒนาวา ถามจดใดกตามทคดวาจะเปนจดทสามารถสรางความเสยหายตอระบบได จดตางๆ เหลานนกสมควรเปนอยางยงทจะมยนตเทสทสามารถรนแบบออโตไดมาประกบ

■ เราไมสามารถทจะทดสอบไดทกๆจดของสงทเรากาลงพฒนาอยกจรง แตสงเตอนใจดงกลาวไดแสดงถงแกนของการทแอจไจล๑พยายามใหทมคดถงการเทสในอกมมนง ทดสอบใหเพยงพอ และพอเพยงในระดบททาใหเรามนใจไดวา software มนทางานไดถกตอง ซงตองใชวจารณญาณของคณเองเพอตโจทย๑วาเราทายนตเทสแคไหนถงจะคมคา คมกบเวลาทใชไปทสด

■ ในบทท 14 ในหวขอเรอง Test-Driven Development เราจะไดเหนวา มนจะชวยใหเราประมาณ

การไดวาจดคมทนทสดในการทเราจะมจานวนยนตเทสเทาใด แคไหนนนไดอยางไร และรวมไปถง

การหาจดสมดลย๑ระหวางการทดสอบทกสงทกอยาง กบเทสแบบพอด

■ ยนตเทสชวยลดคาใชจายในการทา regression test ไดอยางมากมาย

● แทนทจะตองเสยเวลาไปกบการทาการเทสทกอยางดวยมอเวลามเวลามเวอร๑ชนใหม การ

เทสแบบออโตจะชวยคณประหยดเวลาตรงนไปไดอยางมาก ซงจะทาใหคณมเวลาทจะ

เทสจดทซบซอนมากกวา

■ ยนตเทสชวยลดเวลาทใชในการ Debug

● หากคณพบวามยนตเทสทไมผาน คณจะรไดเลยวาสวนใดของโคดคณทมปญหา ไมตอง

เปด Debug เพอทจะมองหาโคดเปน พนๆบรรทด เพอหาจดทนาจะทาใหเกดปญหา

■ ยนตเทสชวยใหคณนาสงงานของคณไดอยางมนใจ

● มนกเปนความรสกทด ททกครงทคณนาสงซอฟแวร๑ คณรวามมนไดผานยนตเทส แบบ

อตโนมตมาแลวตงแต กอนนาสง ถงแมยนตเทสจะไมไดชวยไดทกอยาง แตอยางนอยมนก

ทาใหคณมเวลาไปทาการเทสจดทตองตอกบระบบอน หรอจดทมความซบซอน

ลองคดถงยนตเทสวามนเปรยบเสมอนกบเสอเกราะของอศวนทกาลงจะออกไปสรบสครบ พอทายนตเทสไป มนกเหมอนกบเปนสเปคทสามารถทจะรนไดดวย และจะอยเคยงขางโคดของคณชวนจนรนดร๑ และจะคอยชวยปองกนเราไมวาจะเปน จากมสไซค๑ มงกรพนไฟ ตวจรง หรอในจนตนาการ และทสาคญตวเรานนเอง

Page 181 of 220

ขอควรระวง: คณอาจจะทายนตเทสไปจนถงชวงทคณรสกวาการเขยนออโตเมตเทสนนยากเยนเหลอเกน ตวอยางเชน เขยนเทสท๑พอตรวจสอบวาไพของเรานนสามารถถกสบได นนยาก (เพราะผลลพท๑ของการสบแตละครงนนกจะไมเหมอนกน) และการเขยนเทสในเรองทมการทางานเกยวกบ concurrency และ มลตเทรด นนกทาทายมากเชนเดยวกน

ถาคณเจอกบสถานการณ๑เหลาน กอยาเพงถงขนสนหวงกนนะครบ สงตางๆเหลานคอสงทไมไดเจอกนทวๆ ไป และในหลายๆ กรณจรงๆ แลวคณสามารถทจะสรางออปเจค และจดตรวจสอบขนมา ใน method ทคณตองการจะเรยก และนกเปนจดทสามารถทจะนา mocking framework ทมกนอยในปจจบนนมาชวย

สวนในบางกรณจรงๆ ทคณพบวาไมสามารถทจะทายนตเทสไดเลย นนมนนาจะมสาเหตมาจากเรองการออกแบบตงแตแรกมากกวา (ลองดในบทท 14 เรอง Test-Driven Development) หรอคณอาจจะคดลอก โคดเกาซงยากตอการเทสตงแตตนอยแลวกเปนได

ถาพบความจรงดงนน คณเองกตองยอมรบความจรงทวา คณเองกไมสามารถทาการเขยนยนตเทสใหครอบคลมทงหมด ทกสงทกอยางได กเพยงใหแนใจวาคณเองมการเทสอยางอนมารองรบแทน ไมวาจะเปนแมนนวลเทส หรอ exploratory testing

เพยงแคอยายอมแพ! ตองระลกเสมอวาคณตองออโตเมตยนตเทสเหลานนใหไดมากทสด เพราะมนจะเปนเหมอนเกราะปองกนทจะมาชวยคณเอง จากบางครงหากมความจาเปนตอง แก Bug ฉกเฉน และจาเปนตองออก Release ใหมอยางเรงดวน

นอกจากนคณสามารถอานหนงสอของ Michael Feathers ทชอวา Working Effectively with Legacy Code ซงมคาแนะนามากมายเกยวกบการทางานกบโคดเกา และทาใหมนงายตอการเปลยนแปลงในอนาคต

Page 182 of 220

เรามาลองคดเหมอนกบเราเปน Tester กนนะครบ วาเราจะเขยนยนตเทสเพอทดสอบ คลาสสารบไพ อะไรบาง จากความตองการของลกคาดานลางน? และเราจะสามารถหาวธปองกนไมให Bug เกยวกบไพโจ๏กเกอร๑ กลบมาไดอยางไร?

ถายนตเทสของคณ ดละมายคลายกบโคดขางลางน แสดงวาคณกาลงมาถกทางแลวครบ เราตองการทจะมยนตเทสเพอทดสอบใหไดมากทสดครอบคลมทกจดทอาจทาใหเกด Bug ได ดงนนหากคณเกดความสงสยวาจดใด อาจจะทาใหเกด Bug ไดกใหเขยนยนตเทสใหจดนนไดเลย

Page 183 of 220

คาอธบายสาหรบบคคลทวไป โคดดานบนนนคอยนตเทสทใชในการ:

● ทดสอบวาไพในแตละชดม 13 ใบ

● ใหแนใจวาไมมไพโจ๏กเกอร๑อยในสารบ

Page 184 of 220

● ตรวจไพทกใบในสารบ (ทงหมด 52 ใบ)

เราจะไปศกษาเพมเตมไดทไหน?

ในบทนเราเพงจะเรมไดสมผสถงผวๆ ของเรองยนตเทสเทานน ซงกลาวไดวายงมเรองราวอกมากมายในหวขอน โชคดทยนตเทสในขณะนนนเปนทรจก และใชกนอยางแพรหลายมากขนในการพฒนาซอฟต๑แวร๑ ซงในภาษาคอมพวเตอร๑สมยใหมนนจะมยนตเทส Framework ไวใหใชกน (ฟรและพรอมใหดาวโหลดรออยแลว) รวมถงโปรแกรมการสอนใชงานเบองตน

จดเรมตนสาหรบนกพฒนาทตองการ เขาถงแกนของการทายนตเทสนนคอ บทความ1คลาสสกของ Kent Beck

ศษย: ทานอาจารย๑ เปนไปไดอยาไรทการทายนตเทสจะไมทาใหทมทางานไดชาลง? หมายถงวาเรากาลงตองเขยนโคดมากขนถงสองเทาไมใชหรอครบ?

อาจารย: ถาการเขยนโปรแกรมคอการพมพ๑ดด ประโยคนนกอาจจะจรง ยนตเทสนนมขนเพอชวยยนยนวาเมอไหรกตามทเราเปลยนแปลงโคด ทกอยางทเคยทางานไดกยงทางานไดเหมอนเดม นกชวยประหยดเวลาของเราไมใหตองไปทาแมนนวลเทสทงระบบ ทกครงทเรามการเปลยนแปลงโคด

ศษย: นนกถก ทานอาจารย๑ วาแตไอเจายนตเทสเนยมนจะไมทาใหโคดของเราเปราะบางลงหรอ? แลวเราจะมนใจไดอยางไรวา ทกครงทเราแกโคด ยนตเทสจะตองผานเสมอ?

อาจารย: ถงแมจะมความเปนไปไดทวายนตเทสของเรานนถกเขยนไดไมด ซงมทง ขอมลท hard-coded ไว, tightly coupled,

มการออกแบบทไมด แตคณกเรมชนกบการใหเทสนนเปนตวชวยกาหนดการออกแบบ (บทท 14 Test-Driven Development)

คณจะพบวายนตเทสของคณนนจะไม break แตกลบชวยปรบปรงการออกแบบใหดขน ปจจบนนเครองมอพฒนาสมยใหมสวน

1http://junit.sourceforge.net/doc/testinfected/testing.htm

Page 185 of 220

ใหญ ชวยใหเราเปลยนโคดของเรา หรอในยนตเทสไดสะดวกขน คณสามารถทจะแกไขชอ method ในทกๆทในโคดดวยการกดแปนพมพ๑ไมกครง ซงจะชวยใหเราสามารถทาใหยนตเทสโคด และ โคดทเอาไวใชจรงนนไปดวยกน

ศษย: จรงหรอไมทเปาหมายของทมเราในการทายนตเทสนนคอ ครอบคลม 100 % ?

อาจารย: ไมถกตอง เปาหมายของยนตเทสนนไมใชเรองความครอบคลม มนเพยงแคใหความมนใจกบศษย๑ และทม นนพรอมทจะใหลกคาใชงานแลว

ศษย: ถาอยางนน ยนตเทสควรจะครอบคลมมากนอยแคไหน?

อาจารย: นนกแลวแตตวศษย๑และทมจะตองตดสนใจ ในบาง Frameworks หรอภาษานนชวยใหการทาเทสใหครอบคลมนนงาย แตในบางภาษานนทาไดยาก ถาศษย๑กาลงเพงจะเรมตน กอยาไปกงวลมากเรองความครอบคลม แคเพยงตงหนา ตงตาเขยนยนตเทสใหไดมากทสดอยาสดฝมอกพอ

What’s Next?

เกงมาก ตอนนคณกไดรจกกบ หลกการพนฐานสาคญขอหนง ของการพฒนาซอฟต๑แวร๑แบบแอจไจล๑ ถาไมมออโตเมตยนตเทส สงอนๆกไมอาจเกดขนไดเชนกน

ถดไปเราจะไปดกนวาการสรางยนตเทสของเราเอง และทาอะไรทสาคญทบางครงอาจทาใหเราขามการทายนตเทสไปได โปรดกส๑ของเรานนกจะมราคาทสงเกนจรง ทมแตโคดทบารงรกษาลาบาก และไมสะดวกตอการเปยก

เราลองไปดกนเลยครบ สาหรบ practice ทสาคญซงกคอ การรแฟคเตอร๑

Page 186 of 220

ตอนท 13: รแฟคเตอร: กลบมา

ขจดความมวทางเทคนคททงไว

ทาไมชางเปรยบเทยบไดอยางใจรายใจดาวาซอฟท๑แวร๑นนเหมอนกบบานทตดจานองทเราตองผอนดอกเบยไปเรอยๆเพอ ลดจานวนหนลองไปนนมนบานแลวซอฟท๑แวร๑ตจะผอนออะไรอะ งง? บททนเราจะมาเรยนเรองการทารแฟคเตอร๑วา กระบวนการนชวยใหเราใชหน ไมใช ชวยใหเราปรบปรงและรกษาคณภาพของซอฟท๑แวร๑เราใหดขนเสมอไดอยางไร มาดกนวาเราใชหนทางเทคนคกนยงไง ???

13.1 Turn on a Dime (มองผาน ตอนแรกอานเปน Damn)

เรามาดสถานการณ๑กนกอนกอนหนานเรายดครองสวนแบงตลาดทงหมดของคาสโนทงหมดไวไดเพราะไมมคแขง “เรารวยส๑” แต

หลงจากเรารารวยไดไมนานคแขงของเรากถอกาเนดและโปรดกส๑ของฝายนนกขายดอยางกะครสปครม เรากไมมทางปลอยให

ทางโนนแซงไปไดจงรวบรวมพลงงานและเรมแกไขปรบปรงซอฟท๑แวร๑ของเราใหดขน (หวงวา) และแลวสงทเราคาดหวงกไมเปน

ดงฝนสงทเราคดวาจะดง แจ๐วแจมแหลมระเบดกลบกลายเปนงานยาก เพราะอะไรหรอยกตวอยางเชนโคดของเราไมมการจดการ

ใดๆเลยเรา copy n paste กนใหมนมอมวไปหมดใน code base ของเรา การทาแบบนสงผลรายกบเรามากเนองจากทกครงทเรา

ตองการเพมความสามรถใหมเขาเราตองพบกบงานชางคอเราตองไปตามแกไอกอนโคดทเราได copy n paste ไปทวและนรกตก

ใสมากกวานนโคดเกาทเราคดวาทาเสรจไปแลวเมอ base line ทแลวเกดอาการเพยนกลบมาหลอกหลอนทมเราอกและเอาให

หนกเขาไปอก ไอคนทเขยนโคดชดทแลวเขาไดลาออกจากทมไปเรยบรอย!!!! เราลองมาดตวอยางโคดเทพกนดกวา public bool DealerWins(Hand hand1){

var h1 = hand1; int sum1 =0;

foreach (var c in h1){

sum1 += Value(c.Value, h1);

}

Page 187 of 220

var h2 = DealerManager.Hand; int sum2 =0;

foreach (var c in h2){

sum2 += Value(c.Value, h2);

}

if (sum2>=sum1){

return true;

}else

return false;

return false;

}

อยาตกใจถาอานไมเขาใจ (ถาอานเขาใจสประหลาด) เนยแหละครบหนาตาโคดทเราตองดมนตอ การทเราตองมานงทา งานกบ

โคดแบบนมนเสยเวลาสนด เลยเถดทาใหเสยเงนมากขนไปอกดงนนเพอเปลยนโคดเหลานใหกลบมาเปนสงทถกตองเราตองการ

เวลา 2 อาทตย๑แตเสยใจดวยชวตจรงมนไมไดขอเวลาสองอาทตย๑งายๆกนแบบนน มนเกดอะไรขนกบแคโคดชดเลกๆทเคยด

สวยงามอยดๆมนกกลายรางเปนสตว๑ประหลาดนากลว ควบคมไดยาก นแหละคอสงทเราเรยกวา หนทางเทคนค ทเราจะรจกมน

ในสวนตอไป

13.2 หนทางเทคนค

Page 188 of 220

ถาจะใหอธบายงายๆเรากสามารถเปรยบเทยบใหเหนภาพวาหนทางเทคนคคอโคดแยๆทโปรแกรมเมอร๑ทาไมดทงไวใน ไมวาจะ

เปนการแกปญหาแบบทางลด(shortcutss) การแฮคสารพดเพอใหสงงานได(hack) การคดลอกโคดไปวางในทตางๆทาใหเกด

ความซาซอน(duplication) และบาปอนๆอกมากมายทโปรแกรมเมอร๑มกจะชอบทาตอนงานเรงๆ ไอพฤตกรรมไมดเหลานนเอง

เปนสงททาใหเกดหนทางเทคนค(ถาไมมหนเลยกดจะแปลกเกนไป นนมนเทากบวาเราไมเคยคดทจะทาอะไรใหมๆเลย)

หนทางเทคนค มนไมใชแคโคดนะครบ

หลายๆคนกคงคดวาหนทางเทคนคนนมนคอโคด(หวย) ทเราหรอใครไดเขยนทงไวแตโคดเปนแคของสวนใหญ

เพราะหนเราสรางไดหลายแบบมากบางครงเรามองไมเหนเชน config file, data กมมาใหเราแกเสมอ

ครงหนง(คนเขยนไมใชคนแปลนะ)เคยเปนหนงในทมงานรอระบบขนาดใหญทมความซบซอนมาก หนงในนนคอเรอง

มาตรฐานการเขยนชอเมองตางๆท "ไมม" ดงนนภาระหนกทตองทาคอเขยนโคดขนมาเพอชวยในการแปลงคาเหลานนให

ตรงกน แทนทจะสบายกบงานเลกนอยๆแบบนกลายเปนวาตองจายแพงและดคดชดนกตองอยในระบบไปอกนาน เพราะ

ยงตกลงกนไมไดวาจะใชอะไรเปนคากลางด !!!

อยางไรกตามการใชทางลดหรอการแกปญหาเฉพาะหนานนกตองมกรอบหรอเพดานกนบางไมเชนนนไอสงเลกๆทเรยกวาทางลด

นนมนจะกลบมาทาใหเราเจบปวดแสนสาหสในภายหลง

หนทางเทคนคสามารถพบเหนไดหลายรปแบบยกตวอยางเชน (spaghetti code, excessive com- plexity, duplication, และ

general sloppiness) และทกอยางกจะมพฤตกรรมในการแสดงความเทพทแตกตางกนเมอยามเกดปญหาแตสงทมนทา

เหมอนกนคอมนจะทาใหเราปวดกระโหลกมากกกกกเมอเราตองมาตามแกปญหาเหลาน ดงนนเราตองการอะไรสกอยางท

สามารถเขามาชวยเราลดหนทเราหรอคนอนทงไวเพอใหเราสามารถสรางซอฟท๑แวร๑ทมคณภาพและสามารถรองรบความทาทาย

ทจะเกดขนในอนาคตโดยทไมตองมานงกงวลวาหนเกาจะกลบมาหลอนเราอกเมอไหร สาหรบวถแหงแอจไจล๑เราเรยกเครองมอน

วา Refactoring

13.3 เรามาแกไขความผดพลาดดวยการท า Refactoring กน Refactoring เปนกระบวนการทางานทเนนเรองของการเปลยนโคดของซอฟท๑แวร๑ทละเลกละนอยเพอเพมคณภาพของงานโดยจะไมมการเปลยนพฤตกรรมภายนอกของซอฟท๑แวร๑

หรอพดงายๆคอเปลยนโคดเฉยๆไมมการเพมฟเจอร๑หรอแกไขบกใดๆทงสน เราปรบเพอใหโคดดขน

อยางไรกตามการปรบโคดของเราแนวนจะชวยใหโคดของเราเขาใจไดงายขน เมอโคดเขาใจไดงาย แนนอนวาเรากสามารถเปลยนมนไดงายขนในอนาคต และไอการปรบโคดแบบน

เราเรยกวา รแฟคเตอร๑รง ดงนนทกครงทเรากลบมาทโคดเกาของเราและทาการเปลยนชอ เมธอดหรอตวแปรทดหรออานแลวไมสอใหกลายเปนชอทสอมากขนเราเรยกการทางานน

วาเรากาลง รแฟคเตอร๑ โคด

การแกไขโคดแบบนอาจจะดเลกนอยไรคาในครงแรกๆแตอยาไดมองขามมนไปนะครบเพราะวาถาเราตงใจทามนอยางตอเนองยาวนานกบ code base ของเราสงเลกๆเหลานจะชวย

ทาใหเกดผลดกบโคดของเราไดโดยเฉพราะในเรองของคณภาพ ยกตวอยางเชนเราลองมาดโคดชดเลกๆกนแลวเลอกวาแบบไหนอานไดงายและเขาใจไดมากกวากน

Page 189 of 220

จากตวอยางโคดดานบนตอให พอลลา เทย๑เลอร๑ มาอานกตองเลอกแบบทสองเพราะอะไรเพราะการเขยนโคดนนสามารถ

เปรยบเทยบกบการเขยนโคลงกลอนกวาได โคดตองอานเขาใจไดงาย ดสะอาดตานามอง มนนาอานกวากนเยอะ และการไดมา

ซงโคดแบบนนนหนไมพนทจะไดมาจากการทา รแฟคเตอร๑ นนเองโดยทหลกการของการทา รแฟคเตอร๑ กไมมอะไรมากไปกวา

การใชชอทเรยบงาย ซอนรายละเอยดทไมจาเปนไว แคนโคดของเรากจะอานสะดวกขนเยอะมากๆแลว

ดงนนการทารแฟคเตอร๑เองโดยเนอแทแลวไมมอะไรเลยนอกจากแนวคดทจะทาใหโคดของเราสวยงาม เขาใจงายเพราะเมอมน

ถกสรางขนมาแลวมนยงตองถกดแลแกไขไปอกสกระยะ(ไมรวาสนหรอยาวเทาไหร) ดงนนหนาทของเราคอทาใหมนดแลงาย

เพราะเราจะรสกสนกทกครงทมการเปลยนแลง เราจะไมกลวการเปลยนแปลงใดๆทงสน

รแฟคเตอร๑ จดใหหนก†จดใหตอเนอง

การทารแฟคเตอร๑ทดคอเราตองเราใหบอยๆทาทกวนอยาเวนไวทาตอนจะจบโปรเจค ถาเราทาไดแบบนเราจะไมมปญหา หรอ

ขออางมาอางวาการทารแฟคเตอร๑ทาใหงานเราชาลงในชวงทเรงจะปดงาน ดงนนจงทามนทกวนเอาใหเขาเสน

และเมอเราทามนจนชานาญแลวการทาฟแฟคเตอร๑จะกลายเปนสวนหนงของเรามนจะกลมกลนไปกบการทางานโดยทบางครง

เรากแยกไมออกเพราะมนกลมกลนกนมากๆถาถงขนสงสดเราจะแยกไมออกเลยวาการเพมฟเจอร๑ใหมเขาไปใน โปรเจคกบการร

แฟคเตอร๑ตางกนอยางไร (ดสงสงมากครบแตทาไดจรง)

Page 190 of 220

ไดเหนทฤษฎกนไปเยอะ มาลองลงมอทากนใหมนสมอ

เราตองปรบอะไรบางกบสดยอด black jack ของเรา

ทแรกทเราควรจะทารแฟคเตอร๑คอการสารวจดวามตวแปรหรอเมธอดไหนทชอไม สอ บาง

ดงนนอยารอชามาเปลยนมนกนเถด

Page 191 of 220

ดดขนมาหนอยครบ อานงายขนมานส แตยงงานเพงเรมสวนตอไปคอหาสงทซากนออกไปเรามาหากนหนอยวาลอจกบรเวณไหน

มนซากนบางเอามนไปตงเปนเมธอดใหมซะ

ดหลาขนมากมายครบหลงจากทเราไดแยกลอจกทซาออกมาเปนเมธอด GetPlayerHandValue ทาใหเมธอด DealerWins ของ

เราลดขนาดลงเหลอสามบรรทด สงผลใหเราเขาใจการทางานของมนมากขนยงไมพอครบเรายงไปไดอกดวยการทาดงน

Page 192 of 220

สรปกนหนอยวาทปานมาเราทาอะไรบาง เราทางานงายๆไปสามอยางคอ

เปลยนชอตวแปร เมธอด

เปลยนมาใช inline variable

แยกลอจกทซาออกมาเปนเมธอดใหม

เมอเราทาสามอยางนแลวเรากไดโคดทสวยขน อานงาย คนทวไปสามารถคาดเดาพฤตกรรมของ โคดชดนไดเมอถงเวลา ท

ตองการเปลยนหรอเพมอะไรกทาไดงายขนใชคนนอย เวลานอย ใชเงนนอย เมอไดเหนประโยชน๑ทเกดขนแบบนแลวเรากควรจะ

ตงใจ ผลกดนใหโปรแกรมเมอร๑ทกคน มคาวา “รแฟคเตอร๑” อยในหวใจ ทาใหบอยๆ จดใหหนก

เปนคาถามทดไดนองเอ๐ย ในบางครงบางกรณเรากตองเจอกบการปรบเปลยนในระดบใหญมากกวาการเปลยนทละนอย

แบบทเราเพงวากนไป เชนเราอาจจะตองเปลยน library หรอ framework ทจาเปนตองเปลยน ถอดเปลยน หรออาจจะตองการตอ

เขากบเครองมอตวอน หรอไมวาจะดวยเหตผลกลใดการทา รแฟคเตอร๑ขนาดใหญกตองเกดขนบาง แลวเราจะรบมอมนยงไงด

ถาการทารแฟคเตอร๑นมาจากคนนอกทมเรากจดการมนใหเหมอนกบเปน story หนงๆแลวกนากระบวนการแอจไจล๑สดเทพ

ของเราเขาไปจดการเชน ประเมน มน, จดความสาคญมน, ตราคา, และวเคราะห๑ผลกระทบทจะเกดกบโปรเจคโดยรวม

Page 193 of 220

Refactoring Gets a Dirty Name

Once, while building an energy-trading application, our team went off and did several large-scale refactorings in the

code base and didn’t add much in the way of new functionality for several weeks. Well, it didn’t take long for

management to come to despise the word refactoring (because it came to mean rework and not adding any new

functionality), and soon the edicts came from above that thou shalt not refactor.Don’t let this happen to you. Refactor

continuously as you go.It’s much harder to pay down the technical debt later, and the last thing you want to do is

give refactoring a dirty name.

จรงๆแลวการจดการกบปญหาเหลานสามารถกตองใชวจรนญาณมากพอสมควร เนองจากถาเราเหนวาการทารแฟคเตอร๑ขนาด

ใหญมความสาคญและเราสงกองทพโปรแกรมเมอณลงไปทางานนนเทากบวารายจายของเราจะเพมขนอยางเหนไดชด ดงนนถา

เกดเหตการ๑ณแบบนกอนตดสนใจลงมอทาอะไรใหคอถงสองขอคดนกอน

1. โปรเจคเราใกลจบยง?

2. จรงๆแลวไอรแฟคเตอร๑ใหญเนยมยใหญจงปะ หรอ เราสามารถทะยอยทาไปทละนอยไดไหม?

เนองจากการทารแฟคเตอร๑ขนานใหญมนทาใหเราเสยเวลา ดงนนเราจะไม สามารถทางานตามแผนทวางไวไดเพราะฉะนนแลว

ถางานเรางวดมากๆใกลจะสงแลว ใหหยดการทารแฟคเตอรไวกอน แตถามนจาเปนตองทาและงานยงอยระหวางกลางกใหแบง

ทาไปทละเลกละนอยเนองจาก เรายงสามารถทาฟเจอร๑ใหมและคอยซอมของเกาไปเรอยๆ ถามนตองทา กตองทาแตจะดมากถา

เราสามารถทะยอยทาได

เราจะไปศกษาเพมเตมไดทไหน?

เนอหาเรองรแฟคเตอรทเราเพงจบไปนนเปนแคสวนผวบางๆมากๆเกยวกบการทา รแฟคเตอร๑ ดงนนถาจะทาใหถกตองไปอาน

เพมเตม โดยหนงสอทแนะนาเกยวกบเรองนคอ

1. Martin Fowler’s Refactoring: Improv-ing the Design of Existing Code [FBB+ 99].

2. Michael Feathers’ Working Effectively with Legacy Code [Fea04].

Page 194 of 220

ศษย:ทานอาจารย๑ มสงไหนบางทเราควรหลกเลยงสาหรบการรแฟคเตอร๑

อาจารย: กไมควรทา รแฟคเตอร๑ ใหญๆไงเราควรจะทา รแฟคเตอร๑ ทกครงทเราแกไขปรบปรง ซอฟท๑แวร๑ของเรา

ศษย: จะผดไหม ถาเกดวาทง iteration องเราไมทาอะไรเลยนอกจากการทารแฟคเตอร๑โคด

อาจารย: มนกเปนไอเดยวทพอฟงไดนะศษย๑ แตทางทดเราควรจะทา รแฟคเตอร๑ บอยๆทาทละนอยๆเพราะการทา รแฟคเตอร๑

ขนาดใหญมนเปลองทงเวลาและเงนดงนนจงท ำรแฟคเตอร๑ใหญกตอเมอมนจาเปนเทานน

What’s Next?

ตอไปเราจะไดเรยนเรอง ยนทเทสท๑ และการทารแฟคเตอร๑ ไปพรอมๆกนเมอเราเอาสองกระบวนทานมารวมกนแลว เราจะทาให

design หวยๆหมดไปปจากระบบของเรา

เปดตาราทหนาตอไปโดยเรวพลนเพอศกษาวาเคลดวชา TDD นน เมพ ขนาดไหนเราจะเขยนซอฟท๑แวร๑ไมไดถาไมม ยนทเทสท๑

อะเทระเบด

Page 195 of 220

บทท 14 ทดด :เขยนยนตเทสตซะ

กอน นคณ ตดอยตรงนมานานแคไหนแลว ไปไมเปนเลยละส ทงวนเขยนไดเทานเองเหรอ จะไปทางไหนตอละทน ดอรคเคาเปน

ตวอยางสคณไมแปลกใจเลยหรอทอรคเขยนโคดยงไงกเวร๑คตลอดบางทคณกยมโคดเคามาใชบางมนกยงเวร๑คอยเลย ยงกะเคาร

วาคณนะตองการจะทาอะไร สงทอรคเคาทากแคมยนตเทสต๑ครอบไวแถมยงรนเทสต๑อตโนมตซะดวย

อรคเคาทาไดยงไงนะแบบนน แลวอยากรมยวาคณทาไมเหมอนเคาตรงไหนเอาละ ถงคราวทคณจะตองเลกฉนเฉยว รวบรวม

ความกลาแลวเดนไปขอความชวยเหลอจากอรคเคาไดแลว“อรค ถามหนอยนะ นายทายงไง โคดนายถงดสะอาด แลวกดแบบน”

“งายจะตาย” อรคตอบ “ฉนกแคเขยนยนตเทสต๑กอนเขยนโคดนะส”

14.1 เขยนยนตเทสตกอน

ทดด (Test-driven development) เปนเทคนคการพฒนาซอฟต๑แวร๑ทชวยทาใหตวดไซน๑เพมขนทละนดจากการใชรปแบบของ

วงจรการพฒนาซอฟต๑แวร๑ (development cycle) ทสน ยงไงนะเหรอ มารจกวงจรทดดกอนดกวา

Page 196 of 220

ขนแรก: พง ‟ กอนจะเรมเขยนโคดของระบบ คณตองเรมเขยนยนตเทสต๑ซะกอน แหงละมนกรนไมผานอยแลวแตทใหเขยนก

เพอใหรวาโคดของระบบนะมนจะทาอะไร นถอวาคณกาลงออกแบบระบบอยเลยนะ คดใหดละ

ขนสอง: ผาน ‟ ขนตอนนคณเขยนโคดระบบไดเลย เขยนยงไงกไดใหยนตเทสต๑มนรนผาน เอาแคใหมนผานพอนะ ถาคณอยาก

เขยนโคดระบบเพมมากกวายนตเทสต๑ทเขยนไวละก กลบไปเพมยนตเทสต๑กอนเลย

ขนสาม: ปรบ ‟ เมอคณรนเทสต๑ผานแลว กไดโอกาสทคณจะกลบไปแกโคดระบบสวนทมนเนาๆ กไอสวนทคณเอานนนมาโปะ

เพอใหยนตเทสต๑มนผานนะ งายๆกแคเอาเอาโคดทมนซาๆกนออก โคดไหนไมใชกลบๆไปซะ กแคทาใหมนดสะอาดหนอยก

เทานน

“แลวเราจะเลกทาสามอยางนเมอไหรละ” อรคบอกวาเคากทาสามอยางนวนไปเรอยๆ จนกวาเคาจะแนใจวาโคดระบบนนทาได

ทกอยางตามททก user story ตองการ (ยงไงนะหรอ ก exit criteria ผานหมดทกขอแลวนะส) นอกจากน อรคยงตงกฎไวใหตวเอง

เพอใหไมหลดวงจรทดดดวย เคายกตวอยางมาใหด 2 กฎ

กฎขอท 1: ไมเขยนโคดระบบเพมถายนตเทสต๑ยงผานอย

แตอรคกบอกนะวา ไมตองเครงกบกฎตลอดเวลาหรอก เพราะวามนกมโคดบางอยาง จะใหมาทายนตเทสต๑กอนมนกยาก อยาง

พวก interface แตทตองเครงกบกฎขอนมากๆกคอ เราควรจะเขยนโคดระบบเทาทจาเปนเทานน การเขยนยนตเทสต๑ขนมากอน

มนกเปนการบงคบไปในตววาเราไมไดเขยนโคดเกนพราเพรอ หรอทเรยกกนหรๆวา over engineering นนแหละ

กฎขอท 2: เทสต๑ดะ

เราตองเทสต๑ทกกรณทเราคดวาระบบมนจะพง แตดกฎขอนใหดๆนะ มนไมไดหมายความวาตองเทสต๑ทกอยางนะ เพราะอะไรนะ

เหรอ กเราตองใชเวลาทงชวตนะสถาจะใหมนครบทกอยาง เอาเปนวาเทสต๑เฉพาะเคสทมนนาจะเกดกพอแลว หรอเคสอยางเชน

ถาระบบเราอยใตภาวะหนงแลวมนตองพงแนๆ กทายนตเทสต๑เพอเทสต๑โคดของเรากเทานน

ดตวอยาง

Page 197 of 220

อรคอธบายวาเคากาลงจะเขยนโคดสาหรบเกบโปรไฟล๑ของนกพนนในเวกส สงทเจาของกาสโนอยากรเกยวกบนกพนนพวกนก

เชนอะไรทคนพวกนชอบ ไมชอบ อาหาร เครองดม หรออะไรกไดทจะชวยดงใหนกพนนพวกนกลบมาเปนลกคาทกาสโนของเคา

อก โคดทอรคเขยนกเปนออบเจคโปรไฟล๑งายๆ แลวเคากตองเกบโปรไฟล๑พวกนลงไปในฐานขอมลดวย พอเคาจะเรมเขยนโคด

แนละ เคากตองเขยนยนตเทสต๑ขนมากอน สงทเคาทากคอ ใชจนตนาการวาหนาตาโคดระบบมนจะเปนแบบไหน จากนนกออก

จากความฝนแลวเรมลงมอเขยนยนตเทสต๑กอน เพอพสจน๑วาโคดทเคาเหนในจนตนาการมนจะใชไดจรงไหม หนาตาของยนต

เทสต๑ทอรคเขยนเปนแบบไหนกนนะ

หลงจากมยนตเทสต๑ใหอนใจวาตอนทเพมโปรไฟล๑เขาไปในระบบมนจะไมพงแลว กไดเวลาเปลยนเกยร๑มาเขยนโคดระบบกนตอ

เลย จะเขยนยงไงดนะใหเจายนตเทสต๑มนผาน อ๏ะ! จากยนตเทสต๑กเหนอยแลววาเมธอดทตองการคอสรางเมธอด รบพารามเตอร๑

เปนออบเจคโปรไฟล๑ แลวกใสลงไปในฐานขอมล คดไดแลวกมาเรมเขยนโคดระบบกนเถอะ

Page 198 of 220

เขยนเสรจแลว กรนตวยนตเทสต๑ อ๏ะ! ผานแลว ดใจจงเลยพอยนตเทสต๑ผานกตองมาปรบปรงโคด กทารแฟคเตอร๑นะแหละ กตอง

ไปไลดใหหมด ไมวาจะเปนโคดระบบ โคดในยนตเทสต๑ คอนฟกไฟล๑ หรอใดๆกแลวแตทอรคไปแกเพอใหยนตเทสต๑รนผาน

พอทารแฟคเตอร๑เสรจแลว กมานงคดใหมวามนจะมเคสในอกไหมทจะทาใหระบบพงได อยาง story นยงจะตองเทสต๑วาโปรไฟล๑

ในระบบจะไมซากนดวยคดไดแลวกใสเกยร๑ถอยกลบไปเรมใหม เขยนยนตเทสต๑กอน ใสเกยร๑อกครงเพอเขยนโคดระบบ รนยนต

เทสต๑ พอรนผานหมดแลวกรแฟคเตอร๑ไอเรองการเขยนยนตเทสต๑กอนน มนกเหมอนเรองไกกะไขอะไรเกดกอน เพราะบางทมนก

ยากเหมอนกนทจะไมมโคดระบบมากอน เอาละไมเปนไร กลบไปเขยนเมธอดในโคดระบบกอนกได แตกเอาแคพอทจะเขยนยนต

เทสต๑ตอไดนะ แลวกมาเขยนยนตเทสต๑ตอใหเสรจ หามโกงจนนาเกลยดละ เอาละ ทนกพอจะเหนแลวใชไหมวาทดดเคาทากน

ยงไง ลองกลบไปทากนเองไดแลว

ทวนกนสกนด

เอาละ กอนจะไปตอ เรามาทวนเรองทดดกนหนอยแลวกน วามนคออะไร แลวทาไมมนถงสาคญนกหนาทดดคอการเขยนยนต

เทสต๑กอน จากนนเขยนโคดระบบ รนเทสต๑ใหผาน เทานเอง มนออกจะฝนๆแลวกไมเหนจะมใครสอนเราใหทาแบบนมากอนใช

ไหมแตคดดๆ อกทส ทดดมนกคอการออกแบบระบบนะ ดกวาวาดเอาในความฝนแลวคอยมาเขยนโคดระบบใชไหมละทดดยง

ชวยใหเราเขยนโคดระบบแบบพอเพยง ไมเขยนเผอเขยนเกนดวยนะรนะวาจะใหคณกลบไปแลวเรมทาทดดเลยนะมนยาก ไหน

จะตองรเรองเทคนคการเขยนยนตเทสต๑และการทารแฟคเตอร๑อก แนนอนเลยวาแรกๆคณจะตองงงงวยไปกบมนแนๆ วามนทา

Page 199 of 220

ยงไงกน ไอเจาทดดเนย แตเชอเถอะวา แคคณไดลองเขยนยนตเทสต๑เลกๆสกเคสนง เวลาทคณรนเทสต๑ แลวเหนมนผาน บวกกบ

ทคณไดมเวลามานงรแฟคเตอร๑โคดดวย คณจะตองภมใจในยนตเทสต๑และโคดระบบของคณไดอกเยอะเลย

14.1 จดการความซบซอนดวยยนตเทสต

ปกตเวลาเราเขยนโคดกตองเผชญหนากบความซบซอนของโคดอยแลว ตวอยางงายๆ อยางอรคจะเขยน API ขนมาสกอนนงตอน

เคาเขยนโคดทจะสรางโปรไฟล๑ใหมขนมาในระบบ เคามเรองทจะตองตดสนใจตง 6 อยาง

คดด แคโคดบรรทดเดยว ตองตดสนใจตง 6 เรอง แลวถาเอาโคดทงหมดมารวมกนละ มนจะซกกเรอง แตอยางวามนกตองม

ตดสนใจพลาดบางอะแหละแตถาหากคณทาทดดละ แนนอนคณจะไมเพมโคดระบบเขาไปเยอะแยะมากมาย เวอร๑เกนจรง ตราบ

เทาทคณยงทายนตเทสต๑ใหพงไมได ฉะนนไอความซบซอนของโคดระบบของคณมนกจะลดลงไปโดยปรยาย

หนาซา ทดด ยงชวยใหคณออกแบบระบบไดอยางมนใจไมปวดหว เพราะคณมหนาทแคจดจออยกบการจะทาใหยนตเทสต๑แค 1

ขอรนผานไปไดยงไง ไมใชวาเอาเวลาไปคดถงเรองรอยพนอยางในเวลาเดยวกน อยางนนะมนจะทาใหคณแกปญหาไดไปทละจด

แกเสรจแลวกคอยไปแกปญหาถดไป แบบนมนจะทาใหคณแกปญหาไดถกทางมากกวาทจะมองภาพกวางๆ ใชไหมละ

นอกจากนยงมอก 6 เหตผลทคนเคามกจะเอาทดดมาใชนะ

Page 200 of 220

ทง 6 เหตผลน ลวนหมายถงวาโคดเราจะบารงรกษางาย จะแกไขกงาย ถงจานวนบรรทดจะนอย แตนนกทาใหความซบซอน

นอยลงไปดวย ระบบกออกแบบไวแสนจะงายรองรบการเปลยนและการแกไขไดงายกวาอรคขอจบการอธบายไวแคน เพราะเคา

คดวามนถงตาทคณจะตองมาลงมอเขยนยนตเทสต๑แบบทดดดบางแลว

ตาคณละ

อรคจะลองใหโจทย๑คณในการเขยนโคดเพอเปรยบเทยบคาตวเลขในไพ 2 ใบ อรคคดวามนนาจะตองมการทางานอยคลาสทชอวา

Card และไมตองหวง อรคจะชวยคณเรมเขยนตวยนตเทสต๑ดวยทนลองมาเขยนยนตเทสต๑กอน ขนแรกลองมาเขยนเมธอด เอาชอ

ทคณคดวาสอความหมายสาหรบการเปรยบเทยบคาในไพ

Page 201 of 220

เอาละ เหนชองวางๆนนไหม อรคจะใหคณลองเขยนโคดในตวยนตเทสต๑กรณทคาในไพใบนงมคามากกวาอกใบนง ไหนลองเขยน

เอาละ ทนกไดเวลารนเทสต๑แลว

มนคอมไพล๑ไมผานใชไหม ทนคณลองเขยนโคดระบบ ทายงไงกไดใหยนตเทสต๑นผาน ไหนๆ มาดหนาตาโคดของคณซ

Page 202 of 220

ลองรนเทสต๑ใหม เมอรนเทสต๑ผานแลว อรคกจะถามคณวาคณอยากจะรแฟคเตอร๑โคดตรงไหนไหม สมมตวาคณมนะ หนาตาโคด

ของคณหลงจากปรบโฉมแลวกจะเปนแบบน

Page 203 of 220

ทนคณกทาทดดครบทกกฎทงวงจรแลว คณจะไดเหนอรคยมกวางแลวบอกวา “คณทาได” ทนกอยาลมกลบไปเขยนยนตเทสต๑

ของคณเองหลงจากกลบไปทหนาจอของคณละ

ยงมอะไรอกเยอะ...

คณนาจะตองไดอานหนงสอของ Kent Beck เรอง “Test Driven Development: By Example” ในหนงสอยงม Tips and Tricks

อกมายมายทจะชวยใหคณทาทดดไดคลองและงายขน

ศษย: อาจารย๑ ขางงกบทดดเหลอเกน จะเปนไปไดอยางไร ทขาจะเขยนยนตเทสต๑กอนจะมโคดระบบเกดขนมา

อาจารย: เจาจงใชจนตนาการ ใหเหมอนวามนมอยส

ศษย: แตกระนน ขากยงไมรอยดวาขาจะเทสต๑อะไร

อาจารย: ศษย๑เอย อะไรกไดทเจาตองการ

ศษย: อาจารย๑หมายความวา ใหขาเทสต๑อะไรกไดทขาตองการ แลวกสงทจะเกดขนกบโคดระบบในจนตนาการของขางนหรอ

อาจารย: ถกตองแลว

ศษย: อาจารย๑...ทานชวยบอกใหกระจางอกสกนดถงเรองมายาและจนตนาการเหลาน วามนจะประสบผลสาเรจไดอยางไร

อาจารย: นนะ แทจรงแลว มนไมใชมายาหรอจนตนาการอะไรทงนน ทเจาทาคอคนหาจากยนตเทสต๑ไปสการคนพบวาเจากาลง

จะทาอะไร ทาเยยงนโคดระบบทเจาไดจะตรงกบทเจาตองการมากทสด เยยงนยนตเทสต๑จะทาใหเจามนใจ วาเจาเดนมาถกทาง

เหตนทดดจงถกกลาวขานวามาชวยในเรองของการออกแบบมากซะยงกวาการทาเทสต๑ซะอก

ศษย: งนทดด กเปนเรองของการออกแบบ ไมใชเรองของการทาเทสต๑ อยางนนหรอ

อาจารย: จะวาอยางนน มนกกลาวอางเกนจรงไปหนอย จงจาไววาหวใจของทดดคอการทาเทสต๑ เพราะยงไงเสย ทดดกเอามาใช

เทสต๑โคดระบบของเรา เพอดวามนทางานไดจรงหรอไม แตอยางไรซะถาจะทาทดด เจากเลยงการออกแบบกอนไมได

ศษย: ขอบคณทานอาจารย๑ ขาคงจะตองกลบไปทบทวนเรองนใหมาก

Page 204 of 220

ยงไงตอด

ทผานมากคงจะไดเหนแลววา ยนตเทสต๑ชวยในการทาเทสต๑ไดอยางไร รแฟคเตอร๑ชวยใหโคดสะอาดสวยงามไดอยางไร และทดด

ชวยในเรองการออกแบบและขจดความซบซอนไดอยางไรคดดๆ ทกอยางถกรวมมาไวในทดดไวหมดแลว

ตอไปกถงคราวจะตองรเกยวกบพลงของ continuous integration แลว!

Page 205 of 220

ตอน 15 Continuous

Integration: ท าใหมนพรอมจะขน

โปรดกชนเสมอ

เตรยมพรอมทจะพบกบสงดๆทจะมากบการพรอมจะขนโปรดกชนเสมอกนเถอะ คณไดเรยนรวา คณควรนาสวนตางๆของ

ซอฟต๑แวร๑ของคณมารวมกนอยางตอเนองไดอยางไร ถงจะทาใหคณฆาบกไดแตเนนๆ เพอลดคาใชจายของการแกไขซอฟต๑แวร๑ลง

และสามารถดพลอยงานไดอยางมนใจ และเหมอนกบวา คณคงจะตองทามน เดยวน!

15.1 ไดเวลาโชว

ขาวดกอน ไดเรคเตอร๑ของคณกาลงจะพานกลงทนผมอทธพลในวงการ มาดผลตภณฑ๑ตวสาคญ แบลคแจค เวอร๑ชนลาสดของ

คณขาวรายกคอเคากาลงจะมาภายในหนงชวโมง! นนกหมายความวา คณมเวลานอยกวา 60 นาท ทจะทาตวอยางททางานได

ถกตองและเอาขน test serverเพอเตรยมพรอมสาหรบเดโม คณจะทายงไงด? (แถวบานเรยก ลก)

กอนคณจะตอบคณควรจะใชเวลาซก 2 นาท คดถงสงผดพลาดทอาจเกดขนไดในการดพลอยซอฟต๑แวร๑

Page 206 of 220

ขอผดพลาดดานบนคอสงทเราตองการจะขจดทงไป หรออยางนอยกควบคมมน ดวยเครองมอทเรยกวา Continuous Integration

(aka CI อานวาซไอ) เปนสงทเรานามาใชเมอเราตองการจะสรางวฒนธรรมการทางานทสงเสรมใหเกดการพรอมเสมอ สาหรบ

การ build release ขนโปรดกชน และสามารถจะเดโมผลตภณฑ๑เราใหใครกได เวลาไหนกได ทไหนกได (เมพ)เพอใหเหนภาพ

มากขน

มาดเหตการณ๑สองเรองตอไปนกนเถอะ

เหตการณ๑ท 1: งานเขาอยางแรง

หนงชวโมง! คณไมมเวลามากนก คณตนตม คณเรยกคนในทมเขามา แลวกเรมยงคาถามอยางกะปนกล:

ใครม build ลาสด?

เครอง desktop ใครอยทมนใจวาจะไมเพยน พรอมใชงานไมมปญหา?

ใครสามารถรนมนขนมาไดเรวทสด?

เนองจากคณไมเชอใจใคร นอกจากตวคณเอง คณบอกทกคนวา เครองคณจะเปนเครองทใชในการรวมโคดสาหรบเดโมน และทก

คนมเวลา 15 นาทในการ merge code มาท branch ของคณ พอคนอนๆเรม merge code เขามา กเรมมปญหาเกดขน

Interface ใน class หลกถกเปลยนไปแลว ไฟล๑ config กไมเหมอนเดม ไฟล๑จากระบบเกากโดน refactor ออกไป ไมมอยแลว การ

รวมการเปลยนแปลงทกอยางในทเดยวเรมกลายเปนฝนราย

คณกไดแตดาไดเรคเตอร๑คณในใจ วาทาไมไมใหเวลาเยอะกวาน(ฟระ) แลวกบอกคนอนๆวาให comment นนนออก และใส hack

เขาไปเพอจะไดยงไมตองรวม code ใหมๆเขามา

ยงเหลอเวลาอก 5 นาท คณกเรมเหนแสงสวางรบหร—compile ผานแลว!

Page 207 of 220

แตแลว บญมแตกรรมบง—นกลงทนมาถงกอนเวลา 5 นาท ไมเหลอเวลาจะ test แลว

นงสวดมนต๑ภาวนาไปพรอมดพลอยซอฟต๑แวร๑ไป เปด app ขนมาจะเดโม แลวมนก... crash คณแกปญหาอยางรวดเรวแลวกเปด

app ขนมาใหม เพยงเพอไดเหน splash screen แลวมนก crash อก

หลงจากหนาแหกเลกนอย และเหนวาเดโมคงไมเกดแน ไดเรคเตอร๑กเลยขอด app จาลอง (mock-ups) แทน จบขาว

เหตการณ๑ท 2: งานเขาสบายๆ

เนองจากคณรวาคณมเวลาอกหนงชวโมงเตมกอนจะเดโม คณกบอกทมของคณไวลวงหนาวากาลงจะมเดโม แลวคณกจะดใจ

มาก ถาทกคนจะทาสงททาอยใหเสรจและเชคอนโคด หลงจากทงานของทกคนไดถกเชคอนแลว คณกเชคเอาท๑โคดลาสดออกมา

รนเทส และหลงจากเหนวาเทสผานหมดแลว กสงตอไปเทส ซงเปนการเทสแบบอตโนมต ใชเวลาแค 5 นาทเทานน

นกลงทนมาถงกอนเวลา เดโมกไปไดสวย และหวหนาคณกขอบคณคณทคณสามารถเตรยมการนาเสนองานไดในเวลาอนสน

และกสงของบางอยางทคณตองการมาตลอดใหคณ—กญแจหองนาของผบรหาร (ผาง...)

โอเค โอเค คณไมอยากไดกญแจหองนากไดอะ แตคณเขาใจใชมยวาผมกาลงพยายามจะบอกอะไรการเตรยมตวเดโมหรอสง

code ขนโปรดกชนไมจาเปนตองเปนเหตการณ๑ ตงเครยด หนกหนาสาหส เสมอไป คณควรตองการให การ build การรวมโคด

และการ deploy ซอฟต๑แวร๑ ไมเปนเหตการณ๑อะไรทใหญโต และการทคณจะทาอยางนนได คณกตองมกระบวนการ continuous

integration ทราบรน และวฒนธรรมการพรอมจะขนโปรดกชนอยเสมอ

15.2 วฒนธรรมการพรอมจะขนโปรดกชนอยเสมอ

มคาพดนงใน Extreme Programming ทวา โปรดกชนเรมตงแตวนแรกของโปรเจค ตงแตคณเรมเขยนโคดบรรทดแรก คณก

จะตองปฏบตกบมนเหมอนกบมนอยบนโปรดกชน และหลงจากนน กใหเหมอนกบคณกาลงแกไขระบบทมคนใชอยจรงแลว

มนเปนมมมองตอโคดทแตกตางออกไปอยางสดซง แทนทจะมองโปรดกชนและการ deploy เปนเหตการณ๑ไกลๆในอนาคต คณ

จนตนาการวาคณและทมของคณอยในโปรดกชนทกวน และกเปลยนแปลงพฤตกรรมใหเหมาะสม ชาวแอจไจล๑ ชอบ

แนวความคดของการพรอมจะขนโปรดกชนอยเสมอ เพราะมนเนนใหเหนวา ซอฟต๑แวร๑จะใชเวลาอยบนโปรดกชนมากกวาในชวง

development และมนทาใหทมเคยชนกบการทจะตองทาการเปลยนแปลงระบบทพรอมจะขนโปรดกชนเสมอ การรกษา

วฒนธรรมการพรอมจะขนโปรดกชนอยเสมอไมไดงายหรอไดมาฟรๆ ถงมนจะตองใชวนยขนสดยอด และมนกมสงลอใจใหเลอน

การลงทนกบโคด เพอใหมคณภาพโปรดกชนออกไปเพราะตารางเวลาอยเยอะมาก แตคนทลงทนกบสงเหลานแตเนนๆ สามารถ

ทาการเปลยนแปลงโปรเจคไดอยางรวดเรว พวกเคาสามารถ deploy ไดอยางงายดาย เปลยนแปลงระบบไดบอยๆ และอยางม

ความมนใจ และตอบรบความตองการของลกคาไดเรวกวาคแขง และสงททาใหเราทาสงเหลานได กคอ continuous integration

Page 208 of 220

15.3 อะไรคอ Continuous Integration

Continuous integration คอ การเอาการเปลยนแปลงท dev ทากบซอฟต๑แวร๑ มารวมกนอยตลอดเวลา ตลอดทงวน ลอง

เปรยบเทยบกบการเขยนหนงสอ จนตนาการวาคณและคนเขยนหนงสอรวมกบคณกาลงเขยนบทบทนงอยดวยกน แลวคณ

จะตองรวมการเปลยนแปลงของคณกบเคา การรวมการเปลยนแปลงไมกประโยคนนไมยาก

มนเปนเฉพาะตอนทเราไมเอางานมารวมกนเปนระยะเวลานานเทานนแหละ ทมนจะเปนปญหาหนก

Page 209 of 220

การเขยนซอฟต๑แวร๑กเหมอนกน คณไมรวมการเปลยนแปลงของคณกบเพอนๆในทมของคณนานเทาไร การเอาโคดมารวมกนก

ยากเพมขนเทานน เรามาดกนวา เราจะเอาสงนไปใชจรงไดยงไง

“รกษาความเรวไว”

ครงนง ผมอยโปรเจคซงมเครองมอเทสแบบอตโนมตทสดยอด ทสามารถบนทกการกระทา แลวเอามา play ใหมได มนดมากจน

ทกคนเรมใชมนในการบนทกเทสทงหมด และกเลกเขยน unit tests ทรนเรวกวาและเทสใน level ทเลกกวา มนกโอเคอยระยะนง

แตหลงจากทมเทสแบบบนทกเพมขนเรอยๆ build อตโนมตของเรากระโดดจากใชเวลา 10 นาทนารกๆ กลายมาเปนมากกวา 3

ชวโมง สงนมนฆาเราในทสด หลายๆคนเลกจะรน build เคาเรมจะไมคอยเชคอนโคด และ build พงกเปนเรองปกตของโปรเจค

อยาไดทาผดพลาดเหมอนอยางพวกเรา ทปลอยให build ใชเวลานานเกนไป คอยสงเกตเวลา build ของคณไวตลอด ใหมนนอย

กวา 10 นาทนาจะเปนกฎทด โปรเจคเลกๆสวนใหญสามารถทาใหนอยกวา 5 นาทได

15.4 มนท ายงไง?

การทจะเซตกระบวนการ continuous integration คณตองการสงเหลาน:

repository ของ source code

Page 210 of 220

กระบวนการในการเชคอนโคด

build ทรนอตโนมต

ความเตมใจทจะทางานแบบทละนอยๆ

repository ของ source code เปนทเกบและทาเวอร๑ชนใหกบโคด ทนคอทททม dev ของคณ “เชค” โคดเขาไป มนเปนททโคดมา

รวมกน และเปนตนฉบบของโคดของคณ repository แบบ open source อยาง Git หรอ Subversion จะเปนเพอนชวยคณไดตรง

น อยางไรกตามกรณาอยาไปใช repository ทมการ lock ไฟล๑แบบมองโลกในแงราย (หมายถงอนทยอมให dev เพยงคนเดยวแก

ไฟล๑ใดๆในชวงเวลาหนงๆ) มนจะทาให dev คณหงดหงด ทาใหทมทางานชาลง และยงไมทาใหเกดการทคนในทมจะรสกเปน

เจาของโคดรวมกนดวย กระบวนการเชคอนทดนนนาสนใจกวา เรามาดวาทมแอจไจล๑ทวไปเคาทากนยงไง

15.5 สรางกระบวนการเชคอน

กระบวนการเชคอนทวๆไปสาหรบ dev ททางานในทมทเปนแอจไจล๑มกจะเปนอยางน:

1.เอาโคดลาสดมาจาก repository กอนทคณจะเรมงานชนใหม คณจะตองมนใจวาคณมโคดใหมลาสดจาก repository ตรงนคอ

ตรงทคณเชคเอาท๑โคดลาสด และเรมตนแบบคลนๆ

2.ทาการเปลยนแปลง แลวคณกทางานของคณ คณเพมความสามารถใหม แกบค หรอทาอะไรกตามทจาเปน

3.รนเทส เพอใหมนใจวา สงทคณเปลยนแปลงไป จะไมทาใหสงอนพงในโคดทกๆสวนคณรนเทสเพอใหเหนวาทกอยางยงผานอย

4.เชความการเปลยนแปลงเพมอกมย เมอคณมนใจวา การเปลยนแปลงของคณจะทางานไดแลว คณก update มาจาก

repository อกครง เผอวามใครทาอะไรไป ในระหวางทคณทาการเปลยนแปลงของคณอย

5.รนเทสอกครง แลวคณกรนเทสอกครงนง เพอทาใหมนใจวามนยงเวร๑คอยเมอรวมกบการเปลยนแปลงใหม ทเขามาในระหวาง

คณทางานอย

Page 211 of 220

6.เชคอน ระบบทางานได ทกอยาง build ผาน เทสรนผาน เรามโคดลาสด กเชกอนไดอยางปลอดภยแลว

นอกเหนอจากกระบวนการเชคอนแลว มสง ควรทา และ ไมควรทาสองสามอยาง เกยวกบความประพฤตตอ build ทด

ทายทสดแลว มนคอการใหความเคารพกบ build คอยดวามนยงรนดอย และชวยเหลอกนเวลาทมนพง (ซงกเกดขนไดบาง)

15.6 สราง build อตโนมต

สเตปถดไป คอ การสราง build อตโนมต นเปนแกนหลกของกระบวนการ continuous integration ของทมคณเลย

build อตโนมตทด จะ compile โคด รนเทส พดงายๆกคอทาอะไรกตามทจะตองถกทาเปนประจา ในกระบวนการ build ของโปร

เจคคณ dev รนมนตลอดเวลา โดยเปนสวนหนงของชวตประจาวนของ TDD และเอเยนต๑ build (อยาง CruiseControl) กใชมน

เพอรน build เมอไหรกตามทมนสามารถตรวจจบไดวามการเปลยนแปลงเกดขนใน repository

Page 212 of 220

build อตโนมตยงสามารถทจะ deploy ซอฟต๑แวร๑ไปยงโปรดกชนอยางอตโนมตไดดวย ซงจะสามารถลดความผดพลาดทเกดจาก

มนษย๑ลงไปไดอก

หวใจหลกของ build ใดๆกคอ ความอตโนมต—มคนเกยวของนอยเทาไรยงด คณยงควรจะตองรกษาเวลา build ของคณใหเรวอย

เสมอ เพราะคณและทมของคณจะรนมนอยบอยๆ หลายๆครงตอวน (นอยกวา 10 นาท นาจะเปนกฎทด)

ภาษาโปรแกรมใหมๆสวนใหญม framework สาหรบ build อตโนมตเปนของตวเอง (Ant สาหรบ Java, NAnt หรอ MS-Build

สาหรบ .NET, และ rake สาหรบ Rails) ถาภาษาทคณใชไมม คณกสามารถสรางขนมาเองไดโดยใชไฟล๑ bat ของ DOS หรอ

สครปท๑ของ Unix แตถงแมจะมกระบวนการเชคอนและ build อตโนมตทดยงไง สงททาใหมนเวร๑คจรงๆคอ ความเตมใจทจะ

ทางานแบบทละนอยๆ

Page 213 of 220

15.7 ท างานทละนอยๆ

เชนเดยวกบ TDD การเอาโคดมารวมกนทละนอยๆจะงายกวา

บอยมาก ททมมกจะไมเอางานมารวมกนเปนวนๆหรอเปนอาทตย๑ๆ —มนนานเกนไป คณตองการทจะรวมโคดของคณทกๆ 10 ถง

15 นาทหรออะไรประมาณน (อยางนอยทสดทกชวโมง) ไมตองเครยดไป ถาคณไมสามารถจะเชคอนไดบอยขนาดนน แคคณตอง

เขาใจวายงคณทาบอยแคไหน มนกจะงายมากขนเทานน ดงนน merge โคดของคณเรวๆและบอยๆ เพอเลยงความเจบปวดของ

การรวมโคดเยอะๆแลวจะไปเรยนรเพมเตมไดทไหน?

Continuous integration ไดกลายมาเปนวธปฏบตทใชกนแพรหลาย ทคณสามารถจะหาทกสงทคณตองการผานเวบได

Wikipedia มบทสรปทด เกยวกบวธปฏบตน และคณกยงสามารถหาบทความแรกๆเกยวกบ continuous integration ไดทเวบ

ของ Martin Fowler

Page 214 of 220

ลกศษย: ทานอาจารย๑ เราไมสามารถทาใหทกอยางพรอมจะขนโปรดกชนไดใน iteration แรกแนๆ ทานหมายความวาอยางไรกน

แน เมอทานพดถง การพรอมจะขนโปรดกชน

อาจารย: การพรอมจะขนโปรดกชนมนเปนทศนคต เมอเจาเขยนโคดทพรอมจะขนโปรดกชน เจาเทส และรวมซอฟต๑แวร๑ของเจา

เขาดวยกนวนน เมอไรทเจาเหนบก เจากจะแกมนเดยวน เจาไมกวาดมนเขาไปซอนไวใตพรม และจนตนาการวาจะไปจดการกบ

มนในซกวนขางหนา เจามทศนคตทวา ซอฟต๑แวร๑ตองทางานไดวนน ไมใชซกวนในอนาคต ใช เจาอาจจะยงไมไดมฟเจอร๑เจ๐งๆทก

อยางทเจาอยากได และใช เจาอาจจะเลอกทจะไม deploy จนกวาจะมฟเจอร๑มากกวาน แตการทเจามตวเลอกวาเจา deploy ได

และการทเจารวาซอฟต๑แวร๑เจาทางานไดอยางถกตอง คอการทเจายอมรบวา ซอฟต๑แวร๑ของเจาจะใชชวตสวนมากอยในโปรดกชน

(ไมใชในการพฒนา) และทาใหเจาเคยชนกบการเปลยนแปลงสงทอยในระบบโปรดกชนแลว

ลกศษย: แลวถาขาไมสามารถ build ระบบทงหมดได เพราะโปรเจคของขาเปนเพยงสวนเลกๆของระบบทใหญกวาเทานนละ

ทาน

อาจารย: เจากจง build เทส และ deploy ในสวนทเจาทาไดส สกวนนง เจากจะตองรวมสวนของเจาเขากบสวนอนๆ เจาจงทาให

ตวเจามนใจวา สวนของเจานนพรอมอยเสมอ เพอทเจาจะไดทาการแกไขไดทกเมอทจาเปน อยาใหความเปนจรงทสวนของเจา

เปนเพยงสวนเลกๆสวนหนง มาหยดเจาจากการทา build อตโนมต และการรวมซอฟต๑แวร๑ของเจาอยเสมอ

จบแลว!

คณไดเหนมนไปหมดแลว ความงดงามของวธปฏบตของวศวกรรมซอฟต๑แวร๑ในแบบแอจไจล๑:

● Unit testing†เพอพสจน๑วาสงทเราสรางมาทางานไดอยางถกตอง

● Refactoring†ศลปะของการทาใหโคดซบซอนนอยลง สะอาด และอานงาย

● Test-driven development (TDD)†สาหรบการออกแบบ และจดการกบความซบซอน

● Continuous integration†นาทกสงทกอยางมารวมกนอยเสมอ และรกษาสภาพของความพรอมทจะขนโปรดกชน

ถาไมมสงเหลานแลว โอกาสทโปรเจคแอจไจล๑ของเราจะประสบความสาเรจคงมนอยมาก และเรากจะกลบไปอยในยคหนท “โคด

แลวกมาแก”

Page 215 of 220

15.8 จะไปไหนตอด?

ยนดดวย! ตอนน คณมความรและทกษะเปนอาวธตดตวทจะเรมตน วางแผน และเรมทาโปรเจคแอจไจล๑ของคณเองไดแลว

คณจะไปไหนตอดขนอยกบคณ ถาคณกาลงจะเรมโปรเจคใหม คณอาจจะอยากเรมตนดวยชนเรมตน (ตอนท 3 จะชวนทกคนมา

ขนรถไดอยางไร ทหนา 48) ชวนทกคนขนรถไปดวยกน และไปยงทางทถกตอง ดวยการถามคาถามยากๆ ตงแตเรมโปรเจค

หรอ ถาคณกาลงอยกลางโปรเจค (และแผนของคณกพลาดมากอยางเหนไดชด) บางทคณอาจจะเรมตนใหม ดวยการจดเวร๑คช

อปรวบรวมสตอร (หวขอ 6.4 จะจดเวร๑คชอปรวมรวมสตอรไดอยางไร ทหนา 108) เลอกสตอรทสาคญมากๆมาไมกอน และดวา

คณจะสามารถทามนใหเสรจทละนดทละหนอยในทกๆอาทตย๑ไดหรอไม แลวกสรางแผนใหมจากตรงนน

หรอ ถาคณมปญหาทางดานวศวกรรม คณอาจจะเรมดวยการดวธปฏบตทางดานวศวกรรมของคณ ดวาคณไมไดทาเทสแบบ

กะหรวๆ และคณจายหนทางเทคนคอยเสมอ

เราไมไดมแผนท คณจะตองคนหาเอาเองวาอะไรทดทสดสาหรบคณและโปรเจคของคณ แตคณตองเขาใจวา คณมเครองมอ

ตางๆ และผมพนนไดเลยวา คณรอยแลวดวยซาวาจะตองทาอะไร

อะไรทหยดคณอยละ?

ออกไปเรมตนทามนไดแลว!

คาสงเสยสดทาย

ทกอยางขนอยกบการเลอก

ไมมใครหยดคณจากการทาซอฟต๑แวร๑คณภาพดได ไมมใครหยดคณจากการพดอยางจรงใจกบลกคา เกยวกบสถานภาพของโปร

เจคและสงทตองทาได

อยาเขาใจผมผด—สงเหลานไมงาย เรามอดตเปนทศวรรษและสงตางๆทจะตอตานคณ แตทายทสดแลว คณตองเขาใจวา การท

คณจะทางานยงไง และคณภาพของงานของคณจะเปนยงไง ขนอยกบคณเทานน

Page 216 of 220

คณไมตองชกชวน

คณไมตองบอกคนอนวาควรทายงไง

แตคณนาดวยการทาใหด ยอมรบวาคนอนๆอาจจะไมรวมดวยในบางท และทาในสงทจาเปนตองทา

โอว และอกอยางนง

ไมตองกงวลกบการเปนแอจไจล๑

คาถามนงทไดยนตลอดเวลาทมทมเรมทาแอจไจล๑ใหมๆ กคอ “เราถงรยง? เราเปนแอจไจล๑รยง?”

และมนกเปนคาถามทคณมสทธจะถาม เหมอนกบเวลาคณเรมทาอะไรใหมๆครงแรก คณกคงอยากจะรวาคณเปนยงไงบาง และ

คณกาลงทาตามในหนงสออยางถกตองรเปลาและนนมนกโอเค แคคณตองเขาใจวา มนไมไดมหนงสออะไรหรอก—ไมใชเลมน

หรอเลมไหนๆ มนไมไดมรายการทตองถกเชควาทาแลวในแอจไจล๑ ทผมหรอใครๆสามารถจะใหคณได ทจะบอกคณไดวาคณเปน

แอจไจล๑รยงมนเปนการเดนทาง ไมใชจดจบ คณจะไมมวนถงและอยาลม มนไมใชเรองของการ “เปน” แอจไจล๑ มนเปนเรอง

ของการทาผลตภณฑ๑ทยอดเยยม และใหบรการระดบโลกกบลกคาของคณ ผมพดไดอยางเดยววา ถาคณคดวาคณทามนสาเรจ

แลว และคณมคาตอบสาหรบทกอยาง คณไดหยดเปนแอจไจล๑แลว ดงนน อยายดตดกบวธปฏบต นาสงตางๆจากหนงสอเลมน

ไป แลวทาใหมนเหมาะสมกบสถานการณ๑และบรบทของคณ และเมอไหรกตามทคณสงสยวา คณกาลงทาสงตางๆใน “แบบแอจ

ไจล๑” อยรเปลา ใหถามคาถามสองคาถามนแทน:

เรากาลงสงงานทมคณคาอยทกๆอาทตย๑รเปลา?

เราพยายามอยางหนกทจะพฒนาตวเองใหดขนอยเรอยๆรเปลา?

ถาคาตอบของคณคอ ใช ทงสองคาถามแลวละก คณเปนแอจไจล๑แลว

Page 217 of 220

Appedix A วธสอการของเรา มาแปล Agile Samurai กนนะ

รเรมโดย @roofimon บ.ก. เกรยนเพรซ

แบงงาน

Part Name p By Note

1 Introducing Agile 32p @roofimon รฟ @roofimon อกสองวนนาจะเสรจทน Barcamp Bangkok พอด :) @roofimon ลอยตวเสรจแลว

2 Agile Project Inception

46p @sinapam แปม @sinapam เรมแผวแลว - -” @roofimon ฟตมากผมแอบเหน มพระเอกใหมมาชวยบท 5 ครบ byrdbird จดหนก

3 Agile Project Planning

67p @kluak110 ปอม @kluak110 เรมแลว อยางชาๆ @roofimon เสรจแลวเดยวไปชวยครบ ตงหกสบหนา @giornos ปอม ผมขอตดบท 7 ไปให เก๐นะคนเคาแรงส๑

4 Agile Project Execution

42p @chonnikan น รสกนองเก๐ จะสนของนองน เพราะไดขาววา น เมาอย ==” @juacompe ผสรางภาพ

@juacompe: สรางรปให 3 รป เหนอยแลว พรงนมาทาตอ ไปเลน angry bird กอง.. @roofimon jua ตด angry bird วะ ทารปเสรจหมดแลว รอคนแปลเนย :) @natty อก 5 หนาเทานนๆๆๆ บทท 9 กจะเสรจแลวววววว (แบบไมมรปนะ แตไมตองหวง หาแรงงานมาทารปไดแยว แฮๆ) @chonnikan มาแลวๆ เดยววนนจะเรมแปลบทท 10 คะ เดยวลองด speed กอน ภาษาไทยไมแขงแรง ออ @nattyait เสรจหมดแลว บท 9 และ 11 แตไมมรปก๏าาาา รอ

Page 218 of 220

คนทารปเนย :) @เดยวไปทาให จวไปไหนเนย

5a Creating Agile Software (c12-13)

22p @siriwat ฮอ @siriwat เพงเรมครบบทท 12 ยากเหมอนกนนะเนย ทจะใหอานรเรองสอความไดเหมอนกบทผแตงตองการ

5b Creating Agile Software (c14-15)

22p @chompoonut @chompoonutเรมแลวคราบ ม deadline มยเนย หรอวาสายไปซะแลว @roofimon ไมมครบ จดไปเรอยๆ

หลกการ

1. จงใสศพท๑ เกรยน และ ดรามา ลงไปบางเพอความบนเทง

2. แยกไฟล๑กนแปลเพอความสะดวก ไมงนจะยาวใหญ ตงชอประมาณวา “Part 1 - Introducing Agile”

Page 219 of 220

Appendix B ทม

AeY Chompoonut สาว(แก)ลกนาเคม เกดทตราด เลกๆเรยนทจนทบร มาโตอกททชลบร ไดทางานดๆทกรงเทพ แตไมชอบเทยวทะเลแถวบาน ทางานบรษทซอฟต๑แวร๑แตไมไดเขยนโคด โดนใหโจทย๑มาแปลหนงสอ...เอย.. พจะเอาสาระจรงจงหรอเปลาคะ เอ๐จะไดแตงใหใหม :)

@byrd_bird ทางานพนกงานบรษทเอกชน เปน Corporate Ladder ทไมไดมเปาหมายทจะไตบนไดไปใหสง แตเชอในปรชญาของการดาเนนชวตและแงคดทวาผลยอมเปนไปตามเหต ไมวาแมวจะสอะไรถาแมวจบหนไดกคอจบหนได สงสดของศลปะการตอสคอทายงไงใหคตอสของเราพายแพอยางปลอดภยและไมบาดเจบ ถาเรามองหา Win-Win Solution ไดกอนยอมเจอทางออกทดทสด แนนอนวามนคงไมมาทางออกทดทสดเสมอไป แตจะมทดทสดดวยเงอนไข ณ เวลานนๆเสมอ คอจรงๆแลวผมอยากจะสอวาถดจาก agile มนอาจจะมอะไรทดกวา ตอนนเราอยในยค Empirical ทเราไมสามารถหาทฤษฎมาอางองการทา Software Industry ไดด Process เปนเพยงสงทเปนกรอบใหคนทางานไดสะดวกรวดเรวและทาซาได วนนงท Maturity เราดกวานอาจจะมอะไรทไมตองคดมากเหมอนเราผลตรถยนตร๑กไดครบ

‎@chonnikan อกหกมาจากบรษท software ยกษ๑ใหญ ทวนๆกอไดแตถอยหลงลงนาตก เลยมาซบอกสานกซามไรเพอฝกวทยายทธใหแกรงกลา มความใฝฝนวาจะ apply และเผยแพร Agile methodology ไปสวงการอนนอกจาก IT เพราะเหนวามดเลยอยากแชร๑

@giornos Giorno(Ita.)=วน Add(Eng.)=เพม GiornoAdd=ขอวนเพมหนอยครบ ทางานไมทน สงท Programmer ตองการ

กนถ๏กคน Programmer เปนงานทเปนทงศาสตร๑และศลป ถางานไมถง Deadline สมองไมแลน เอา Agile มาชวยกทาใหเรา Art

เหมอนเดมแตเปน Art ทหลอม๏าก

@gomora77 ไมเคยคดวาจะไดมาทางานสายคอม แตกเบลอๆทงเรยน ทงทามาไดหลายป ในสวน Software Development

ของบรษทผใหบรการมอถอแสน”ด” ไดพบวาหนงสอแอจไจล๑อานงายกวาทคด ในตอนทมาแปล Agile Samurai นเอง ชนตอไป

จะเปนการลองปรบการทางาน ใหไปในแนวทางแอจไจล๑ทละนดๆ เพอทจะไดกลบบานเรวขนๆอกทละหนอยๆ….

@juacompe เดมทเขาเคยเปนนนจา(วา)อยหมบานนารสา ไตเตาจากนนจาฝกหดจนขนมาเปนเงา top gun กอนจะไดรบ

แตงตงจากโฮคาเงะใหเปน site admin 2 ปกอนเคาไดสมผสกบ Hyper-Productivity (H-P) ในตานานบนเสนทาง dynamic

language แบบแว๏บๆ เขายอมท... งวชานนจาทงหมด ผนตวมาเปนซามไรพเนจรรอนเรตามหา H-P แมหลายคนจะหาวาเขาบา

เขากยงตงหนาตงตาหามนตอไปดวยหวใจบชโด

Page 220 of 220

@kluak110 ทา software development มาหลายป หลายท หลายอยาง หลายตาแหนง หนหลงให waterfall มาพกใหญ ไมคดจะกลบไปอกแลวชาตน สงสารทกคนทยงจมปลกอยกบ waterfall และอยากทาใหพวกเขารวาชวตเขาจะดขนไดดวย agile ปจจบนเปนซามไรพอลกออนอยบรษท software ขามชาตขนาดใหญท agile พอเปนทรจกในวงแคบแตไมถงกบยอมรบในวงกวาง แอบใชตาแหนงหนาทการงานคอยสอดแทรกและเผยแพร agile ใหกบรอบขางทกครงทมโอกาส

@nattyait ชอเลนวา เก๐ ชอฝรงวา nattyตามหาไดแถวๆ สถานททม Agile หรอ Roofimon ไดรบความร Agile อยางเปนทางการ มาจาก AIT อดตเคยทางานในแผนก IT ของบรษทนาดาแหงหนงและพยายามเอา Agile ไปใชแตไมสาเรจปจจบนจงออกมาตามหาฝนในองค๑กรท Agile และพฒนาซอฟท๑แวร๑ดวย Python และรบงานสอนเปนอาจารย๑พเศษดานคอมพวเตอร๑ (เทาทมคนจาง -/\-) มความฝนอยากอยในองค๑กร Agile ระดบโลกก..ก *0* มนใจวา เปนหนงใน Agile evangelists หญง ทมเพยง 2 คนในประเทศไทย :D ใชเวลาวางไดมสาระเปนครงแรกในชวต โดยการแปลหนงสอ Agile Samurai และจะยงคงดารงชวตเกรยนๆ อยใน เกรยนเพรสตอไปเรอยๆแลวเจอกนนะ ชาวเกรยน @roofimon เกรยนลกสอง ทยงเชอเสมอวางานพฒนาซอฟท๑แวร๑เปนงานทมเสนห๑ตองใชคนทมพนฐานทางความคดทดเขามาทาถงจะไดงานทดและมคณภาพ @sinapam แอจไจล๑ซามไรขนอยในสายเลอด คดวาแอจไจล๑ จรงๆคอ คอนเซปต๑ในการใชชวต ไมใชแค process ในการพฒนาซอฟต๑แวร๑ ยดหลก ทกอยางในโลกม เปาหมาย กบ วธการ เปาหมายตองชดเจน วธการมาเลอกเอา เชอวา ถาแยกสองอยางนไมออกชวตจะดรามามวากก Siriwat Jithunsa ซามไรพอลกสอง ทา software development มานานอย ไดรจกแอไจล๑มาประมาณ 4 ป เรมจาก XP ตอนนทางานอยบรษท Software ขามชาต ทาไปทามากคดวา กอยาไปตดยดกบวธการมากนก อะไรทคดวา work กบเรา กบทม นาลอง กทาเลย