Geeky Academy Batch 2 Week#1

ใน Batch แรกผมพลาด เพราะช่วงที่รับสมัครตอนนั้นเป็นช่วงที่กำลังทำ Senior Project อยู่
ซึ่งน่าเสียดายมาก พอมี Batch 2 เกิดขึ้น ผมจึงไม่รีรอ ที่จะส่ง Proposal แม้จะส่งซะช้าเชียว


ก่อนของจริงจะเริ่มขึ้น ทาง Geeky Academy ก็ได้จัด Code Retreat ขึ้นซึ่งผมก็ได้เข้าร่วมด้วย
Code Retreat คืออะไร สนุกยังไง ลองไปอ่านดูนะครับ

ในวันแรกพี่รูฟได้กล่าวต้อนรับนักเรียน Geek ทุกคน จากนั้นพี่บอม (Karan Sivarat) ก็เริ่มสอนเรา
เริ่มต้นด้วย Agile Manifesto โดยสอนแบบไม่หลุดคำว่า Waterfall ออกมาเลย
แต่ใช้คำว่า Traditional แทน :P แต่ก็เป็นแค่ Concept ลอยๆ ว่า Agile คืออะไร ข้อดีคืออะไร ?


จากนั้นช่วงสายพี่นน (Varokas Panusuwan) ก็ได้แวะมาในระหว่างที่เราพัก Cool Down จากการเรียน
เนื่องด้วยพี่นน ก็อาจจะดูออกว่าการสอนแค่ Agile Manifesto และบอกว่าเทียบกับ Traditional นั้นมีวิธีการและข้อดี ข้อเสียอย่างไร จึงชวนพวกเราเล่น "Factory Game" 

Factory Game
จะแบ่งนักเรียนออกเป็น 2 กลุ่ม กลุ่มละ 6 คน (คนที่เหลือยืนดู)
โดยพี่นน จะทำหน้าที่ Product Owner ที่จะออก Spec ของที่จะต้องให้ทีมทำขึ้นนั่นคือ ...
สี่เหลี่ยมนี่คือ Post It นะ โดย 6 คนในทีม จะแบ่งหน้าที่กันตามนี้
  • คนแรกทำหน้าที่หยิบ Post It ออกจากกอง
  • คนที่สองวาดสี่เหลี่ยม
  • คนที่สามวาดสามเหลี่ยม
  • คนที่สี่วาดวงกลม
  • คนที่ห้าวาดกากบาทพร้อมแรเงา
  • คนที่หกทำหน้าตรวจสอบคุณภาพ
โดยในรอบแรก (3 นาที) พี่นน (ในหมวกที่ไม่ใช่ Product Owner) จะให้แต่ละทีมวาดครั้งละ 6 แผ่น แต่ละคนในทีมจะต้องทำเสร็จเป็นอย่างๆ ไป เช่น คนแรกจะต้องหยิบ Post It หกแผ่น ส่งให้คนที่สองวาดสี่เหลี่ยมทั้ง 6 แผ่น และทำไปเรื่อยๆ และส่ง PO ทีละ 6 แผ่นที่ทำเสร็จ ผลรอบแรกออกมาโดยนับจากจำนวน งานที่ทำเสร็จต่องานที่เสียคือ 
  • ทีมที่ 1 ได้ 0/38
  • ทีมที่ 2 ได้ 0/36
ในรอบที่สอง พี่นน (ในหมวกที่ไม่ใช่ Product Owner) กำหนดว่าให้วาดขึ้นทีละใบ คือคนแรกหยิบ Post It ให้คนที่สองวาด แล้วส่งต่อๆ ไปเรื่อยๆ ทีละใบ และส่งให้ PO ดูทีละใบ ผลรอบสองออกมาโดยนับจากจำนวน งานที่ทำเสร็จต่องานที่เสียคือ 

  • ทีมที่ 1 ได้ 8/17
  • ทีมที่ 2 ได้ 6/18
