Agile คืออะไร
สำหรับใครที่ยังไม่แน่ใจว่า Agile คืออะไรแล้วมันจะช่วยให้เราทำงานได้ดีขึ้นยังไง ลองใช้เวลาที่หน้านี่ซักนิดเพื่อทำความเข้าใจใน Agile และเรียนรู้แนวคิดและแนวทางปฏิบัติของ AglieAgile Software Development
เรามาเริ่มกันที่พื้นฐานก่อนดีกว่า Agile ไม่ใช่โปรแกรมหรือขั้นตอนการพัฒนาซอฟแวร์ แต่เป็น
แนวคิดในการพัฒนาซอฟแวร์ที่คำนึงถึงความพึงพอใจของลูกค้าสูงสุด โดยอาศัยการประสานงานและร่วมมือระหว่างลูกค้าและกลุ่มผู้พัฒนาอย่างใกล้ชิด ร่วมทั้งอ้าแขนรับความต้องการที่เปลี่ยนแปลง เพื่อผลิตซอฟแวร์ที่ตรงความต้องการของลูกค้าอย่างแท้จริง
Agile Manifesto (English version)
Manifesto เป็นคำศัพท์ที่คนไทยไม่ได้ใช้บ่อยนัก เอาเป็นว่ามันคือแนวคิดหลักของ Agile ที่ให้ความสำคัญกับสิ่งเหล่านี้
การประสานงานและทำงานร่วมกันระหว่างบุคคลในกลุ่มนักพัฒนา มากกว่า การใช้เครื่องมือหรือ Process ในการสื่อสารภายในทีม
กล่าวง่ายๆคือเน้นการพูดคุยกันระหว่างนักพัฒนามากกว่าการใช้ Process หรือเครื่องมือในการสื่อสาร ตัวอย่างเช่น การรายงาน Bug ของ Tester ไปยัง Developer ควรมีการพูดคุยทำความเข้าใจถึงปัญหาที่เกิดระหว่าง Tester และ Developer ประกอบกับการใช้ Bug tracking tool เพราะการพูดคุยจะทำให้ Developer เข้าใจปัญหาได้อย่างรวดเร็วและสามารถแก้ไขได้อย่างถูกต้อง นอกจากนี้ยังเน้นความเป็้นทีมและความรับผิดชอบส่วนบุคคลที่มีที่มีต่อทีม โดยทุกคนภายในทีมควรให้เกียรติซึ่งกันและกันและร่วมรับผิดชอบต่อโปรเจกต์
การสร้างซอฟแวร์ที่สามารถใช้งานได้ มากกว่า การผลิตเอกสารที่มากเกินความจำเป็นในการอธิบายการทำงานของซอฟแวร์
ซอฟแวร์ที่สามารถใช้งานได้นับสิ่งที่สำคัญที่สุดเพราะเป็นสิ่งที่ลูกค้าต้องการ และยังเป็นเครื่องมือที่ดีที่สุดสำหรับการแสดงการใช้งานของซอฟแวร์ แต่การผลิตเอกสารประกอบซอฟแวร์ก็ยังเป็นสิ่งจำเป็นแต่เราควรเลือกเฉพาะเอกสารที่ำจำเป็นเพื่อลดระยะเวลาให้การผลิตและ maintain เอกสารให้มีข้อมูลที่ถูกต้องและทันสมัยตลอดเวลา
ความร่วมมือจากลูกค้า มากกว่า สัญญาการผลิตซอฟแวร์
สัญญาที่ทำระหว่างบริษัทผลิตซอฟแวร์และลูกค้าเป็นการระบุความต้องการของลูกค้าโดยใช้ข้อมูลของสิ่งแวดล้อม ณ เวลาที่ทำสัญญา แต่การผลิตซอฟแวร์ั้นั้นใช้เวลาและการเปลี่ยนแปลงเกิดขึ้นได้ตลอดเวลา ดังนั้นความร่วมมือจากลูกค้าเป็นสิ่งสำคัญที่จะทำให้ซอฟแวร์ที่ผลิตมีความถูกต้องตามความต้องการของลูกค้าในเวลาปัจจุบัน ถ้าหากขาดความร่วมมือจากลูกค้าซอฟแวร์ที่ผลิตขึ้นก็จะเป็นซอฟแวร์ที่ตอบสนองความต้องการในอดีต ณ เวลาที่ทำสัญญา แต่ไม่แน่ว่าจะใช้ได้เมื่อถึงกำหนดส่งซอฟแวร์จริง การให้ลูกค้ามีส่วนร่วมในการพัฒนาซอฟแวร์ยังมีผลทางด้านความสัมพันธ์และความไว้วางใจของลูกค้า เพราะลูกค้าจะได้รับรู้ถึงความคืบหน้าและปัญหาระหว่างการพัฒนาอย่างใกล้ชิด
การตอบสนองต่อการเปลี่ยนแปลง มากกว่า การดำเนินงานตามแผนงานที่ว่างไว้ล่วงหน้าซึ่งไม่คำนึงถึงการเปลี่ยนแปลง
เมื่อความต้องการเปลี่ยน นักพัฒนาควรจะยอมรับกับการเปลี่ยนแปลงและตอบสนองต่อการเปลี่ยนแปลง ไม่ควรยึดติดกับแผนงานที่ว่างไว้ล่วงหน้าในระยะเวลานาน เพราะการดำเนินการตามแผนงานจะส่งผลให้ซอฟแวร์ที่ผลิตไม่สามารถใช้งานได้ในที่สุด การเปลี่ยนแปลงที่เกิดขึ้นควรจะมีการถ่ายทอดภายในกลุ่มนักพัฒนาและลูกค้า เพื่อร่วมการตัดสินใจในการปรับเปลี่ยนแผนงานให้สอดคล้องต่อการเปลี่ยนแปลงและตอบสนองความต้องการของลูกค้า
อย่างที่เราได้กล่าวไว้แล้วว่า Agile เป็นเพียงคอนเซปต์ที่ไม่ได้ระบุขั้นตอนการปฏิบัติไว้ชัดเจน ดังนั้นผู้ที่ต้องการนำ Agile ไปใช้ในการพัฒนาซอฟแวร์จึงต้องศึกษาวิถีปฏิบัติ (Methodology) ซึ่งกำหนดขั้นตอนและวิธีการปฏิบัติที่สอดคล้องต่อแนวคิด Agile
ในปัจจุบันมีวิถีปฏิบัติอยู่หลายแบบเช่น Scrum, Acceptance Test Driven Development และอื่นๆอีกมากมาย ซึ่งผู้อ่านสามารถหาข้อมูลได้ที่นี่เช่นกัน
วัตถุประสงค์ของ Agile
1. เน้นว่าใครถนัดอะไร และการพูดคุยสื่อสารกัน มากกว่า การยึดติดที่เครื่องมือและกระบวนการ เช่นเปลี่ยนให้โปรแกรมเมอร์ไปคุยกับลูกค้าแทน ลูกค้าบอกอะไรมาก็ทำตามนั้นได้เลย
2. ให้ทำงานโดยยึดที่ผลผลิตหรือ software เป็นหลัก เช่น เดิมเน้นเอกสารแต่ Agile ไม่
คำนึงถึงมากนัก แต่จะให้ความสำคัญที่ว่าเรามี s/w หรือของส่งให้ลูกค้าได้ตรงตามความต้องการหรือไม่
3. ให้ความสำคัญเรื่องของการติดต่อสื่อสาร เช่น เดิมมีสัญญาหรือ contact กันแต่ Agile ไม่สนใจ ให้มองที่ความสัมพันธ์ระหว่างผู้พัฒนาและลูกค้า
4. ยอมรับความเปลี่ยนแปลง เช่น เดิมต้องวางแผนให้ครบเป็นอย่างดี และทำตามแผน(Gantt chart) ให้ได้ แต่ Agile ไม่ต้องทำตามแผนแต่เน้นการสนองความเปลี่ยนแปลงที่เกิดขึ้นได้
ถ้าเรามีโปรเจคเก่าที่สามารถต่อเนื่องได้ ดังนั้นแสดงว่าเรามี Asset เดิมเพื่อมาตั้งต้นทำโปรเจคใหม่ เพราะฉะนั้นงานใหม่เราก็สามารถนำ Asset มาส่งมอบไปก่อนก็ได้
Agile Manifesto: http://agilemanifesto.org