แนวคิดการทำงาน ด้าน Software Development

Software Development แบบ Waterfall

จะเป็นการวางแผน กำหนดเป้าหมาย กระจายงาน ใน step ขั้นตอนเดียว ทำให้กว่าจะได้ผลลัพธ์สุดท้าย ใช้เวลานาน เป็นปัญหาใหญ่ตามมา 2 ประการสำคัญ ได้แก่

  1. ปัญหาเรื่องการวางแผนให้เป็นไปตามเวลา และงบประมาณ เนื่องจาก ขอบเขต (Scope) ของงานใหญ่ และมีการแบ่งทีมกันดูแล ทำให้ใช้เวลาในการรวบรวมงาน (Integration) หรือ สื่อสาร (Communicate)

  2. ปัญหาเรื่องการเปลี่ยนแปลงทั้งภายใน และภายนอก ที่ส่งผลให้โปรเจคต้องถูกพับเก็บไป เนื่องจากเป็น ขอบเขต (Scope) ใหญ่ ที่ วางแผนระยะยาว (Long-term planning) ทำให้เมื่อเกิดปัญหา ที่ผิดพลาดไปจากแผน ก็ไม่สามารถปรับตัว หรือเปลี่ยนแปลงอะไรได้มากนัก

Software Development แบบ Agile

แนวคิดหลักๆ ของ Agile มีดังนี้

  1. ทำงานเป็นทีม และมีการ สื่อสาร (Communicate) กันในทีมอย่างต่อเนื่อง
  2. ผิดพลาดได้ และต้องแก้ให้ได้โดยเร็ว พร้อมเปลี่ยนแปลง และปรับตัวอยู่เสมอ
  3. ค่อยๆ พัฒนาไปทีละนิดๆ โดยมีการส่งมอบงาน และ ปรับปรุง (Update) กันอย่างต่อเนื่อง ไม่รอให้เกิดเป็นโปรเจคใหญ่ แล้วส่งทีเดียว
  4. ลดขั้นตอนที่ไม่จำเป็น ให้ความสำคัญกับ ความคุ้มค่า (Value) ให้มากที่สุด

ยอมรับความเปลี่ยนแปลง เพราะ ความต้องการ (Requirement) อาจเปลี่ยนแปลงได้ตลอด แนวคิดแบบ Agile จะไม่ฟูมฟายกับการเปลี่ยนแปลง ไม่มีการทำงานหรือยึดติดกับ แผนภูมิแกนต์ (Gantt Chart) แต่จะทำงานแบบ ค่อนข้าง ยืดหยุ่น (Flexible) ตามสิ่งที่เกิดขึ้นจริงเป็นหลัก สามารถเปลี่ยนแปลงได้ตลอดเวลา มีการส่งมอบงานอะไรบางอย่างให้ทีมหรือลูกค้าอย่าต่อเนื่องทีละเล็กทีละน้อย เช่นส่งมอบอะไรใหม่ทุกๆ 2 อาทิตย์หรือทุกๆ เดือน จะไม่ให้ลูกค้ามีการรอ 3-6 เดือนเพื่อรอโปรเจ็คใหญ่เสร็จแล้วค่อยส่งมอบทีเดียว ไม่กลัวที่จะลงมือทำเพื่อที่จะเจอกับความผิดพลาดและแก้ไขไปทีละนิด จะไม่ใช่การวางแผนโดยละเอียดเพื่อป้องกันความผิดพลาด เน้นที่การมีปฏิสัมพันธ์ระหว่างบุคคลมากกว่าที่บอกว่าต้องเป็นไปตามกระบวนการ มีปัญหาอะไรให้พูดคุยกับทีมเลยทันที บางครั้งอาจถึงขั้นเอา นักเขียนโปรแกรม (Programmer) ไปเจอลูกค้าเพื่อให้เข้าใจ ความต้องการ (Requirement) ที่แท้จริงด้วย ให้ลูกค้าเข้ามามีส่วนร่วมตั้งแต่เริ่มกระบวนการ ซึ่งทีมมักจะประกอบด้วยหลายๆ ตำแหน่ง และมีอำนาจมากพอที่จะตัดสินใจทำหรือไม่ทำอะไรเพื่อ มุ่งหมาย (Drive) ให้งานที่ทีมรับผิดชอบสำเร็จตามเป้าหมาย

