เกรียนเพรส - roofimonpage 2 of 220 table of contents ค าน า 11...
TRANSCRIPT
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 11 of 220
ค าน า ขอขอบคณทมงานผรวมทาหนงสอเลมนมากครบ ทแสดงพลงอยางตอเนองนบตงแตหลงจบงาน “BarCamp Bangkok IV” ก
ปลอยของกนอยางเมามนส๑ไมมยง อาจจะมสะดดไปบางเพราะมบางทานเปนพอลกออน บางทานกหนไปเมา บางทานกไปเลน
เกมส๑ออนไลน๑ บางทานมาชวยทารปแลวกหายไป บางทานกตดงาน บางทานกสวย บางทานกหลอ แตทกทานลวนแลวแตม
ความตงใจทจะนาเสนอและนาเอาความรทมแบงปนสคนอนอยางเตมทไมมกก
หนงสอเลมนไมสอนใหคณใชแอจไจล๑เปนดงนนอยาหวงวาอานหนงสอเลมนจะแลวจะสามารถเดนกรางไปบอกชาวบานไดวา
“ผมใชแอจไจล๑ ผมรจกแอจไจล๑ด จากการอานหนงสอแอจไจล๑ซามไร” เพราะทานอาจโดนตบกระโหลกไดเนองจากหนงสอเลมน
เปรยบเสมอหนงสอนาเทยวเกาหลทจะบอกวาเกาหลนาไปอยางนนอยางน แอจไจล๑นาใชนะ แตละสวนประอบของแอจไจล๑เปน
อยางไร กระบวนการทางานแบบแอจไจล๑มนเทยงไงแบบคราวๆมาก ดงนนสงตอไปทควรจะทาหลงจากอานหนงสอเลมนจบคอ
“จางทมงานผแปล(บางทาน)ไปท า Agile Coaching ครบ”
บรรณ (หนงสอ) + อธการ (เจาการ) เกรยนเพรส
เสาร๑ท 1 มกราคม 2554
บานแม อาเภอสวรรคโลก จงหวดสโขทย 64110
อกนด นอกจากหนงสอเลมนแลวทานทสนใจใฝแอจไจล๑ยงสามารถเขาไปศกษาเพมเตมไดจากเวบแอจไจล๑เทๆ อนเปนจดเรมตอนของการหลอกทานสมาชกหลายทานมาแปลหนงสอเลมน รบรองไดวาเนอหาเขม
http://www.agile66.com
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 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 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 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 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 กบเรา กบทม นาลอง กทาเลย