แต่สิ่งที่น่าสนใจไม่ใช่การแข่งขันของทั้ง 2 ทีมแต่เป็นตัวเลขอีกชุดที่พี่นน เขียนไว้โดยที่เราเอง (และคนดู) ก็ไม่ได้สังเกตุว่ามันคืออะไร นั่นคือ เวลาในส่งมอบงานให้ Product Owner ชิ้นแรก ซึ่งเป็นดังนี้
  • รอบแรกเวลาในการส่งมอบชิ้นแรกของทั้ง 2 ทีมเป็น 2 นาที และ 2 นาที 6 วินาที ตามลำดับ
  • รอบสองเวลาในการส่งมอบงานชิ้นของทั้ง 2 ทีมเป็น 36 วินาที และ 38 วินาที ตามลำดับ
จากเกมนี้เรามองเห็นอะไร ... นี่คือการเปรียบเทียบการทำงานแบบ Agile vs Traditional ได้ค่อนข้างชัดเจนเลยทีเดียว เราจะเห็นว่าในรอบแรกพี่นนตั้งใจให้พวกเราส่งมอบงานทีละเยอะๆ ในครั้งเดียว (ในการพัฒนา Software คงหมายถึงการทำทุกอย่าง Upfront เช่นเก็บ Requirement ให้หมด Design ให้หมด แล้วค่อยส่งให้อีกฝ่ายจัดการ) ทำให้เมื่อถึงเวลาตรวจรับแล้วไม่ตรงความต้องการ งานก็จะเสียเยอะกว่าที่ควรจะเป็น และไม่ได้อะไรเลย เพราะการทำทีละ 6 อัน มันช้ามาก กว่าที่แต่ละ 6 อัน จะถูกส่งไปแต่ละคนจนเสร็จ 

แต่รอบที่สองจะเห็นว่า เวลาที่ส่งมอบงานเร็วขึ้นกว่า 3 เท่าตัวและยังได้ผลลัพธ์ที่น่าพอใจอีกด้วย เพราะอะไร ? เนื่องจากที่เราส่งงาน PO ด้วยขนาดงานที่เหมาะสม ทำให้ส่งได้เร็ว และบ่อยมากพอ เราก็จะเห็นว่ามัน Fail ยังไงเร็วขึ้น จากนั้นก็แก้ไขให้ถูกต้องตามความต้องการ พอ Improve แล้วก็จะเริ่มมีงานที่ตรงความต้องการมากขึ้นเรื่อยๆ ซึ่งเป็นลักษณะการทำงานแบบ Agile ที่จะใช้การทำทีละไม่มาก (งานสำหรับ 1 - 2 อาทิตย์) ส่งงานบ่อย คุยกับ PO บ่อย

หลังจากที่ร่ายยาวเรื่อง Factory Game เพราะผมชอบมาก คือมันทำให้ผม Wow! ได้เมื่อรู้ว่าจุดประสงค์ของมันคืออะไร จากนั้นพี่บอมก็สอนต่อเรื่องของ Scrum ซึ่งเป็น Framework หรือจะเรียกว่ากรอบการปฏิบัติเพื่อให้ทีมทำงานตามหลักคิดของ Agile Manifesto โดยจะมี Practices ต่างๆ ที่เราจะต้องทำเพื่อประโยชน์ที่อยู่ด้านหลังของกิจกรรมนั้นๆ เช่น Sprint Planning, Product Backlog Refinment, Planning Poker ซึ่งผมเคยเขียน (แต่ไม่ครบหรอก) สมัยตอนที่ทำตอนฝึกงานไว้ที่นี่ Scrum by Doing 
พอมาช่วงบ่าย มีกัน 18 คน เลยจัดการแบ่งทีมออกเป็น 3 ทีมและรับงานจาก Product Owner มาทำกันใน Agile Software Development ที่ใช้ Scrum กันแบบเต็มๆ ทำทุก Engineering Practice ที่ Scrum โดยวันนี้มีเวลาไม่มาก พี่รูฟจึงให้เป็น Sprint 0 เริ่มจากการคุยกับ Product Owner เพื่อเก็บ Requirement และ Refinement Product Backlog เพื่อให้เห็นงานชัดเจนมากขึ้น สรุป Feature ที่ต้องทำตาม Priority ส่วนสิ่งที่ได้ลงมือทำใน Sprint 0 ก็เป็นการคุยกันเรื่อง Technology ที่ใช้และ Setup Development Environment กันซะส่วนใหญ่ 