ข้อดีของการทำงานในแนวคิด Agile หลักๆ คือการไม่มีกำแพงระหว่างฝ่าย เพราะเอาทุกฝ่ายมาอยู่ในทีมเดียวกัน เน้นที่การสื่อสารระหว่างบุคคล ทำให้ลดความไม่เข้าใจลงไป และสามารถแก้ปัญหาได้รวดเร็วๆ (สมมติว่า ทดสอบ (Test) แล้วมีปัญหา ก็สามารถบอกกับ นักออกแบบ (Designer) หรือ นักเขียนโปรแกรม (Programmer) ให้แก้ไขได้ทันที โดยไม่ต้องส่งเรื่องข้ามฝ่าย) รวมถึงการที่ค่อยๆ ส่งมอบงานทีละนิดทำให้มีความยืดหยุ่นในการทำงานสูง

แนวคิดของ Agile ใน กรอบการทำงาน (Framework) แบบ Scrum

ภายใต้แนวคิด Agile นั้นมีหลากหลายวิธี แต่ Scrum เป็นวิธีการทำงานที่ได้รับความนิยมมากที่สุดสำหรับการทำงานภายใต้แนวคิดนี้ มันคือวิธีการทำงานที่ให้ ทีมช่วยกันรุม (Scrum) ทำงาน เพียงแค่ 3 ประเภทสำคัญคือ

เจ้าของสินค้า (Product Owner)

มีหน้าที่ประเมิน Values และจัด Priorities ของ Tasks ต่างๆ ให้กับทีม

ผู้นำทีมทำงาน (Scrum Master)

เป็นผู้ทำให้การทำงานเป็นไปอย่างลื่นไหล ซึ่งไม่ได้หมายถึงการเป็นผู้นำทีม แต่จะคอยกำจัดอุปสรรคที่ขัดขวางไม่ให้ทีมบรรลุเป้าหมาย

ทีมทำงาน (Team)

จะทำงานแบบตั้งแต่ต้นจนจบได้ด้วย การจัดการด้วยตัวเอง (Self-Management) โดยไม่ต้องข้ามแผนก ซึ่งในหนึ่งทีมจะประกอบด้วยคนประมาณ 3-9 คน ดังนี้

นักออกแบบระบบ (UX : User Experience) หรือ นักวิเคราะห์ระบบ (SA : System Analyse)
งานด้านนี้จะเกี่ยวข้องกับทุกกระบวนการที่สินค้าหรือบริการหนึ่งๆ มีปฏิสัมพันธ์กับผู้ใช้  ทั้งนี้เพื่อจะเก็บข้อมูล ความต้องการ (Requirement) ที่แท้จริงอย่างละเอียดกลับมา ลำดับความสำคัญ (Priority) แล้ว วางแผนงาน (Plans) แล้วส่งต่อให้ นักพัฒนาระบบ (System Developer) หรือ นักเขียนโปรแกรม (Programmer) ทำการ   เขียนโปรแกรม (Programming) แล้วทำการทดสอบ (Tester) ร่วมกัน เบื้องต้น แล้วนำส่งให้ เจ้าของสินค้า (Product Owner) ทำการทดสอบ และนำ ผลตอบรับ (Feedback) กลับมาแก้ไขปรังปรุงให้ตรงตามความต้องการของ เจ้าของสินค้า (Product Owner) หรือ ส่งมอบโครงการ

นักเขียนโปรแกรม (Programmer)

