Screen Shot 2558-03-16 at 7.34.12 AM
หลังจากที่อ่านหนังสือ The nature of software development จบ
พบว่ามีหลายๆ เรื่องที่น่าสนใจมาก
หนึ่งในนั้นคือ เรื่อง Agile methods ซึ่งอยู่ในบทที่ 20 ของหนังสือ
ที่มันน่าสนใจก็คือ ผู้เขียนหนังสือคือ Ron Jeffries เป็นหนึ่งในผู้ประกาศ Agile Manefesto
ดังนั้น มาดูกันว่าเขามีมุมมองอย่างไรบ้างต่อ Agile

สิ่งที่เน้นย้ำก็คือ
เราจะไม่ทำการสร้าง Agile method อื่นๆ ขึ้นมา
เนื่องจากเน้นไปที่การสร้าง software ให้มันดียิ่งขึ้นอย่างไร ?

ในปัจจุบันนั้น Agile method ที่ได้รับความนิยมสูงสุดคือ Scrum

ซึ่งโดยการออกแบบของ Scrum จะไม่ได้เน้นไปที่ software
ดังนั้นในการนำ Scrum มาใช้ในการพัฒนา software
จะต้องเพิ่ม technical practice ต่างๆ เข้ามาด้วยเสมอ เช่น

  • ATDD (Acceptance Test Driven Development)
  • TDD (Test Driven Development)
  • Refactoring
  • Continuous Integration

และอื่นๆ อีกมากมาย ซึ่งล้วนแต่มาจาก Extreme Programming (XP)

แต่ถ้านำแนวคิด Extreme Programming ไปใช้งาน
คุณมักจะขาด role ที่สำคัญไป
ซึ่งถ้าใน Scrum จะเรียกว่า ScrumMaster
แต่ถ้าใน Extreme Programming แล้ว เรามักจะเรียกว่า Coaching
ทำหน้าที่คล้ายๆ กันเลยนะ

ดังนั้น สำหรับผู้เขียน เขาบอกเลยว่า
Scrum + XP นั่นคือสิ่งที่ถูกต้อง
แต่ก็มีบางคนที่ไม่เห็นด้วยนะ

เน้นย้ำอีกรอบว่า The nature of software development

ไม่ได้เขียนขึ้นมา เพื่อบอกว่านี่คือ Agile method/framework ใหม่นะ
แต่เป็นหนังสือที่เขียนเพื่อให้คุณคิดว่า

อะไรคือสิ่งที่จำเป็นต่อการพัฒนา software

ซึ่งมีคำแนะนำดังนี้

1. ใช้ framework ที่เล็กๆ อย่าเยอะ

เนื่องจากใน Agile Manifesto ข้อแรกบอกไว้ว่า

“Individuals and interactions over processes and tools”

ดังนั้น framework ที่คุณนำมาใช้ มันต้องยืดหยุ่นได้
ไม่ผูกติด ผูกมัด มากจนเกินไป
เป็นสิ่งที่เข้ามาช่วยให้เกิดการสื่อสาร
มิใช่สร้างขึ้นมาเพื่อควบคุมให้ทำอย่างนั้นหรืออย่างนี้เสมอนะ

2. อย่าผูกมัดตัวเอง สามารถปรับเปลี่ยนมันได้เสมอ

ในการพัฒนา software ระบบใหญ่ๆ มักจะมีหลายทีม
ซึ่งย่อมมีขั้นตอนการทำงานที่เยอะแยะ
มากกว่าการทำงานเพียง 6 คนซึ่งอยู่ในทีมเดียวกันอยู่แล้วใช่ไหม ?

ดังนั้นในทุกๆ รอบของการทำงาน
ให้ทีมทำ retrospective หรือ การกลับมาดูขั้นตอนการทำงานในรอบที่ผ่านมาว่า
เรามีข้อผิดพลาดอะไร ที่ควรปรับปรุงบ้าง
เช่น ถ้าขั้นตอนการทำงานมันซับซ้อน หรือ ยุ่งยากเกินไป
ก็ให้ทำการลดลงดูไหม แล้วไปดูกันว่าในรอบถัดไปยังเกิดปัญหาเดิมไหม
เพื่อทำการปรับเปลี่ยนในรอบการทำงานถัดๆ ไป