ซึ่งสิ่งที่ทีมเราเลือกมาใช้งานกันคือใช้ Node.js เป็น Backend และ AngularJS เป็น Front-end
เรียกว่าเป็นเทคโนโลยีใหม่สำหรับ (เกือบ)ทุกคนเลยก็ว่าได้ 

มีการทำ Sprint Planning Part 1 นิดหน่อยเกี่ยวกับ Feature ที่ PO เลือกมาให้ทีม และทีม(ทั้ง 3 ทีม) หยิบไปคุยกันคนละ Feature ซึ่งก็ได้ทำ Sprint Planing Part 2 ด้วยการเล่น Planning Poker เพื่อ Estimation (ประเมิน) งานแต่ละชิ้นที่ต้องทำ

วันที่ 2 ของสัปดาห์แรกมาถึงก็ Daily Scrum กันตอน 9.30 ตรงเวลาเลย กิจกรรมที่จะเกิดในวันนี้คือ Sprint 1 ใช้เวลา 6 ชั่วโมง 1 ชั่วโมงต้อง Daily Scrum งาน 1 ครั้ง และส่งตัวแทนมาทำ Scrum of Scrum เพื่อ Sync ความคืบหน้าทั้งหมด 

ช่วงเช้ามานั่งรวมหัวทำ Sprint Planning part 1 และ Sprint Planning part 2 เพื่อหยิบงานมาทำและประเมินเวลาที่ใช้กัน จากนั้นก็แยกย้ายกันไปทำงาน ทำงาน และ ทำงานจบวันที่การทำ Sprint Review และ Restrospective 

สิ่งที่ได้ในวันนี้คือ ส่วนใหญ่คนจะ Retrospective กันไปในทางเดียวกันคือเรื่องของ Knowledge และเรื่องอื่นๆ แต่มักจะต้องโยงกลับมาว่า สาเหตุที่แท้จริงคือ Knowledge ไม่พร้อมที่จะทำงาน ใช่ครับ ทุกคนอยากท้าทาย อยากใช้เทคโนโลยีใหม่ๆ แต่ก็ใช่ว่าจะดีเสมอไป 
และจะเห็นว่าการทำงานใน Agile Environment ช่วยให้เราเห็นว่าเรา "กาก" แค่ไหน ที่ผลออกมาแล้ว เรา Deliver อะไรไม่ได้เลย (Definition of Done ของพวกเราคือ Go Production) แค่ Sprint เดียวเราก็เห็นว่าจะต้อง Improve อะไรบ้าง เราลืมคุยกันเรื่องการทำ Integration Test ลืม Prototype งานง่ายๆ เพื่อให้ทุกคนในทีมเห็นภาพรวมทั้งหมดของ Definition of Done ที่เราได้ตกลงไว้กับ Product Owner 

จน Product Owner รู้สึกแบบนี้


จบเท่านี้ล่ะครับ Week หน้าทีมจะ Improve และไม่ทำให้ผิดหวังนะครับ :)

Popular posts from this blog

12 วิธี การบริการและดูแลลูกค้าในร้าน Starbucks

[Android Dev] การติดตั้ง Eclipse+AndroidSDK เพื่อพัฒนาโปรแกรมบน Android

5 TED Talk ที่จะช่วยให้คุณทำงานดีขึ้น