นักออกแบบหน้าตาระบบ (UI : User Interface )
เป็นงานดีไซน์ที่เน้นหนักเรื่องการออกแบบ ‘หน้าจอ’  หรือแพลทฟอร์มต่างๆ ที่ธุรกิจทำไว้เพื่อติดต่อกับผู้ใช้ ยกตัวอย่างเช่น เว็บไซต์ แอพลิเคชั่น เกมส์ รวมไปถึงฮาร์ดแวร์ที่จับต้องได้เช่นอุปกรณ์จอทัชสกรีน ฯลฯ   สำหรับเนื้องานของนักออกแบบ UI นั้นก็จะต้องปรากฏให้เห็นเป็นรูปธรรมได้ เพื่อว่านักพัฒนาแอพฯ หรือโปรแกรมเมอร์ จะสามารถนำไปใช้ต่อยอดได้ทันที ทักษะสำคัญของนักออกแบบ UI ไม่เพียงแต่จะต้องดีไซน์สิ่งที่สวยงามน่าใช้ แต่ยังต้องดูเป็นมิตร เข้าใจง่าย  (User-friendly) เช่น มีปุ่ม ไอคอน หรือสัญลักษณ์ต่างๆ ที่บ่งชี้ฟังก์ชั่นในตัวเอง มีภาษาภาพอันเป็นแนวทางมาตรฐานที่ผู้ใช้ในแต่ละยุคเข้าใจได้  ความท้าทายจึงอยู่ที่การออกแบบให้ลงตัวระหว่างความโดดเด่น มีบุคลิกแตกต่าง แต่ก็ต้องไม่ต่างจนเกินไป ลำบากถึงผู้ใช้ให้ต้องมาเรียนรู้ใหม่ด้วย ฉะนั้นสำหรับ UI Designer นอกจากคุณจะมีไอเดียด้านการออกแบบอยู่ในหัว มีฝีมือในการรังสรรค์ชิ้นงานขึ้นมา คุณยังต้องตามติดโลกและไลฟ์สไตล์ยุคใหม่ให้ทันอยู่เสมอ เพื่อจะรู้ว่ากลุ่มเป้าหมายของคุณนั้นใช้ชีวิตกันอย่างไร โดยเฉพาะในส่วนที่เกี่ยวข้องกับสินค้าหรือบริการที่คุณรับผิดชอบอยู่

วิธีการทำงานของ Scrum ก็จะประกอบไปด้วยสิ่งที่น่าสนใจดังนี้

ฺBacklog : เป็น Task งานที่ต้องทำ ทั้ง requirement ของลูกค้าและทีม ซึ่ง Product Owner จะเป็นคนตัดสินใจนำ Task ต่างๆ เหล่านี้เข้าไปใน Sprint ตามลำดับความสำคัญ (ส่วนใหญ่แล้วก็จะพิจารณาด้วย Value ของ Task นั้นๆ เมื่อแลกกับ effort ที่ต้องใช้)

Sprint Phase : อย่างที่บอกว่า Agile นั้น เน้นการส่งงานให้เร็วและบ่อย ซึ่ง Period นั้นจะเรียกว่า Sprint โดยมีกำหนดประมาณ 2-4 สัปดาห์ โดยเป้าหมายของ Sprint คือการ Deliver บางสิ่งบางอย่างให้สำเร็จ (Task ที่ Product Owner ได้ประเมินว่าควรทำตั้งแต่ก่อนเริ่ม Sprint) ซึ่งเมื่อจบ Sprint ก็จะมีการ Review ผลงาน (Sprint Review) ให้กับคนอื่นๆ ที่เกี่ยวข้องอาจจะเป็นทีมเซลล์ Users หรือลูกค้า เพื่อให้รับทราบถึงความคืบหน้าของโปรเจ็คต์อยู่เรื่อยๆ

Daily Scrum Meeting : ในทุกๆ เช้าทีมจะมีการประชุมสั้นๆ 10-15 นาที เพื่อบอกว่าเมื่อวานทำอะไร วันนี้จะทำอะไร และมีปัญหาอะไรบ้าง เพื่อให้การทำงานในทุกๆ วันเป็นไปอย่างราบรื่น ,รู้ว่ากำลังเดินเข้าสู่เป้าหมายหรือยัง และมีการแก้ไขปัญหาอย่างต่อเนื่อง

scrum เป็น development process ที่อยู่บนพื้นฐานของ Sprint หนึ่งใน implementation หลายๆวิธีที่อยู่ในค่าย Agile Software Development ในเมืองไทยตอนนี้กระแส Agile เริ่มมาแรงมากขึ้นเรื่อยๆ หน่วยงาน หรือบริษัทต่างๆก็เริ่มประยุคต์ใช้กันมากขึ้น หรือไม่ก็มีแนวโน้มว่าอยากจะทดลองใช้ดู ซึ่งเป็นแนวโน้มที่ดีมาก เพราะ Agile เน้นที่การทำให้ทุกฝ่ายมีความสุข

ลูกค้ามีความสุข Project Manager มีความสุข คนทำงานมีความสุข

Concept ของ Scrum
ประกอบไปด้วย 3 หัวข้อหลักคือ
1. เรื่องของทีมงาน (Role)
2. เรื่องของวิธีการทำงาน (Process)
3. เรื่องของการประเมินและติดตามงาน (Demonstration and Evaluation)