3. เราควบคุม framework ไม่ใช่ให้ framework ควบคุมเรา

นั่นคือ เราสามารถปรับปลี่ยน framework เพื่อทำให้งานมีประสิทธิภาพมากขึ้น
ไม่ใช่เปลี่ยนเพราะว่า มันยาก หรือ เราคิดว่ายาก !!

จำไว้ว่า
แนวคิดต่างๆ เหล่านี้มันถูกสร้างขึ้นมาเพื่อให้เราปรับปรุงตัวเอง

4. เปลี่ยนขั้นตอนการทำงานของทีมคุณ

อย่าคิดว่าจะเปลี่ยนแปลงทั้งองค์กร
ให้เน้นไปที่ทีมนั้นๆ เลย เนื่องจากแต่ละทีมล้วนแตกต่างกัน

ดังนั้น สิ่งที่แนะนำก็คือ ตาดู หูฟัง สมองคิด อยู่อย่างเสมอ
โดยให้ดูจาก software จริงๆ ไม่ใช่จากรายงาน progress นะ !!

เนื่องจากเราสร้าง software แบบ feature-by-feature
ดังนั้น ดูจากผลจากขั้นตอนการทำงาน
แล้วนำผลนั้นมาวิเคราะห์ว่า ผิด และ ถูกอะไร
แล้วให้ทำการแก้ไขปรับปรุงไปเรื่อยๆ

อย่าไปยึดติดกับขั้นตอนแบบใดแบบหนึ่งนะ !!
ตัดเสื้อต้องตัดให้เมาะกับคนนั้นๆ สิ !!

5. การเรียนรู้สำคัญมากๆ

ในการพัฒนา software นั้น ความสามารถในด้านต่างๆ
เพื่อทำให้ software นั้นเสร็จออกมา มันสำคัญมากๆ
ตั้งแต่ฝ่าย business, management มาจนถึง technical

โดยที่ technical คือคนที่อยู่กับ software นั้นในทุกวัน
ดังนั้นจึงต้องการความสามารถที่เฉพาะเจาะจง เพื่อทำให้ software มันออกมาดี
ซึ่งความสามารถเหล่านั้น ล้วนมาจากการเรียนรู้นั่นเอง
ไม่ว่าจะเป็นตัวเอง การ training การ support

6. รู้จักคิดเอง

คุณเห็นไหมว่า
การทำงานในรูปแบบเดิมๆ ที่ถูกควบคุมไปเสียทุกอย่าง
มันได้ผลลัพธ์ออกมาเป็นอย่างไร !!

ดังนั้นให้ทำการจัดการ หรือ กระทำ จากผลที่มันออกมาดีกว่าไหม
แต่อยู่ในกรอบเวลาอันสั้นๆ น่าจะดีกว่านะ

เทียบง่ายๆ เหมือนทีมกีฬา
แน่นอนว่า ก่อนการแข่งขันย่อมมีการซ้อม วางแผนกันเป็นอย่างดี
แต่เมื่อลงไปแข่งในสนามจริงแล้ว
สถานการณ์ต่างๆ มันแตกต่างจากการซ้อม และ วางแผนไปอย่างสิ้นเชิง

คำถาม
แล้วคนที่ชนะ หรือ ประสบความสำเร็จ ในเกมส์กี่ฬา คือใครล่ะ ?
คำตอบ
คือทีมที่ตอบสนองต่อเหตุการณ์นั้นๆ ได้ดีที่สุดไงล่ะ
ซึ่งในแต่ละสถานการณ์มันสามารถกระทำได้เยอะมากๆ
แต่การกระทำต่างๆ ล้วนเกิดมาจากการคิด ณ ตรงนั้น
ดังนั้น คุณต้องคิดเองได้ ประยุกต์ได้ ปรับเปลี่ยนได้
ซึ่งล้วนมาจากการฝึกซ้อม ฝึกฝน จนเชี่ยวชาญนั่นเอง

ทั้งหมดนี้คือ The Natural Way ของการพัฒนา software