ผมไม่ได้เป็นกูรู Agile อาจจะอธิบายเรื่องนี้ได้ไม่ดีเท่าไหร่ แต่คอนเซปหนึ่งที่สัมผัสได้จาก practice เกือบทั้งหมดของ Agile ที่เคยผ่านหูผ่านตามา คือ การเน้นที่ Rapid Feedback
ไม่ว่าจะเป็น TDD, Continuous Integration/Deployment ที่พยายามให้เราเห็นผลกระทบหลังจากการเปลี่ยนแปลง code ทันที หรือที่แฝงๆ อยู่ใน practice อื่นๆ เช่น Stand-up meeting (คุยกันบ่อยๆ ทำให้อัพเดตการเปลี่ยนแปลงของเพื่อนร่วมทีมได้เร็ว), Iterative development (ทำให้งานเป็นชิ้นเล็กๆ จบในตัวเอง เห็นผลชัดเจน)
เรื่องเกี่ยวกับ rapid feedback เรื่องหนึ่งที่น่าสนใจ ผมได้ฟังมาจากพี่ @juacompe ใน session เรื่อง Seeking Hyper Productivity ที่ Opendream คือ เค้าบอกว่าการที่มีนักเล่นเกมส์เก่งๆ ได้ แต่ในชีวิตจริงไม่สามารถสร้างคนที่เก่งขนาดนั้นได้ เพราะเกมส์เป็นสิ่งที่มี rapid feedback สูงกว่าชีวิตจริงมาก
หลังๆ นี้ ในงานที่ทำอยู่รู้สึกว่าหลายๆ ปัญหาจะไม่เกิดขึ้นหรือเกิดขึ้นมีความเสียหายเบากว่านี้ หากเรามี feedback ที่เร็วกว่านี้ ที่เห็นชัดๆ และคิดว่าเป็นกันบ่อยๆ คือ การเขียนโปรแกรมไปแล้ว ไม่ได้ใช้ เพราะรู้ในภายหลังว่าใช้ไม่ได้ หรือเข้าใจอะไรบางส่วนผิด หรือ overengineer เขียน feature ที่ไม่เคยได้ถูกใช้
สำหรับบริษัทที่มีพนักงานจำนวนไม่เยอะมาก การทำให้พนักงานสามารถ focus สิ่งที่สร้าง value ได้ เป็นสิ่งสำคัญมาก ถ้าเป็นทีมที่พัฒนา End-user application ผมว่าควรให้ user experiences นำทุกๆสิ่ง ไม่ว่าจะเป็น infrastructures, tools, frameworks หรือแม้กระทั่ง platform เลยทีเดียว เพราะจะเป็นจุดที่ตอบคำถามได้ว่าเราสมควรทำอะไรไม่สมควรทำอะไรบ้าง
แต่ไม่ว่าอย่างไร ผมคิดว่ามันเป็นไปได้ยากมากที่เราจะ design อะไรแล้ว ไม่ต้องมีการแก้อีก เพราะในการทำ project มักจะมีปัญหาที่มองไม่เห็น ณ ตอนที่เราเริ่มคิด และทำๆไปก็จะมี requirement change อยู่เสมอๆ (ในจุดนี้ผมก็ยังไม่ค่อยเข้าใจว่า ทำไมกับกิจการอื่น เช่น การโยธา ถึงเป็นไปได้ แต่กลับมีปัญหากับทางซอฟต์แวร์)
การคิดวางแผนเยอะๆ เป็นสิ่งที่ดี แต่ต้องทำควบคู่ไปกับความรู้สึกในใจที่จะพยายามทำให้เห็นเป็นรูปเป็นร่างเร็วๆ โดยที่งานต้องมีคุณภาพในระดับที่พร้อมจะรองรับการเปลี่ยนแปลงได้อยู่เสมอๆ
การทำให้เกิด rapid feedback นั้น ต้องพยายามทำอยู่ตลอดเวลา บางทีมพัฒนาซอฟต์แวร์แบบเน้น Prototyping ซึ่งผมมองว่าได้รับ feedback เร็วๆแค่บางส่วน เพราะในความจริงแล้ว ถึงแม้จะผ่าน prototype phase ไปแล้ว ก็ใช่ว่าจะไม่มีปัญหาแอบแฝงอยู่อีก ยิ่งกับ application บางประเภทมี scope ที่กว้าง บางทีมหั่นส่วน prototype ใหญ่เกิดไป ทำ prototype ไปซักพักก็รู้สึกว่าใหญ่เกิน เลิกทำไปอีก
ปัญหาที่สำคัญของการพยายามทำให้เกิด rapid feedback คือ การทำให้เกิด feedback นั้นก็มี cost เมื่อเราต้องการ focus feedback จากบางสิ่ง เราต้องยอมทำสิ่งอื่นง่ายๆ ในระดับพอใช้ได้ เพื่อที่จะได้ประกอบกันเป็นภาพรวม แต่งานทำอะไรง่ายๆ นั้น หลายๆครั้ง หลายๆคน อาจจะมองว่าต้องใช้ทรัพยากร และเวลามากเกินไป ที่จะทำมาแล้วสุดท้ายก็ต้องไปทำใหม่ ไม่ได้ใช้อยู่ดี
และบางครั้งการพยายามสร้าง feedback อาจจะทำให้เกิดความรู้สึกเหมือนเรากำลังเมินเฉยกับปัญหาบางอย่าง ที่เห็นอยู่กับตา แต่ไม่เกี่ยวกับสิ่งที่เราต้องการ feedback ณ ตอนนี้ เราเลือกที่จะพัฒนาโดยไม่ใส่ใจปัญหานั้นๆ ไปก่อน ซึ่งก็ตอบได้ยากว่าเราจะพัฒนาได้ยืดหยุ่นเพียงพอที่จะนำปัญหาที่เราเคยเห็นมาต่อเติมในภายหลังจากที่เราได้รับ feedback จากสิ่งที่ต้องการได้หรือไม่
สุดท้ายแล้วทุกอย่างก็ต้องชั่งน้ำหนักแหละครับ ว่า ณ จุดที่เราอยู่ ความสามารถของเรา โจทย์งาน ระยะเวลา สิ่งแวดล้อมต่างๆ เหมาะที่เราจะทำอะไรแค่ไหน เหล่านี้เป็นเรื่องของประสบการณ์ล้วนๆ ครับ ก็ต้องเรียนรู้กันไป