เรื่องของทีมงาน (Role)
ในทีมงานจะประกอบไปด้ย 3 Roles หลักๆได้แก่

Scrum Team คือคนทำงานจริงๆ มีประมาณ 5-9 คน แต่ละคนไม่ได้กำหนดงานตายตัว สามารถทดแทนกันได้เสมอ โดยคนในทีมงานมีหน้าที่ประเมินเวลาของ task ที่จะต้องทำ แจกจ่ายงานและ assign งานกันเอง ส่วนวิธีการทำงานไม่ได้กล่าวถึงไว้มากนัก

Product Owner เป็นตัวแทนของลูกค้า ทำหน้าที่จัดการเรื่อง product backlog ทั้งคิด ทั้งรวบรวม พร้อมทั้งต้องเป็นคนเผยแพร่ product backlog ให้ทุกคนได้รับรู้ ได้เห็นกันง่ายๆ เพื่อให้คนในทีมเห็นอนาคตว่าจะมีอะไรรออยู่ข้างหน้า คนนี้เป็นคนเขียน User Story ด้วยครับ

Scrum Master ทำหน้าที่ดูแลทีมงาน เป็นโค้ชของทีมงาน และเป็นคนรับผิดชอบคุณภาพของผลงาน จัดลำดับความสำคัญของงาน แตก task ของ user story ออกมา lead การประชุม daily scrum ตัดสินใจในเรื่องต่างๆตามความเหมาะสมไม่ว่าจะเป็นเรื่องของ design หรือ architecture ของระบบ (ย้ำว่าตัดสินใจไม่ใช่คนออกแบบ คนออกแบบคือ scrum team)

วิธีการทำงาน (Process)
โดยเนื้อหามี 3 ส่วนหลักๆ ได้แก่

Backlog เป็นรายการของ feature ที่ต้องทำ คำว่า feature นี้รวมถึง request จากลูกค้า bug fix และ specification ของตัว product โดยคนทำคือ product owner ซึ่งจะจัดลำดับ feature ตามความสำคัญ จัด list เพื่อนำเข้า sprint และจัดการกับรายละเอียดต่างๆของ feature เช่นต้องจัดทำ user story สำหรับแต่ละ feature เป็นต้น

Sprint phase คือช่วง iteration นั่นเอง โดยมีกำหนดไม่เกิน 30 วัน ซึ่งก่อนเริ่ม sprint ก็จะมีการนำ product backlog มาจัดลำดับความสำคัญเพื่อเลือกมาเป็น sprint backlog จากนั้น scrum team จะดู backlog และแตกเป็น task ย่อยๆออกมาและทำการ estimate เวลาที่ใช้ในแต่ละ task หลังจากได้เวลาและต่อรองกันระหว่างทีมงานแล้ว ก็จะได้ list ของ task และ list ของ backlog ที่จะทำภายใน sprint ขึ้นมา

Daily scrum คล้ายกับ standup meeting โดยทุกๆวัน scrum master และ scrum team จะมีการประชุมกันเพื่อจัดว่าเมื่อวานทำอะไรไปบ้าง และวันนี้จะทำอะไรบ้าง มีการถกกันเพื่อแก้ไขปัญหาที่เจอเมื่อวาน และจัดการ assign task ให้กับทีมงาน

การประเมินและติดตามงาน (Demonstration and Evaluation)
จุดเด่นของ scrum คือเราสามารถวัดผลของการทำงานได้ และได้ดีมากๆด้วย ด้วย burn-down chart ที่เรียบง่าย และธรรมดา แต่มันทำให้เห็นสภาพของ sprint ได้อย่างชัดเจน โดยหลักการแล้วก็คือ graph ของงาน โดยแกน y เป็น จำนวน task ที่เหลือ และ แกน x เป็นวันแต่ละวันของ sprint โดยในแต่ละ dairy scrum เราจะมีการ update graph กัน เพื่อให้เห็นภาพความคืบหน้าของงาน และหลังจากจบ sprint เราก็จะเอา graph นี้แหละมาประเมินผลงานของทีมงาน โดยมาดูในแต่ละจุดว่าเหตุใดบางช่วง graph จึงเป็นแนวนอนไม่ดิ่งลงมา burn-down chart จะมีประสิทธิภาพมากเมื่อใช้คู่กับ index card เพราะจะทำให้ plot graph ได้ง่าย และรู้สถานการณ์ภายใน sprint ได้ดี